问候
我在 Ubuntu8.04 上的 Java6 上的 Tomcat6 上运行我的 webapp。 这个应用程序的主要 servlet 使用以下简单代码打开一个 ServerSocket:
ServerSocket serverSocket = new ServerSocket(6767);
Socket xmlSocket = serverSocket.accept();
当然,这在一个单独的线程中运行,并带有必要的 try-catch block 。
当我启动 Tomcat 时,它立即达到 100% 的 CPU 负载并一直保持到客户端连接到端口 6767。只要客户端连接,负载就会下降到 0%。一旦客户端断开连接,负载就会恢复到 100%。
谁能告诉我这是关于什么的?
谢谢!
解决方案:
下面的两个答案都非常有帮助。该问题实际上与 ServerSocket 无关,而是与应用程序完全不同的线程中的不眠 while 循环有关,而且还取决于客户端是否已连接。
我能够使用 JDK 命令“jstack”识别 Activity 线程,然后很容易找到带有失控循环的线程。
感谢您的帮助! :)
最佳答案
也许找出正在发生的事情的最简单方法是等待它以 100% 运行,然后通过 Ctrl-Break
(或使用 SendSignal 或类似方式)生成线程转储.您将获得一组线程及其状态,应该清楚哪个正在运行,以及它在代码中的位置。
关于java - 只要 ServerSocket 空闲,Linux 上的 Tomcat6 就会使用 100% 的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351036/