0

我有一个运行非常缓慢且偶尔挂起的 Web 应用程序。这是一个与学校相关的 Wicket 应用程序,具有报告和编辑功能,也是一个 servlet,自动化客户端使用它通过 HTTPS 获取/发布数据。

在进行大量编辑/上传/下载的繁忙时段,应用程序变得迟缓且无响应。我收到 Wicket“PageMap 仍然锁定”错误。Tomcat 似乎一直在努力。内存使用是可控的,大约50M。

我设置了 YourKit 以获取一些分析信息,在忙碌期间发现 81% 的 Tomcat CPU 时间都花在了这里:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[])
org.apache.jk.common.ChannelSocket.processConnection(MsgContext)
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext)
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int)
java.io.BufferedInputStream.read(byte[], int, int)
java.io.BufferedInputStream.read1(byte[], int, int)
java.io.BufferedInputStream.fill()
java.net.SocketInputStream.read(byte[], int, int)
[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)

在这个应用程序中,我有大约 250 个客户端通过 SSL 轮询服务器,要求每 30 秒更新一次。大多数情况下,这会很快返回一个空响应。有时,会有大量的数据库活动,并且可能会将大量数据(几 MB)发送回客户端。

那么这 81% 的活动来自于什么?一些连接速度非常慢的客户端是否会因为等待传入的请求主体而使 Tomcat 线程陷入困境?

任何人都见过这样的事情,或者对如何测试/故障排除/修复这个有任何建议?

4

2 回答 2

0

内存使用可能是原因。
您应该检查 java 进程的内存使用情况,看看它得到了多少。
如果还不够,则必须在为 tomcat 设置的任何位置设置 Xmx jvm 参数。

于 2009-10-26T04:17:17.567 回答
0

您应该设置一个测试环境并尝试通过负载测试来重现它。
这样你就可以隔离原因。不然因素太多了。
此外,您可以通过这种方式尝试修复,而不会危及您的产品环境。

于 2009-10-26T15:59:29.837 回答