如何获得Jetty线程转储?
我有一个Ubuntu服务器10.10 64位在Sun的JVM上运行一个web应用程序Jetty 6.1.24-6,两者都是从标准的Ubuntu存储库安装的 我正试图找出这台服务器的一个问题(一段时间后100%的cpu,这可能与NIO选择器上的一个已知错误有关,尽管看起来将连接器更改为旧io SocketConnector并没有解决问题!),并且需要进行线程转储 不幸的是,我无法获得线程转储。我尝试向流程发送SIGQUIT,并尝试将JStack附加到流程中,但两种方法都不起作用 我看不到任何来自SIGQUIT的输出(在Jetty生成的任何日志文件中),而JStack,即使以root(或Jetty)和“-F”运行,也表示它已连接到进程,但随后阻塞并不再生成输出如何获得Jetty线程转储?,jetty,Jetty,我有一个Ubuntu服务器10.10 64位在Sun的JVM上运行一个web应用程序Jetty 6.1.24-6,两者都是从标准的Ubuntu存储库安装的 我正试图找出这台服务器的一个问题(一段时间后100%的cpu,这可能与NIO选择器上的一个已知错误有关,尽管看起来将连接器更改为旧io SocketConnector并没有解决问题!),并且需要进行线程转储 不幸的是,我无法获得线程转储。我尝试向流程发送SIGQUIT,并尝试将JStack附加到流程中,但两种方法都不起作用 我看不到任何来自S
如何获取线程转储?您是否尝试了远程连接的VisualVM(/usr/lib/java-6-sun/bin/jvisualvm)?它可以捕获线程转储您必须在jetty进程运行的同一用户下执行此操作。在Ubuntu上,这个用户通常被称为jetty 所以试试看
sudo -u jetty jstack <pid>
sudo-u码头jstack
这将向stdout(您的shell)发送一个线程转储
你也可以
sudo -u jetty kill -QUIT <pid>
sudo-u码头压井-退出
将线程转储发送到jetty的stdout(通常/var/log/jetty/out.log
)
要获取PID,请使用
jps
命令或ps ax | grep java
我不知道为什么,但它不起作用。我已经向JVM添加了一些-D参数,服务器上的端口1099是打开的。我在VisualVM上添加了一个连接,上面写着“连接…”,但从来没有进一步。更奇怪的是,连接确实已建立,如客户端(我的机器)和服务器上的“netstat”所示!你是如何建立联系的?通过JMX或jstatd守护程序?1099似乎是rmi注册表的一个端口。。。您在JMX连接中配置了什么url?对于visualvm,它只要求主机和端口。我不确定1099是不是正确的端口。看看这个问题的公认答案:看看我这里的问题,我做了一些线程转储,可能会对您有所帮助:ps ax | grep java
通常输出几个进程,我应该使用哪个进程?