【发布时间】:2010-02-28 12:30:11
【问题描述】:
问候
我在 Ubuntu8.04 上的 Java6 上的 Tomcat6 上运行我的 webapp。 这个应用程序的主 servlet 打开一个 ServerSocket,代码如下:
ServerSocket serverSocket = new ServerSocket(6767);
Socket xmlSocket = serverSocket.accept();
当然,这在单独的线程中运行,并带有必要的 try-catch 块。
当我启动 Tomcat 时,它会立即进入 100% 的 CPU 负载并一直保持在那里,直到客户端连接到端口 6767。只要客户端连接,负载就会下降到 0%。一旦客户端断开连接,负载就会恢复到 100%。
谁能告诉我这是怎么回事?
谢谢!
解决方案:
以下两个答案都非常有帮助。问题实际上与 ServerSocket 无关,而是与应用程序的完全不同线程中的无眠 while 循环有关,还取决于客户端是否已连接。
我能够使用 JDK 命令“jstack”识别活动线程,然后很容易找到带有失控循环的线程。
感谢您的帮助! :)
【问题讨论】:
标签: java load cpu tomcat6 serversocket