对于Standalone Jetty服务器,CPU卡在95%到100%之间

时间:2015-01-06 06:00:16

标签: jetty cpu-usage java.util.concurrent

我正在使用Jetty将主类作为服务启动。下面是代码的摘录,用于演示问题。

    Server server = new Server(8080);
    ResourceHandler resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(true);
    resource_handler.setWelcomeFiles(new String[] {"index.html"});
    resource_handler.setResourceBase(".");
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] {resource_handler, new DefaultHandler()});
    server.setHandler(handlers);
    server.start();
    server.join();

我在带有2个CPU的Windows机器上从eclipse运行这个应用程序。

启动此应用程序后,我在不同的机器上执行以下程序。下面的代码只生成100个并发线程并执行一个简单的http请求来获取index.html页面。

ExecutorService service = Executors.newFixedThreadPool(100);
for (int i = 0; i < 10000; i++) {
  service.execute(new Runnable() {
    public void run() {
      try {
        long startTime = System.nanoTime();
        URL url = new URL("http://localhost:8080");
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        long endTime = System.nanoTime();
        System.out.println(conn.getResponseMessage() + ":" + ((endTime - startTime)/1000000) + " (ms)");
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  });
}
service.shutdown();

当我执行此程序时,服务器的CPU立即达到100%(对于两个核心)。

我尝试按https://wiki.eclipse.org/Jetty/Howto/High_Load中的建议修改maxThreads,acceptorThreads,缓冲区大小参数。

但即便如此,CPU仍然会在95-100之间保持高负荷。

所以这里的问题是,是否有任何配置我缺少最小化CPU?或者这是预期的,只能通过添加更多CPU或集群服务来纠正?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您声明您在其他计算机上运行ExecutorService部分,但URL为http://localhost:8080。这是负载测试中的禁忌。

一些建议:

  • 不要在同一台计算机上安装客户端负载和服务器负载(不要作弊并尝试将负载放在单个物理计算机上的2个不同的虚拟机上)
  • 使用多个客户端计算机,而不仅仅是1(当Jetty开发人员测试负载特征时,我们使用至少10:1的客户端计算机与服务器计算机的比率)
  • 不要使用环回,虚拟网络接口,localhost等进行测试。使用真实的网络接口。
  • 不要用不切实际的负载情况进行测试。服务器的实际使用将是大多数HTTP / 1.1流水线连接,每个物理连接有多个请求。一些在快速网络上,一些在慢速网络上,一些甚至在不可靠的网络上(想想移动)
  • 如果您必须使用HttpURLConnection,请了解它如何管理其HTTP版本+连接(例如keep-alive或http / 1.1关闭),并确保您阅读响应正文内容,关闭流,以及{{3} }。

最后,disconnect() the connection