我在Sun的JVM上的Jetty 6.1.24-6上运行了一个64位的Ubuntu Server 10.10,它们都是从标准的Ubuntu存储库安装的.
我正在尝试追踪这个服务器的问题(一段时间后100%cpu,它可能与NIO的Selector上的一个已知错误有关,虽然看起来将连接器更改为旧的io SocketConnector并没有解决问题! ),并需要采取线程转储.
不幸的是我无法获得线程转储.我试图将SIGQUIT发送到进程,并尝试将JStack附加到它,但两种方法都不起作用.
我看到SIGQUIT(在Jetty生成的任何日志文件中)都没有输出,而JStack,即使以root(或jetty)和"-F"运行,也说它已附加到进程,但是然后阻止并不再产生输出!
我怎样才能获得线程转储?
您必须以与jetty进程运行相同的用户身份执行此操作.在Ubuntu上,这个用户通常称为jetty.
所以试试吧
sudo -u jetty jstack <pid>
Run Code Online (Sandbox Code Playgroud)
这会将一个线程转储发送到stdout(你的shell).
你也可以
sudo -u jetty kill -QUIT <pid>
Run Code Online (Sandbox Code Playgroud)
这会将线程转储发送到jetty的stdout(通常/var/log/jetty/out.log)
要获取pid,请使用jps命令或ps ax|grep java
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |