爲什麼在簡單的HTTP servlet上使用JMX?
從我的角度來看,JMX是3個原因,更好:
- 它需要更少的代碼,使監測點。
- 它處理Java序列化的對象端到端,因此有更好的數據一致性。
- 它適用於不是基於servlet的程序(如您所述)。
JMX爲特定數據項提供了更簡單的接口。您當然可以在許多servlet中編寫相同的功能,但使用JMX更容易公開這些功能。
例如,如果您使用的是Spring,那麼您可以使用org.springframework.jmx.export
註釋(@ManagedResource
,@ManagedAttribute
等)來標記您的類。我還發布了我的SimpleJmx framework,因此只需使用獨立於Spring的幾個註釋便可輕鬆公開屬性和操作。例如:
@JmxResource(domainName = "j256", objectName = "lookupCache")
public class LookupCache {
// this can also be done as @JmxAttributeMethod on the getter/setters
@JmxAttributeField(description = "Number of hits in the cache")
private int hitCount;
...
@JmxOperation(description = "Flush the cache")
public void flushCache() {
...
}
}
我有一個fully working example program看它是如何工作的。因此,您只需公開一個值或操作即可爲該類和每個屬性和/或方法添加註釋。使用SimpleJmx發佈它的代碼如下所示。 Spring與豆類相似:
// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
jmxServer.start();
// register our lookupCache object defined above
jmxServer.register(lookupCache);
要在servlet中獲得類似的功能將需要比註釋更多的代碼。也就是說,可能存在框架,它提供了我不知道的servlet域中類似的功能。
一些更多的注意事項:
- 可能有更好的監測工具,神交HTTP/HTML,但也有一噸的分佈式JMX監控應用。可能是一個折騰。
- 能夠以編程方式從JMX服務器獲得對象是一個優點,而不僅僅是來自servlet頁面的字符串。 SimpleJmx也支持簡單的JMX客戶端,儘管存在更好的客戶端。
- 顯然,其他很多有價值的數據已經公佈由JVM默認:VM設置,線的詳細信息,內存信息,等等。