Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty 6服务器上的响应延迟时间稳步增加_Java_Mysql_Performance_Jetty - Fatal编程技术网

Java Jetty 6服务器上的响应延迟时间稳步增加

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次请求之后,情况不是很好,完成

这是基本场景:

我有一个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次请求之后,情况不是很好,完成每个请求大约需要161ms到182ms

此时间持续增加,直到完成每个请求的时间达到1300ms到1321ms。最后,在大约10000个请求之后,每个请求大约需要3000毫秒才能完成

我没有运行多个线程来执行请求。 我没有在此VM中运行其他服务。 我正在RDS实例上使用MySql

*哦,还有一件事,如果我重新启动Jetty并尝试再次创建对象,行为会不断重复,从30毫秒开始,到3000毫秒。这让我觉得这和码头上的线程池有关

我用来启动码头的代码是:

    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