{"record":{"id":"7838bc359c366485","repo":"alibaba/arthas","slug":"optionname-must-be-greater-than-0","errorCode":null,"errorMessage":"{optionName} must be greater than 0.","messagePattern":"(.+?) must be greater than 0\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"core/src/main/java/com/taobao/arthas/core/command/klass100/ClassLoaderMetaspaceCommand.java","lineNumber":476,"sourceCode":"            throw new IllegalArgumentException(optionName + \" must not be blank.\");\n        }\n\n        String text = value.trim().toLowerCase();\n        long multiplier = 1;\n        if (text.endsWith(\"ms\")) {\n            text = text.substring(0, text.length() - 2).trim();\n        } else if (text.endsWith(\"s\")) {\n            text = text.substring(0, text.length() - 1).trim();\n            multiplier = 1000;\n        } else if (text.endsWith(\"m\")) {\n            text = text.substring(0, text.length() - 1).trim();\n            multiplier = 60 * 1000;\n        }\n\n        try {\n            long millis = Long.parseLong(text) * multiplier;\n            if (millis <= 0) {\n                throw new IllegalArgumentException(optionName + \" must be greater than 0.\");\n            }\n            return millis;\n        } catch (NumberFormatException e) {\n            throw new IllegalArgumentException(optionName + \" is invalid: \" + value);\n        }\n    }\n\n    private void logMappingSummary(MappingSummary summary) {\n        logger.debug(\"{} mapping summary, loadedClasses={}, candidateLoaders={}, emittedMappings={}, bootstrapClasses={}, arrayClasses={}, primitiveClasses={}, duplicateLoaderClasses={}\",\n                DIAG_LOG_PREFIX, summary.loadedClassCount, summary.candidateLoaderCount, summary.emittedMappingCount,\n                summary.bootstrapClassCount, summary.arrayClassCount, summary.primitiveClassCount,\n                summary.duplicateLoaderClassCount);\n    }\n\n    private void logRecordingSummary(RecordingData data, long recordingSize) {\n        logger.debug(\"{} recording summary, fileSizeBytes={}, statsEvents={}, distinctStatsRows={}, mappingEvents={}, fallbackMappings={}, mappedLoaderIds={}, mappingEventsWithoutLoader={}, duplicateStatsRows={}\",\n                DIAG_LOG_PREFIX, recordingSize, data.statsEventCount, data.statsRows.size(), data.mappingEventCount,\n                data.fallbackMappings.size(), data.mappingByLoaderId.size(), data.mappingEventWithoutLoaderCount,","sourceCodeStart":458,"sourceCodeEnd":494,"githubUrl":"https://github.com/alibaba/arthas/blob/21cf2e9ba52b305290be7223b980ff504bb9cb5b/core/src/main/java/com/taobao/arthas/core/command/klass100/ClassLoaderMetaspaceCommand.java#L458-L494","documentation":"Thrown as IllegalArgumentException by parseTimeMillis when the parsed duration (Long.parseLong(text) * multiplier) is <= 0. The numeric body parses fine but the resulting millisecond value is non-positive (e.g. 0, negative). A strictly positive duration is required.","triggerScenarios":"Pass a time option value of '0', '0s', '0m', '0ms', or a negative number like '-5s'. The multiplier (1 for ms, 1000 for s, 60000 for m) is applied, and millis <= 0 trips the guard.","commonSituations":"User intends 'disable' and passes 0; copy-paste mistake with a leading minus; default-of-zero from a misconfigured config file.","solutions":["Use a positive value: 1s, 500ms, 5m, etc.","If you mean 'no interval', omit the option (use its default) instead of passing 0.","Check for stray negative signs or zero defaults in config."],"exampleFix":"// before\nclassloader --refresh-interval 0s\n\n// after\nclassloader --refresh-interval 5s","handlingStrategy":"validation","validationCode":"long ms = parseMillisRaw(value);\nif (ms <= 0) { // reject before calling; supply a positive duration }","typeGuard":"static boolean isPositiveDuration(String s) {\n    if (s == null) return false;\n    try { return Long.parseLong(stripSuffix(s)) > 0; } catch (NumberFormatException e) { return false; }\n}","tryCatchPattern":"try { long ms = parseTimeMillis(value, optionName); } catch (IllegalArgumentException e) { /* prompt user for a value > 0 */ }","preventionTips":["Never pass 0 or negative durations; omit the option for the default.","Audit config files for zero defaults.","Validate duration is strictly positive before submission."],"tags":["classloader","user-input","parsing","validation"],"backgroundTag":null,"analyzedSha":"21cf2e9ba52b305290be7223b980ff504bb9cb5b","analyzedAt":"2026-08-14T00:57:07.243Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}