Monitoring JMX/JVM

Configure the Server Density agent to monitor your Jvm instance to:

• Collect important Jvm metrics
• Identify overall service slowdowns caused by your Jvm instances

Installing the jvm plugin package

Install the jvm plugin on Debian/Ubuntu:

sudo apt-get install sd-agent-jmx

Install the jvm plugin on RHEL/CentOS:

sudo yum install sd-agent-jmx

Read more about agent plugins.

Configuring the agent to monitor JMX metrics

1. Configure /etc/sd-agent/conf.d/jmx.yaml

The JMX check automatically collects 11 metrics. You must configure the plugin to collect other metrics if they are required.

init_config:
  custom_jar_paths: # optional
    - /path/to/custom/jarfile.jar

instances:
  - host: localhost
    port: 7199
    user: username
    password: password

    jmx_url: "service:jmx:rmi:///jndi/rmi://myhost.host:9999/custompath" # optional

    name: jmx_instance  # optional
    java_bin_path: /path/to/java
    java_options: "-Xmx200m -Xms50m"
    trust_store_path: /path/to/trustStore.jks
    trust_store_password: password

    process_name_regex: .*process_name.*
    tools_jar_path: /usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar
    refresh_beans: 600 # optional (in seconds)
    tags:
      env: stage
      newTag: test

    conf:
      - include:
          domain: my_domain
          tags:
              simple: $attr0
              raw_value: my_chosen_value
              multiple: $attr0-$attr1
          bean:
            - my_bean
            - another_bean
          attribute:
            attribute1:
              metric_type: counter
              alias: jmx.my_metric_name
            attribute2:
              metric_type: gauge
              alias: jmx.my2ndattribute
      - include:
          domain: 2nd_domain
        exclude:
          bean:
            - excluded_bean
      - include:
          domain_regex: regex_on_domain
        exclude:
          bean_regex:
            - regex_on_excluded_bean

Configuration Options

  • custom_jar_paths (optional) - This allows you to specify custom jars that will be added the agent's JVM classpath.
  • jmx_url (optional) - You can use this to specify if the agent needs to connect to a JMX URL other than the default. Name must also be specified if this option is configured.
  • name (optional) - Used when jmx_url is configured.
  • java_bin_path (optional) - Set this if sd-agent is unable to find your java executable.
  • java_options (optional) - Allows you to specify Java JVM options
  • trust_store_path (optional) - Must be set if SSL is enabled.
  • trust_store_password (optional) - Must be set if SSL is enabled.
  • process_name_regex (optional) - Use this to request sd-agent connect using the attach api. This requires the JDK to be installed and tools_jar_path be set to the path of tools.jar
  • tools_jar_path (optional) - This should be set if process_name_regex is configured, to the path of tools.jar
  • refresh_beans (optional) - The period for refreshing the matching MBeans list. This defaults to 600 seconds. Decreasing this may result in increased CPU usage
  • conf - Is a list of dictionaries in which only 2 keys are allowed, include and exclude
    • include (mandatory) - A dictionary of filters. If an attribute matches this filter it will be collected as metric, unless it is also matched by the exclude filter
    • exclude (optional) - A dictionary of filters If an attribute matches this filter it will not be collected as a metric, even if it matches the include filter.

Filter Descriptions

The include and exclude dictionaries can support the following keys:

  • domain - A list of domain names such as java.lang
  • domain_regex - A list of regexes for domain names. Must conform to Java regex
  • bean or bean_name - A list of full bean names such as java.lang:type=Compilation
  • bean_regex - A list of regexes for bean_names. Must conform to Java regex
  • attribute - A list or dictionary of attribute names

Attribute Filters

The attribute filter will accept a dictionary where the keys are attribute names, or a list of a attribute names. For example, a dictionary where the keys are attribute names could be formed as:

conf:
  - include:
      attribute:
        maxThreads:
          alias: tomcat.threads.max
          metric_type: gauge
        currentThreadCount:
          alias: tomcat.threads.count
          metric_type: gauge
        bytesReceived:
          alias: tomcat.bytes_rcvd
          metric_type: counter 

As an alias is specified, this is the name that will be displayed for the metric in your Server Density account. You can also specify the metric type as either a gauge or a counter. The agent will automatically compute a rate per second for this metric if you specify the metric as a counter.

An example of a list of attribute names:

conf:
  - include:
      domain: org.apache.cassandra.db
      attribute:
        - BloomFilterDiskSpaceUsed
        - BloomFilterFalsePositives
        - BloomFilterFalseRatio
        - Capacity
        - CompressionRatio
        - CompletedTasks
        - ExceptionCount
        - Hits
        - RecentHitRate 

With this example the metric types will all be set as gauge and the metric names will be jmx.$DOMAIN_NAME.$ATTRIBUTE_NAME.

Troubleshooting

You can use the sd-agent jmx command to help you troubleshoot your JMX/JVM plugin.

  • sudo /etc/init.d/sd-agent jmx list_matching_attributes - Lists the attributes that match your instance configurations.
  • sudo /etc/init.d/sd-agent jmx list_limited_attributes - List attributes that match your instance configuration but that aren't being collected due to exceeding the metric limit.
  • sudo /etc/init.d/sd-agent jmx list_collected_attributes - Lists the attributes that will be collected by your current instance configurations.
  • sudo /etc/init.d/sd-agent jmx list_not_matching_attributes - List attributes that do not match any of your current instance configurations.
  • sudo /etc/init.d/sd-agent jmx list_everything - List every attribute that could be collected.
  • sudo /etc/init.d/sd-agent jmx collect - Start metric collection and display them in the console.

Verifying the configuration
Execute info to verify the configuration with the following:

sudo /etc/init.d/sd-agent info 

If the agent has been configured correctly you ll see an output such as:

jvm
-----
  - instance #0 [OK]
  - Collected * metrics & * events

You can also view the metrics returned with the following command:

sudo -u sd-agent /usr/share/python/sd-agent/agent.py check jvm

Configuring graphs

Click the name of your server from the Devices list in your Server Density account then go to the Metrics tab. Click the + Graph button on the right then choose the jvm metrics to display the graphs. The metrics will also be available to select when building dashboard graphs.

Monitored metrics

Metric Values
jvm.heap_memory

The amount of Java heap memory used.
byte / None
Type: float
jvm.heap_memory_committed

The total amount of Java heap memory commited to be used
byte / None
Type: float
jvm.heap_memory_init

The initial amount of Java heap memory allocated.
byte / None
Type: float
jvm.heap_memory_max

The maximum amount of Java heap memory available.
byte / None
Type: float
jvm.non_heap_memory

The total amount of Java non-heap memory used.
byte / None
Type: float
jvm.non_heap_memory_committed

The total amount of Java non-heap memory committed to be used..
byte / None
Type: float
jvm.non_heap_memory_init

The initial Java non-heap memory allocated.
byte / None
Type: float
jvm.non_heap_memory_max

The maximum Java non-heap memory available.
byte / None
Type: float
jvm.thread_count

The number of active threads in the JVM.
thread / None
Type: float
jvm.gc.cms.count

The total number of garbage collections run by the JVM.
garbage collection / None
Type: float
jvm.gc.parnew.time

The approximate accumulated garbage collection time elapsed.
millisecond / None
Type: float
Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request

Comments

Monday  —  Friday.

10am  —  6pm UK.

Dedicated Support.