使用Python查詢JMX


一、介紹

我們知道 java 項目中的 JMX 接口信息是十分有用的,我們可以提取這些信息來分析或告警。但是 JMX 的 API 只在 java 中實現,因此,找到一個 Python 代碼調用 Java 代碼的橋梁是非常有意義的。JPype 就是這樣的一個工具,利用它可以使 Python 程序方便的調用 Java 代碼,從而擴充 Python 語言的能力,彌補 Python 語言的不足。本文介紹了如何利用 JPype 來對JMX接口進行訪問查詢。官方地址:http://jpype.sourceforge.net/

二、安裝

我們這里用pip安裝簡單一些。這里注意名稱是JPype1。

# pip install JPype1

三、示例

#!/usr/bin/python
import jpype
from jpype import java
from jpype import javax

HOST='gf0'
PORT=8386
USER='admin'  # 這里沒有配安全認證的話可以不填
PASS='mypass' # 同上

URL = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi" % (HOST, PORT)
#this it the path of your libjvm /usr/lib/jvm/sun-jdk-1.6/jre/lib/amd64/server/libjvm.so on linux
jpype.startJVM("/System/Library/Frameworks/JavaVM.framework/Libraries/libjvm_compat.dylib") # 這里寫對應使用的jdk路徑
java.lang.System.out.println("JVM load OK")

jhash = java.util.HashMap()
jarray=jpype.JArray(java.lang.String)([USER,PASS])
jhash.put (javax.management.remote.JMXConnector.CREDENTIALS, jarray);
jmxurl = javax.management.remote.JMXServiceURL(URL)
jmxsoc = javax.management.remote.JMXConnectorFactory.connect(jmxurl,jhash)
connection = jmxsoc.getMBeanServerConnection();


object="java.lang:type=Threading"  # 查詢線程
attribute="ThreadCount"
attr=connection.getAttribute(javax.management.ObjectName(object),attribute)
print  attribute, attr

#Memory is a special case the answer is a Treemap in a CompositeDataSupport
object="java.lang:type=Memory"     # 查詢內存
attribute="HeapMemoryUsage"
attr=connection.getAttribute(javax.management.ObjectName(object),attribute)
print attr.contents.get("used")

這里只列舉了幾個指標。在java mission control上可以看到完整的各個指標,都可以拿來查詢分析。

四、參考地址

http://blog.nobugware.com/post/2010/11/08/jmx-query-python-cpython/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM