Java Jetty 6服务器上的响应延迟时间稳步增加
这是基本场景: 我有一个Jetty服务器在AWS实例T2.medium上运行 此服务器包含3个REST服务:A、B和C 我的客户机,它是在本地eclipse中运行的java类Java Jetty 6服务器上的响应延迟时间稳步增加,java,mysql,performance,jetty,Java,Mysql,Performance,Jetty,这是基本场景: 我有一个Jetty服务器在AWS实例T2.medium上运行 此服务器包含3个REST服务:A、B和C 我的客户机,它是在本地eclipse中运行的java类 为服务创建大约400个对象 之后,它为每个A(2000)创建5个B对象 最后,每B(10000)再增加5个C对象 最后,我们创建了大约15000个对象 执行过程需要45-50分钟来创建所有15000个对象。 在最初的100个请求中,一切都是美好的,完成每个请求大约需要25到30秒 在800次请求之后,情况不是很好,完成
- 为服务创建大约400个对象
- 之后,它为每个A(2000)创建5个B对象
- 最后,每B(10000)再增加5个C对象
QueuedThreadPool threadPool = new QueuedThreadPool(100);
threadPool.setMinThreads(100);
threadPool.setMaxThreads(700);
threadPool.setMaxIdleTimeMs(3000);
httpServer = new Server(port);
httpServer.setThreadPool(threadPool);
ContextHandlerCollection contexts = new ContextHandlerCollection();
httpServer.setHandler(contexts);
Context root = new Context(contexts, "/", Context.SESSIONS);
GenericWebApplicationContext springContext = new GenericWebApplicationContext();
springContext.setParent(new ClassPathXmlApplicationContext("/education/applicationContext.xml"));
root.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,springContext);
Context html = new Context(contexts, "/html", Context.SESSIONS);
ResourceHandler htmlHandler = new ResourceHandler();
htmlHandler.setResourceBase("src/main/webapp");
html.setHandler(htmlHandler);
ServletHolder holder = new ServletHolder(CXFServlet.class);
root.addServlet(holder, "/rest/*");
try {
httpServer.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
几分钟后,我开始看到以下异常:
**
**您使用的是Jetty 6,它早在2010年就已经过时了。考虑升级(自那时以来已经有超过150个版本的码头)你知道垃圾收集者在这期间做什么吗?我认为他正在做他的工作。我可以看到几个部分显示GC正在运行,内存大约为10%。我正在处理Joakim建议。您的后端和前端servlet都启用了会话,您的客户端是否正在发送回会话cookie信息?如果不是这样,您将创建15000个服务器会话,并且随着时间的推移可能会减慢速度。您可以禁用后端服务的会话,并查看您的服务时间是否保持线性
20:30:34.556 [509681393@qtp-1095433972-667] DEBUG org.mortbay.log - EXCEPTION
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196) ~[na:1.7.0_65]
at java.net.SocketInputStream.read(SocketInputStream.java:122) ~[na:1.7.0_65]
at org.mortbay.io.ByteArrayBuffer.readFrom(ByteArrayBuffer.java:382) ~[jetty-6.1.26.jar:6.1.26]
at org.mortbay.io.bio.StreamEndPoint.fill(StreamEndPoint.java:114) ~[jetty-6.1.26.jar:6.1.26]
at org.mortbay.jetty.bio.SocketConnector$Connection.fill(SocketConnector.java:198) [jett6.1.26.jar:6.1.26]
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:290) [jetty-6.1.26.jar:6.1.26]
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) [jetty-6.1.26.jar:6.1.26]
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) [jetty-6.1.26.jar:6.1.26]
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) [jetty- 6.1.26.jar:6.1.26]
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [jetty- util-6.1.26.jar:6.1.26]
20:30:34.555 [867433358@qtp-1095433972-664] DEBUG org.mortbay.log - EXCEPTION
20:30:34.563 [509681393@qtp-1095433972-667] DEBUG org.mortbay.log - EOF