apache/cassandra · warning

JMX connection server is not enabled for either local or rem

Error message

JMX connection server is not enabled for either local or remote connections. Please see jmx_server_options in cassandra.yaml for more info

What it means

A WARN log (not an exception) from the checkJmxPorts startup check's execute(). When jmx_server_options.enabled is false in cassandra.yaml, both the local and remote JMX connection servers are disabled, so tools like nodetool cannot connect at all. Cassandra logs this warning so the operator notices JMX is fully off, and startup continues.

Source

Thrown at src/java/org/apache/cassandra/service/StartupChecks.java:548

    public static final StartupCheck checkJMXPorts = new StartupCheck()
    {
        @Override
        public String name()
        {
            return "jmx_ports";
        }

        @Override
        public void execute(StartupChecksConfiguration configuration)
        {
            if (configuration.isDisabled(name()))
                return;

            JMXServerOptions jmxServerOptions = DatabaseDescriptor.getJmxServerOptions();
            if (!jmxServerOptions.enabled)
            {
                logger.warn("JMX connection server is not enabled for either local or remote connections. " +
                            "Please see jmx_server_options in cassandra.yaml for more info");
            }
            if (!jmxServerOptions.remote)
            {
                logger.warn("JMX is not enabled to receive remote connections. " +
                            "Please see jmx_server_options in cassandra.yaml for more info.");
            }
            else
            {
                logger.info("JMX is enabled to receive remote connections on port: {}", jmxServerOptions.jmx_port);
            }
        }
    };

    public static final StartupCheck checkJMXProperties = new StartupCheck()
    {
        @Override
        public String name()

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. If JMX is needed, set jmx_server_options.enabled: true in cassandra.yaml and restart
  2. If only local JMX is wanted, enable it and keep jmx_server_options.remote: false so JMX binds only to localhost
  3. If fully disabling JMX is intentional, keep the config but update runbooks/monitoring that depend on nodetool to use alternative interfaces

Example fix

// before (cassandra.yaml)
jmx_server_options:
  enabled: false

// after
jmx_server_options:
  enabled: true
  remote: false
Defensive patterns

Strategy: validation

Validate before calling

// Pre-flight: fail fast if JMX is fully disabled but nodetool is required
import org.apache.cassandra.config.DatabaseDescriptor;
if (!DatabaseDescriptor.getJmxServerOptions().enabled)
    System.out.println("WARNING: JMX fully disabled (jmx_server_options.enabled=false); nodetool will not connect");

Prevention

When it happens

Trigger: checkJmxPorts (JMX accessibility check) executes at startup while DatabaseDescriptor.getJmxServerOptions().enabled is false — i.e. jmx_server_options.enabled: false was set (or defaulted) in cassandra.yaml.

Common situations: Operators disabling remote JMX for security but unaware this also disables local JMX; hardened configs copied from lockdown guides; then nodetool fails with 'Connection refused' and this warning explains why.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/b0494551e56e9b1f. Report an issue: GitHub.