【问题标题】:View top CPU consuming thread(s) in a Java Process running inside a Docker container查看在 Docker 容器内运行的 Java 进程中 CPU 消耗最高的线程
【发布时间】:2021-05-06 01:14:39
【问题描述】:

我们有一个在 docker 容器内运行的 Java 应用程序,该容器在 CPU 上运行时占用很高。我能够从 docker shell 中获取线程转储,但我无法查看 java 进程中 CPU 消耗最高的线程。 我使用 docker exec -it container sh 进入 docker shell

top 为我提供了 CPU 消耗最高的进程

我想查看特定 PID 中 CPU 消耗最高的线程。

top -n 1 -H -p [PID] 不起作用,我得到“顶部:无法识别的选项:H”

从外壳外部使用 docker top 也不起作用。有没有其他方法可以做到这一点?

【问题讨论】:

  • 听起来像一个busybox图像。考虑使用另一个你更喜欢的上衣。

标签: java linux docker shell cpu-usage


【解决方案1】:

您是否尝试过容器中的jstack 工具?

【讨论】:

  • 我确实使用 jstack 来获取线程转储,但它没有给我足够的信息来找出哪个线程正在消耗大量 CPU。为此,我希望使用 top 从 java PID 中获取 CPU 消耗最高的线程。
  • 我猜你正在使用一些轻量级的 linux 映像(例如 alpine 等)。我找不到为什么一些顶级实用程序没有 -H 标志。但是,如果您将映像更改为另一个 linux 发行版(如 ubuntu),它将起作用。我猜你正在本地机器上做一些调试,所以改变你正在使用的图像不会有什么坏处。这可能是您的问题的解决方法。
猜你喜欢
  • 2010-10-20
  • 2016-07-09
  • 2015-07-19
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
相关资源
最近更新 更多