zorka
zorka copied to clipboard
jvm memutil function returns negative numbers with G1GC
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.
- 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.
- 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.
- Use some other max memory value? E.g. total heap memory ( zorka.jmx["java","java.lang:type=Memory","HeapMemoryUsage","max"])
- ...