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

在进行大量编辑/上传/下载的繁忙时间,应用程序会变得缓慢且无响应。我收到 Wicket“PageMap 仍处于锁定状态”错误。雄猫似乎还在继续前进。内存占用可控,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 线程等待传入的请求主体而陷入困境?

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

有帮助吗?

解决方案

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top