How do I debug hanging threads in the JVM?

 ̄綄美尐妖づ 提交于 2019-12-11 00:59:55

问题


I am running a durable Java program on a remote Ubuntu server, where I have root user rights. After some time, the usage on some CPU cores goes up to 100%. The logs show nothing suspicious and the application still works, but with reduced throughput.

How can I debug the JVM so that I can find out the cause of this, while it's still running?


回答1:


One option is VisualVM, which is included in the JDK starting with Java 1.6. I have found it useful in some situations in the past.

You may connect to local applications or remote applications.

To connect to a remote app, run jstatd on your remote server, and then run VisualVM locally and enter your server's IP address. You should be provided with a list of running Java applications including the one you wish to explore. If you have any trouble listing your application, good documentation is available at the VisualVM website.




回答2:


Connect to the process with jvisualvm

This tool will allow you to connect to the running process and view all of the threads and their state. This could show you which thread is the culprit merely by looking at which one is awake all the time. You can do a thread dump to see the stack trace for each thread and see what each thread is doing.

It's a very powerful tool for just this kind of debugging. It is distributed with the JDK only, so you will need more than just the JVM runtime installed to have access. Be sure you install the same version of the JDK that the JVM is running.

You will need to have your X display forwarded for this to work.




回答3:


If you want to see the stack trace on linux just issue kill -SIGQUIT <java-program-pid>. That is one way to see where the the code is executing.



来源:https://stackoverflow.com/questions/10915929/how-do-i-debug-hanging-threads-in-the-jvm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!