2013-04-30 72 views
1

我有s.t.就像代码中的某个无限循环一样。不知何故,这个地方不经常被称为。所以在几个小时后,Linux机器上的一个CPU开始以100%运行,然后一段时间后又一个CPU等。 重新启动服务器解决了一段时间的问题。如何在glassfishv3中找到一个无限循环

我怎样才能找到发生这种情况的地方?

我想过把RequestTimeout设置得很小。 (5分钟)我会在日志中得到一个正确的错误消息,告诉我什么是错的。

顶部与命令 “H”

16639的java 20 09836米2.6克17米 - [R 100 16.5 39:55.33的java 18059的java 20 02745米2.3克17米S 2的14.5 0:00.92 java的 16591的java 20 09836米2.6克17米S1中16.5 0:15.97的Java 5307 java的20 08945米4.6克3864 S1中29.1 746:47.67的Java

然后: jstack -J-D64 16639

,但我得到: 16639:联合国能够打开套接字文件:目标进程未响应或HotSpot虚拟机未加载 -F选项可在目标进程未响应时使用

必须启动s.t.在机器上之前?

如何搜索热点尼斯文章:

http://code.nomad-labs.com/2010/11/18/identifying-which-java-thread-is-consuming-most-cpu/

回答

2

如果您在本机的权限,你可以执行jstack

jstack在应用程序上执行线程转储。从那里你可以检查哪个线程处于无限循环。

Jstackjdk捆绑在一起。

另一种方法是检查top命令(* nix)并启用线程视图。从那里你可以检查哪个线程在使用cpu。然后用jstack可以看到nid这是线程的十六进制值。

您可以使用jps来获取java pid。

+0

这并不算太坏,但我无法从jstack中获取任何数据。任何想法为什么? – 2013-04-30 16:18:14

+0

看到这个关联:http://code.nomad-labs.com/2010/11/18/identifying-which-java-thread-is-consuming-most-cpu/ – 2013-04-30 16:43:56

+0

谢谢。你救了我的脖子:-) – 2013-04-30 21:57:49