$ jcmd -l
418 sun.tools.jcmd.JCmd -l
$ jstat -gcutil -t 10 250ms 1
10 not found
我知道jdk中的bug与将jstat作为root连接到以不同用户身份运行的进程有关。
这里,这个docker容器有一个用户root,从ps命令可以看出,cassandra在root下运行。
$ whoami
root
我尝试过以下操作: $ sudo -u root jcmd -l </ em>
感谢任何帮助。
Docker容器是debian:jessie 运行java版本: openjdk版本“1.8.0_66-internal”
这是ps -ef的输出:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:40 ? 00:00:00 /bin/bash /run.sh
root 10 1 11 17:40 ? 00:02:25 java -ea -javaagent:/usr/share/c
root 375 0 0 17:49 ? 00:00:00 bash
root 451 375 0 18:00 ? 00:00:00 ps -ef
除此之外:jstack成功地转储了线程的堆栈跟踪。
答案 0 :(得分:7)
我至少知道可能发生这种情况的两个可能原因。
-XX:+PerfDisableSharedMem
选项运行。此选项有时可以帮助减少JVM安全点暂停,但它也使JVM对jps
和jstat
不可见。这很可能是因为你正在运行Cassandra,而最近的Cassandra有这个选项ON by default。/tmp
与shell的/tmp
在物理上不是同一个目录。必须可以访问目录/tmp/hsperfdata_root
才能使用jps
或jstat
。由于您使用的是docker容器,这也是一个合理的原因。