JVM Monitoring: JMX or SNMP?
JVM Monitoring: JMX or SNMP?
By daniel on Feb 23, 2007
Since JavaTM SE 5.0, the JRE provides a means to manage and monitor the Java Virtual Machine. It comes in two flavors: one is based on the Java Management Extension (JMXTM), the other is a small SNMP agent that builds upon the Management and Monitoring API of the Java SE platform and exposes the same information through SNMP.
A legitimate question that often arises to newcomers to the JMX and SNMP technologies is:
Which technology should I use to monitor my JVM? JMX, or SNMP?
In this blog I will try to provide some guidance on this subject.
Monitoring the JVM through JMX
The JVM JMX agent is composed of a JMX RMI Connector Server which exposes the content of a platform MBeanServer to remote applications. When started, it registers all the platform MXBeans that compose the JVM Monitoring and Management API in the platform MBeanServer, and expose them to remote JMX clients.
One such client is the popular JConsole graphical tool.
Follow this link to learn more about managing and monitoring the JVM through JMX.
Other links of interest can also be found in What is JMX? and Looking for JMX Overview, Examples, and More....
Monitoring the JVM through SNMP
The JVM SNMP Agent is a small SNMPv2c agent which exposes a single MIB, the JVM-MANAGEMENT-MIB. This agent is not extensible, and can only expose what is defined in that MIB.
Follow this link to learn how to start and configure the JVM SNMP agent.
In order to manage the JVM through SNMP, you will need to use an SNMP management console, or an SMMP management API. The Java Dynamic Management Kit from Sun provides an SNMP Manager API in Java. There are also a lot of other free or commercial SNMP tools, shells, and command line software, such as e.g. NET-SNMP.
A good place to start looking for them is here, or you could also google it use your favorite internet search engine.
Update:Dmitri Maximovitch has written an excellent article explaining how to use MRTG to monitor the JVM, eitherthrough JMX or through the JVM SNMP Agent.
So, Which Management Solution Should I Choose?
Well, in what Java and the JVM is concerned, I would say it's far more interesting to invest in a solution based on JMX rather than on a solution based on SNMP, for the following reasons:
The MIB that makes it possible to manage the JVM through SNMP is closed. The JVM-MANAGEMENT-MIB only exposes the information defined by JSR 163 - and none other. In particular, if you register your own MBeans in the platform MBeanServer, they will not be exposed through that MIB. On the other hand, you will be able to interact with them through a regular JMX connector, and JConsole will display them nicely.
The JVM SNMP Agent is also closed. As I have already explained, it doesn't have a public API. If you wanted to expose your own information through SNMP you would have to:
- Find a standard MIB that defines the information you want to expose, or write your own MIB
- Use a tool such as the Java Dynamic Management Kit to generate stubs for that MIB
- Provide the application logic to implement those stubs
- Start a new SNMP agent to expose your MIB.
All of this does require a certain amount of expertise in SNMP.
The power of expression of SNMP/SMI is limited. It is ideally suited to describe and monitor numeric gauges and counters (scalar or tabular), but describing complex data is much more awkward. Some things which could appear trivial in JMX, like for instance, returning a thread stack trace, can reach incredible levels of complexity in SNMP. Describing complex configuration can also rapidly become nightmarish. The possibility of evolution for SNMP interfaces is thus limited: SNMP is a very good protocol - but like any management technologies, it has its strengths, weaknesses, and limitations.
Conclusion
All in all, I would say that choosing to monitor the JVM through SNMP is legitimate when:
- The JVMs you want to manage are deployed in a secure network (intranet-like). The JVM SNMP agent is an SNMP v2c agent, and SNMP v2 has basically no security.
- You already have at your disposal SNMP management tools or SNMP management consoles
- You already have an SNMP background knowledge, so that you will not have to learn everything about SNMP from scratch
- You are trying to correlate JVM Monitoring data through non Java management applications which already have an SNMP stack
- You are only interested in JVM data - not application data, and do not see any plans for this to change.
- What is defined in the JVM-MANAGEMENT-MIB suits your need and is enough for your purposes.
If that is the case, and you answered YES to all questions, then the JVM SNMP Agent was made for you!
Cheers, and stay tuned for more adventurous journeys in the Java, JMX, and SNMP world!
-- daniel
Category: Sun
Tags: j
JVM Monitoring: JMX or SNMP?的更多相关文章
- jvm添加jmx远程监控
调JVM监控的时候需要远程连接机器,所以服务器需要开放JMX协议,配置如下. 现在我的项目是jboot-jfinal项目,用的是undertow容器,在启动脚本里面加入 JAVA_OPTS=" ...
- Monitoring an IBM JVM with VisualVM
Monitoring an IBM JVM with VisualVM 分类: Java 2013-06-09 16:15 250人阅读 评论(0) 收藏 举报 JDK6 update 7 and o ...
- Java Management Extensions (JMX) Flume
Lesson: Overview of the JMX Technology (The Java™ Tutorials > Java Management Extensions (JMX)) h ...
- JMX简单入门
在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来来处理这些可配置项呢? 程序新手一般是写死在程序里,到要改变时就去改程序,然后再编译发布: 程序熟手则一般把这些信息写在一 ...
- JVM Management API
JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据.JVM当前所有线程及其栈相关信 息等等.各种JDK自带的剖析工具,包括jps.jstack. ...
- 深入理解JVM—性能监控工具
(转自:http://yhjhappy234.blog.163.com/blog/static/31632832201222691738865/) 我们知道,在JVM编译期和加载器,甚至运行期已经做了 ...
- 配置JVM内存 查看内存工具
一.配置JVM内存 1.配置JVM内存的參数有四个: -XmxJavaHeap最大值.默认值为物理内存的1/4.最佳设值应该视物理内存大小及计算机内其它内存开销而定. -XmsJavaHeap初始值, ...
- cacti监控jvm
jdk环境 java version "1.6.0_37" Java(TM) SE Runtime Environment (build 1.6.0_37-b06) Java Ho ...
- java heap space解决方法和JVM参数设置
在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...
随机推荐
- com.android.builder.packaging.DuplicateFile
解决方法: packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' ...
- 通过Web.config中的configSections配置自己系统的全局常量
通过Web.config中的configSections配置自己系统的全局常量 随着系统的庞大,你的全局信息保存在appsitting里可能会比较乱,不如为模块写个自定义的全局常量吧 首先在Web.C ...
- win10 Administrator
和Win7/Win8.1一样,Win10的管理员账户Administrator是默认隐藏和关闭的,因为该账户权限极高,被不法分子利用后存在极大风险.但如果你想在某些特殊情况下使用该账户,就需要手动将其 ...
- (五)Hibernate 操作对象
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 中四种对象状态 临时状态(transient ...
- OpenCV(2)-Mat数据结构及访问Mat中像素
Mat数据结构 一开始OpenCV是基于C语言的,在比较早的教材例如<学习OpenCV>中,讲解的存储图像的数据结构还是IplImage,这样需要手动管理内存.现在存储图像的基本数据结构是 ...
- (转)UIButton用法详解一
(注明 来源网址 http://blog.csdn.net/cheneystudy/article/details/8115092)这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举 ...
- 安装grid之前检查配置 ,报错如下
centos 5 _x86_64 oracle 11.2 安装grid之前检查配置 ,报错如下 : ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fi ...
- PHP分页初探 一个最简单的PHP分页代码实现
PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...
- js 数组 var arr=[] 的用法总结
刚接触了一个js数组,用起来很头疼,总结一下 基本格式: var arr = [[name,value],[name2,value2],[name3,value3]]; 如何给 arr 动态添加元素 ...
- Codeforces Round #336 (Div. 2) D. Zuma
Codeforces Round #336 (Div. 2) D. Zuma 题意:输入一个字符串:每次消去一个回文串,问最少消去的次数为多少? 思路:一般对于可以从中间操作的,一般看成是从头开始(因 ...