linux – 在docker容器中不能使用jcmd,jps或jstat cassandra进程
$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 我试图做以下事情: 任何帮助表示赞赏. Docker容器是debian:jessie 这是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成功转储了线程的堆栈跟踪. 解决方法
我知道至少有两个可能的原因导致这种情况发生.
> Java使用-XX:PerfDisableSharedMem选项运行.此选项有时可以帮助减少JVM安全点暂停,但它也使JVM对jps和jstat不可见.这是一个非常可能的情况,因为你正在运行Cassandra,而最近的Cassandra有这个选项ON by default.> Java进程具有不同的mount命名空间,因此Java进程的/ tmp与shell的/ tmp在物理上不是同一个目录.必须可以访问目录/ tmp / hsperfdata_root才能使用jps或jstat.由于您使用的是docker容器,这也是一个合理的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |