加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在docker容器中不能使用jcmd,jps或jstat cassandra进程

发布时间:2020-12-13 23:52:05 所属栏目:Linux 来源:网络整理
导读:$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 我试
$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

任何帮助表示赞赏.

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成功转储了线程的堆栈跟踪.

解决方法

我知道至少有两个可能的原因导致这种情况发生.

> Java使用-XX:PerfDisableSharedMem选项运行.此选项有时可以帮助减少JVM安全点暂停,但它也使JVM对jps和jstat不可见.这是一个非常可能的情况,因为你正在运行Cassandra,而最近的Cassandra有这个选项ON by default.> Java进程具有不同的mount命名空间,因此Java进程的/ tmp与shell的/ tmp在物理上不是同一个目录.必须可以访问目录/ tmp / hsperfdata_root才能使用jps或jstat.由于您使用的是docker容器,这也是一个合理的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读