alibaba/arthas · error · IllegalArgumentException

Unsupported action: ${input}. Supported actions: ${supported

Error message

Unsupported action: ${input}. Supported actions: ${supportedList}

What it means

After trimming and case-insensitive matching against the 15 supported actions (SUPPORTED_ACTIONS array), normalizeAction rejects any unrecognized value and lists all valid options in the message. Matching is case-insensitive, so 'START' and 'start' both pass.

Source

Thrown at core/src/main/java/com/taobao/arthas/core/mcp/tool/function/monitor200/ProfilerTool.java:240

        if (action == null || action.trim().isEmpty()) {
            throw new IllegalArgumentException("action is required");
        }

        String input = action.trim();
        for (String supported : SUPPORTED_ACTIONS) {
            if (supported.equalsIgnoreCase(input)) {
                return supported;
            }
        }

        StringBuilder supportedList = new StringBuilder();
        for (int i = 0; i < SUPPORTED_ACTIONS.length; i++) {
            if (i > 0) {
                supportedList.append(", ");
            }
            supportedList.append(SUPPORTED_ACTIONS[i]);
        }
        throw new IllegalArgumentException("Unsupported action: " + input + ". Supported actions: " + supportedList);
    }

    private void addOption(StringBuilder cmd, String option, String value) {
        if (value == null || value.trim().isEmpty()) {
            return;
        }
        cmd.append(" ").append(option);
        addParameter(cmd, value);
    }

    private void addOption(StringBuilder cmd, String option, Long value) {
        if (value == null) {
            return;
        }
        cmd.append(" ").append(option).append(" ").append(value);
    }

    private void addOption(StringBuilder cmd, String option, Integer value) {

View on GitHub (pinned to 21cf2e9ba5)

Solutions

  1. Use one of the listed supported actions exactly (case-insensitive).
  2. Call profiler(action="actions") to see the full list at runtime.
  3. Check spelling: common mistakes include 'stopAll', 'pause', 'reset' which are not supported.

Example fix

// before
profiler(action="pause")
// after
profiler(action="stop")
Defensive patterns

Strategy: validation

Validate before calling

// Before calling profiler, validate action against the supported list
Set<String> supported = Set.of("start","resume","stop","dump","status","meminfo",
    "list","version","load","execute","dumpCollapsed","dumpFlat","dumpTraces","getSamples","actions");
if (action == null || supported.stream().noneMatch(s -> s.equalsIgnoreCase(action.trim()))) {
    throw new IllegalArgumentException("Unsupported profiler action: " + action);
}

Try / catch

try {
    String result = profiler(action, ...);
} catch (IllegalArgumentException e) {
    if (e.getMessage().startsWith("Unsupported action")) {
        // action not in the supported list — check the message for valid options
    }
}

Prevention

When it happens

Trigger: Passing an action string not in {start, resume, stop, dump, status, meminfo, list, version, load, execute, dumpCollapsed, dumpFlat, dumpTraces, getSamples, actions}. Case-insensitive matching still applies, so only genuinely unknown names trigger this.

Common situations: Typo in the action name; using an Arthas CLI profiler subcommand name that differs from the MCP tool's mapping; version mismatch where a newer action is not yet supported in this build.

Related errors


AI-assisted analysis of alibaba/arthas@21cf2e9ba5 (2026-08-14). Data as JSON: /api/errors/e55f999fe69925d1. Report an issue: GitHub.