如何查看我的 Java 进程现在正在做什么?

发布于 2024-12-05 22:27:07 字数 185 浏览 0 评论 0原文

我有一个应用程序服务器进程,其 CPU 利用率始终为 100%。我所说的持续是指几个小时,甚至几天。

我知道如何生成堆/线程转储,但我正在寻找更多动态信息。我想知道到底是什么占用了这么多CPU。有数十个(或可能超过 100 个)线程。我知道这些线程是什么,但我需要知道哪些线程大量使用我的 CPU。

我怎样才能获得这些信息?

I have an app server process that's constantly at 100% CPU. By constantly I mean hours, or even days.

I know how to generate a heap/thread dump, but I'm looking for more dynamic information. I would like to know what is using so much CPU in there. There are tens (or probably 100+) threads. I know what those threads are, but I need to know which of them are using my CPU so much.

How can I obtain this information?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

姐不稀罕 2024-12-12 22:27:07

使用分析器。 Oracle JDK 附带的 VisualVM 中包含一个。

高级商业版(提供试用许可证)是 YourKit

Use a profiler. There is one included in VisualVM which comes with the Oracle JDK.

An advanced commercial one (trial licenses available) is YourKit.

触ぅ动初心 2024-12-12 22:27:07

通过创建线程转储。您可以使用 jstack 连接到运行java进程来获取线程转储。如果您在一段时间内获取两个或多个线程转储,您可以通过分析它们来找出哪些线程正在积极使用 CPU。通常,处于 RUNNING 状态的线程是您需要关注的线程。

By creating a thread dump. You can use the jstack to connect to a running java process to get the thread dump. If you take two or more thread dumps over a period of time you can by analyzing them figure out which ones are actively using CPU. Typically the threads in the RUNNING state are the ones you need to focus on.

卷耳 2024-12-12 22:27:07

我个人使用 YourKit 来实现此目的。

VisualVM 也有一些分析功能,但我没有使用过。

I personally use YourKit for this.

VisualVM also has some profiling capabilities, but I haven't used them.

愛放△進行李 2024-12-12 22:27:07

在linux中尝试kill -3 processid它将生成线程转储。你可以分析一下这个,看看java进程中发生了什么。

in linux try kill -3 processid it will generate thread dump. You can analyze this to see what is happening in the java process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文