我有一个Ubuntu 服务器 10.10 64 位运行网络应用程序码头 6.1.24-6 on Sun 的 JVM,都从标准 Ubuntu 存储库安装。
我正在尝试找出该服务器的问题(一段时间后 100% cpu,它可能与 NIO 选择器上的已知错误有关,尽管看起来将连接器更改为旧的 io SocketConnector 并没有解决问题! ),并且需要进行线程转储。
不幸的是我无法获取线程转储。我尝试过发送SIGQUIT到该过程,并尝试附加JStack但两种方法都行不通。
我根本看不到 SIGQUIT 的输出(在 Jetty 生成的任何日志文件中),而 JStack,即使以 root(或 jetty)身份运行并使用“-F”,也表示它已附加到进程,但是然后阻塞并不再产生输出!
如何获取线程转储?
您必须以与运行 jetty 进程的用户相同的用户身份执行此操作。在 Ubuntu 上,该用户通常称为 jetty。
So try
sudo -u jetty jstack <pid>
这会将线程转储发送到标准输出(您的 shell)。
你也可以
sudo -u jetty kill -QUIT <pid>
这会将线程转储发送到 jetty 的标准输出(通常/var/log/jetty/out.log
)
要获取 pid,请使用jps
命令或ps ax|grep java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)