我有一个网络应用程序运行非常缓慢,偶尔会挂起。这是一个与学校相关的 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 秒更新一次。大多数时候,这会很快返回一个空的响应。有时,会出现一连串的数据库 Activity ,并且可能会将大量数据(几 MB)发送回客户端。
那么这 81% 的 Activity 来自什么?一些连接速度非常慢的客户端是否会导致 tomcat 线程等待传入的请求主体,从而使 tomcat 线程陷入困境?
有人见过这样的事情,或者对如何测试/排除故障/修复此问题有任何建议吗?
最佳答案
您应该设置一个测试环境并尝试通过负载测试重现它。
这样你就可以找出原因。否则因素太多。
此外,通过这种方式,您可以在不危及产品环境的情况下尝试修复。
关于java - Tomcat 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622882/