JVM监控hive进程
JVM监控
JVM:Java Virtual Machine(Java虚拟机)
监控工具:
jdk自带(以下面两个为例,还有其他类型的监控工具):
jconsole.exe、jvisualvm.exe(jdk自带的实时监控)
IBM:
IBM Pattern Modeling and Analysis Tool for Java Garbage Collector(ga441.jar)
IBM Heapanalyzer(ha456.jar)
使用方法:
实时远程监控参数:
实时监控工具jconsole.exe、jvisualvm.exe可以用来对java程序进程进行实时监控,实时信息包括该进程的实时cpu、内存(堆)、线程和类,前提是程序所在的机器要打开一个端口,以这次监控的hive进程为例:
所在节点:172.19.189.24
监测Linux 端口使用情况:
netstat -tunlp |grep 2990 没有东西出来的话说明该端口没有在用,可以使用
修改Hive JVM 参数 启用 JMX 远程连接:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=2990
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
上面几个JVM参数是启用JMX远程连接的配置参数,
gc相关参数:
用来生成内存堆的相关信息文件(可以用IBM提供的两个工具进行分析):
下面再加几个参数,用来生成gc的相关文件:
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps -Xloggc:/var/log/hive/gc.hiveserver2.log-`date+'%Y%m%d%H%M%S'` -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/hive
-XX:+DisableExplicitGC -XX:+UseCompressedOops
加完之后,重启hive服务,在24上ps –ef|grep hive 即可看到hive进程的详细信息,如下图所示:
在进程信息中即可以看到这几个参数已加进去,此时即可以远程连接进行监控:
jvisualvm操作示例:
打开jvisualvm.exe (我的目录为:C:\Program Files\Java\jdk1.7.0_25\bin)
按以下步骤即可:
jconsole的使用方法跟jvisualvm基本一样:
打开后的界面如下:
IBM分析工具示例:
后面加的几个gc参数会生成gc文件,内容为JVM实时的垃圾回收情况,另外当发生内存溢出时会把此时内存堆的dump文件生成出来,具体操作示例和打开后的情况大致如下面几个图所示:
打开(ga441.jar,分析内存垃圾回收情况):
选择文件打开后,即可看到内存的实时变化情况:
打开ha456.jar,分析内存dump文件的情况,由于比较大,在打开的时候分配的内存数要大于文件的大小,如下:
打开后即可看到OutOfMemory时内存的情况: