今天追踪线上程序cpu利用率过高的问题时,通过32内核自带的perf工具发现一个java应用程序的cpu占用率特别高。
找了另外一台硬件和内核都相同的服务器来对比,发现另一台没有这个现象。
接下来查找java的版本是否一致
java -version
机器1:
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (rhel-1.39.1.9.7.el6-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
机器2:
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (rhel-1.39.1.9.7.el6-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
接下来需要进一步比较jdk版本,如何知道当前jdk的安装路径呢?
首先运行pgrep java定位java应用程序的pid,再通过pmap定位可执行程序和库的路径
机器1:
pmap 22753 | grep jvm.so
00007f0a30c2e000 8660K r-x-- /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so
00007f0a314a3000 2048K ----- /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so
00007f0a316a3000 608K rw--- /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so
机器2:
pmap 19540 | grep jvm.so
00007fa4cc25b000 16308K r-x-- /opt/admin/install/jdk-1.6.0_26/jre/lib/amd64/server/libjvm.so
00007fa4cd248000 2044K ----- /opt/admin/install/jdk-1.6.0_26/jre/lib/amd64/server/libjvm.so
00007fa4cd447000 1864K rwx-- /opt/admin/install/jdk-1.6.0_26/jre/lib/amd64/server/libjvm.so
两个jdk的版本果然不同
阅读(1167) | 评论(0) | 转发(0) |