我有一个运行速度非常慢,偶尔挂起的Web应用程序。它是一个与学校有关的Wicket应用程序,具有报告和编辑功能,也是自动化客户端通过HTTPS获取/发布数据的servlet。Tomcat性能问题
在忙于大量编辑/上传/下载过程中,应用程序变得呆滞且无响应。我得到Wicket“PageMap仍然锁定”的错误。雄猫似乎一直在徘徊。内存使用可管理,大约50M。
我成立了YourKit得到一些剖析信息,并在一个繁忙的时期发现的Tomcat的CPU时间的81%是在这里度过的:
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线程无法工作?
任何人都看过类似的东西,或者对如何测试/疑难解答/修复这个问题有任何建议?
通过电线传递的数据集有多大? – popester 2009-10-26 02:53:42
当在服务器上编辑单个记录时,所有客户端只下载修改后的记录。 1或2 k。如果客户重置,它会下载学校的所有数据。可能不会超过5 MB。 – 2009-10-26 03:37:51
下载所有的数据听起来很讨厌。客户真的需要所有这些数据吗?你可以做一些分页?另外,客户如何获取数据?脚本调用某种Web服务? – popester 2009-10-26 03:47:14