gpt4 book ai didi

linux - 无法在 docker 容器内处理 jcmd、jps 或 jstat cassandra

转载 作者:IT王子 更新时间:2023-10-29 01:00:25 24 4
gpt4 key购买 nike

    $ jcmd -l 
418 sun.tools.jcmd.JCmd -l

$ jstat -gcutil -t 10 250ms 1
10 not found

我知道 bug在 jdk 中涉及将 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 成功转储了线程的堆栈跟踪。

最佳答案

我至少知道发生这种情况的两个可能原因。

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

关于linux - 无法在 docker 容器内处理 jcmd、jps 或 jstat cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com