我有不止一个 java 应用程序在单独的 docker 容器中运行。我正在尝试使用 jstat、jstack、jmap 等工具从容器内运行的 java 进程收集监控数据,例如 GC 日志、线程转储、堆转储。是否可以从主机(外部容器)捕获此信息?
我是集装箱世界的新手。我知道主机和容器的 PID 命名空间是不同的。当我jstack <PID> > thread_dump.txt
从主机执行时,它显示错误消息:无法打开套接字文件/proc/root/tmp/.java_pid:目标进程在 10500 毫秒内没有响应或未加载 HotSpot VM
其中 PID 是来自主机 PID 命名空间的进程 ID。
当我jstack
在容器 ( docker exec -it <container_id_or_name>
) 内执行时,它能够捕获线程转储。
其中 PID 是容器 PID 命名空间中的进程 ID。
关于如何解决这个问题的任何提示?