Skip to content

jvm memutil function returns negative numbers with G1GC #165

Open
@sboschman

Description

@sboschman

jvm.bsh - function memutil:
the mem_max value used can be -1 (G1GC), resulting in negative numbers being returned (large heap vm's overflow the zabbix float type)

In zabbix the item keeps flipping between supported and not supported. Depends on the amount of memory actually used how big the returned value becomes.

zabbix latest values for item 'G1 Eden Space utilization' (would expect a percentage between 0.0 and 100.0):
-20342374400
-17091788800

zabbix log:
jvm.memutil["G1 Eden Space"] became not supported: Type of received value [-1002438656000.000000] is not suitable for value type [Numeric (float)]

zabbix_get:
$> zabbix_get -s <host> -p <port> -k 'jvm.memutil["G1 Eden Space"]'
-1.60432128E10

$> zabbix_get -s <host> -p <port> -k 'zorka.jmx["java", "java.lang:name=G1 Eden Space,type=MemoryPool", "PeakUsage", "max"]'
-1

tbh I am not sure what the best way to go would be.

  1. Simply disable the item, cause the max is dynamically managed hence for G1GC this item has no meaning. Feels like disabling a metric that could signal a potential vm disaster.
  2. Calculate memutil based on PeakUsage.committed. What does the value mean now? memutil percentage can go up to 99.9% and then drop the 0.1% cause the vm committed more memory (percentages wouldnt be so drastic, but you get the picture...). No reason to panic, works as expected. Creating a trigger most likely impossible.
  3. Use some other max memory value? E.g. total heap memory ( zorka.jmx["java","java.lang:type=Memory","HeapMemoryUsage","max"])
  4. ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions