wsadmin getStatsObject не возвращает все метрики для JVMRuntime - PullRequest
2 голосов
/ 11 октября 2019

Я пишу сценарий jython, который возвращает показатели производительности для JVMRuntimeModule. Он возвращает следующее:

HeapSize, FreeMemory, UsedMemory, UpTime, ProcessCpuUsage

, но не следующее: GCCount, GCIntervalTime, GCTime, ObjectAllocateCount, ObjectFreedCount, ThreadStartedCount, ThreadStartedCount, ObjectMountCoundCoundedCountCoundedCoveCCountWaitForLockTime

Как мне вернуть все из них?

    type = sys.argv[0]    # "JVM"
    name = sys.argv[1]    # "JVM"
    process = sys.argv[2] # "MyServer"

    objectName = "WebSphere:name=%s,process=%s,type=%s,*" % (name, process, type)
    perfName = AdminControl.completeObjectName("type=Perf,process=%s,*" % process)
    perfOName = AdminControl.makeObjectName(perfName)
    sigs = ['javax.management.ObjectName', 'java.lang.Boolean']
    coName = AdminControl.completeObjectName (objectName)
    params = [AdminControl.makeObjectName (coName), java.lang.Boolean ('false')]
    jvmObj=AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)
    jvmStats = jvmObj.getStatistics()
    print jvmStats

jvmStats содержит только HeapSize, FreeMemory, UsedMemory, UpTime, ProcessCpuUsage

Вывод:

array([name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=262144, highWaterMark=524288, current=523264, integral=7.8067724096E10, lowerBound=262144, upperBound=524288, 
name=FreeMemory, ID=2, description=The free memory (in KBytes) in the Java virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=89475, 
name=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in the Java virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=433788, 
name=UpTime, ID=4, description=The amount of time (in seconds) that the Java virtual machine has been running., unit=SECOND, type=CountStatistic, count=2421377, 
name=ProcessCpuUsage, ID=5, description=The CPU Usage (in percent) of the Java virtual machine., unit=N/A, type=CountStatistic, count=0], com.ibm.ws.pmi.stat.StatisticImpl)

Я бы хотел, чтобы все они были возвращены.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

В дополнение к ответу Скотта доступна различная статистика в зависимости от уровня PMI, который включен. См. Столбец «Уровень» для счетчиков JVM здесь: https://www.ibm.com/support/knowledgecenter/en/SSAW57_9.0.5/com.ibm.websphere.nd.multiplatform.doc/ae/rprf_datacounter4.html

В общем, лучше использовать уровень «Пользовательский» и точно указать, какие метрики вы хотите для максимальной производительности.

1 голос
/ 15 октября 2019

Не слишком знаком с этой областью, но я вижу пару вещей, на которые стоит обратить внимание:

1) Некоторые из этих статистических данных доступны только при включенном профилировании JVM (как упоминалось здесь ). Например, добавьте универсальный аргумент JVM: -agentlib:pmiJvmtiProfiler. См. Инструкции здесь , где это сделать в консоли администратора.

2) Статистика JVM вложена в древовидную структуру (см. здесь ), чтобы вы моглидобавьте эту строку:

print jvmObj.getSubStats()

, чтобы увидеть вложенную статистику. Вы также можете увидеть эту структуру, если перейдете в консоли администратора к PMI -> server , а затем щелкните по ссылке Custom на панели, чтобы получить древовидный элемент управления, отображающий всенастройки PMI.

3) Конечно, вам нужно включить статистику PMI (из PMI -> server и т. д.), но я предполагаю, что вы уже это сделали.

...