JVMモニタリング:PythonスクリプトJVMJMX取得状態



Jvm Monitoring Python Script Jvm Jmx Obtain State



主な原則:

主にPythonライブラリjmxqueryを介して、jmxquery JAVAメソッドは、JVM接続ポートを介してJARパッケージpythonスクリプト内でそれを呼び出し、JVMのステータスを取得します。



jmxquery github:

https://github.com/dgildeh/JMXQuery/tree/master/python



インストールjmxquery:

$ pip install jmxquery Collecting jmxquery Downloading https://files.pythonhosted.org/packages/93/02/b079e4df07f4c23bc5759742c488673008327dcd14713b519a96c7cc3e94/jmxquery-0.5.0.tar.gz Installing collected packages: jmxquery Running setup.py install for jmxquery: started Running setup.py install for jmxquery: finished with status 'done' Successfully installed jmxquery-0.5.0 You are using pip version 19.0.3, however version 19.2.3 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

PYTHONスクリプト:

JMXアドレスを指定するだけです。



from jmxquery import JMXConnection, JMXQuery jmxConnection = JMXConnection('service:jmx:rmi:///jndi/rmi://127.0.0.1:8889/jmxrmi') ## memory type_str = 'Memory' beanName_str = 'java.lang:type={0}'.format(type_str) for atrributeName in ['HeapMemoryUsage','NonHeapMemoryUsage']: jmxQuery = [ JMXQuery(mBeanName=beanName_str, attribute=atrributeName, metric_name='Type:{type}_{attribute}_{attributeKey}')] metrics = jmxConnection.query(jmxQuery) for metric in metrics: print(f'{metric.to_query_string()} ({metric.value_type}) = {metric.value}') ## memoryPool type_str = 'MemoryPool' for name in ['Code Cache','Metaspace','Compressed Class Space','Par Eden Space','Par Survivor Space','PS Eden Space','PS Old Gen','PS Perm Gen','PS Survivor Space','CMS Old Gen','CMS Perm Gen','Perm Gen']: beanName_str = 'java.lang:type={0},name={1}'.format(type_str, name) jmxQuery = [ JMXQuery(mBeanName=beanName_str, attribute='Usage', metric_name='Type:{type}_{attribute}_{attributeKey}')] metrics = jmxConnection.query(jmxQuery) for metric in metrics: print(f'{metric.to_query_string()} ({metric.value_type}) = {metric.value}') Wherein the time unit is ## GarbageCollector s type_str = 'GarbageCollector' for name in ['Copy','MarkSweepCompact','PS Scavenge','ConcurrentMarkSweep','ParNew','PS MarkSweep']: beanName_str = 'java.lang:type={0},name={1}'.format(type_str, name) for atrributeName in ['CollectionTime','CollectionCount']: jmxQuery = [ JMXQuery(mBeanName=beanName_str, attribute=atrributeName, metric_name='Type:{type}_{attribute}')] metrics = jmxConnection.query(jmxQuery) for metric in metrics: print(f'{metric.to_query_string()} ({metric.value_type}) = {metric.value}') ## Threading jmxQuery = [ JMXQuery(mBeanName='java.lang:type=Threading', attribute='ThreadCount', metric_name='Type:{type}_{attribute}')] metrics = jmxConnection.query(jmxQuery) for metric in metrics: print(f'{metric.to_query_string()} ({metric.value_type}) = {metric.value}')

実行出力:

root @ xxxxx MINGW64 / f / work-project / jvm-monitor / doc / weblogic(マスター)
$ python jmx.py
タイプ:Memory_HeapMemoryUsage_committed == java.lang:type = Memory / HeapMemoryUsage / commit(Long)= 1820327936
タイプ:Memory_HeapMemoryUsage_init == java.lang:type = Memory / HeapMemoryUsage / init(Long)= 266338304
タイプ:Memory_HeapMemoryUsage_max == java.lang:type = Memory / HeapMemoryUsage / max(Long)= 3787980800
タイプ:Memory_HeapMemoryUsage_used == java.lang:type = Memory / HeapMemoryUsage / used(Long)= 877956624
タイプ:Memory_NonHeapMemoryUsage_committed == java.lang:type = Memory / NonHeapMemoryUsage / commit(Long)= 155746304
タイプ:Memory_NonHeapMemoryUsage_init == java.lang:type = Memory / NonHeapMemoryUsage / init(Long)= 2555904
タイプ:Memory_NonHeapMemoryUsage_max == java.lang:type = Memory / NonHeapMemoryUsage / max(Long)= -1
タイプ:Memory_NonHeapMemoryUsage_used == java.lang:type = Memory / NonHeapMemoryUsage / used(Long)= 151725664
タイプ:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name =コードキャッシュ/使用法/コミット済み(ロング)= 45088768
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = Code Cache / Usage / init(Long)= 2555904
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = Code Cache / Usage / max(Long)= 251658240
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = Code Cache / Usage / used(Long)= 44772480
タイプ:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name = Metaspace / Usage / commit(Long)= 98484224
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = Metaspace / Usage / init(Long)= 0
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = Metaspace / Usage / max(Long)= -1
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = Metaspace / Usage / used(Long)= 95575976
Type:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name = Compressed Class Space / Usage / commitd(Long)= 12238848
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = Compressed Class Space / Usage / init(Long)= 0
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = Compressed Class Space / Usage / max(Long)= 1073741824
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = Compressed Class Space / Usage / used(Long)= 11446056
タイプ:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name = PS Eden Space / Usage / commit(Long)= 1417150464
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = PS Eden Space / Usage / init(Long)= 66584576
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = PS Eden Space / Usage / max(Long)= 1417150464
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = PS Eden Space / Usage / used(Long)= 580131288
Type:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name = PS Old Gen / Usage / commitd(Long)= 401604608
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = PS Old Gen / Usage / init(Long)= 177733632
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = PS Old Gen / Usage / max(Long)= 2841116672
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = PS Old Gen / Usage / used(Long)= 308996216
Type:MemoryPool_Usage_committed == java.lang:type = MemoryPool、name = PS Survivor Space / Usage / commitd(Long)= 1572864
Type:MemoryPool_Usage_init == java.lang:type = MemoryPool、name = PS Survivor Space / Usage / init(Long)= 11010048
Type:MemoryPool_Usage_max == java.lang:type = MemoryPool、name = PS Survivor Space / Usage / max(Long)= 1572864
Type:MemoryPool_Usage_used == java.lang:type = MemoryPool、name = PS Survivor Space / Usage / used(Long)= 1277952
Type:GarbageCollector_CollectionTime == java.lang:type = GarbageCollector、name = PS Scavenge / CollectionTime(Long)= 46496
Type:GarbageCollector_CollectionCount == java.lang:type = GarbageCollector、name = PS Scavenge / CollectionCount(Long)= 6871
Type:GarbageCollector_CollectionTime == java.lang:type = GarbageCollector、name = PS MarkSweep / CollectionTime(Long)= 8398
Type:GarbageCollector_CollectionCount == java.lang:type = GarbageCollector、name = PS MarkSweep / CollectionCount(Long)= 5
Type:Threading_ThreadCount == java.lang:type = Threading / ThreadCount(整数)= 114