Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
独立Jetty服务器的CPU停留在95%到100%之间_Jetty_Cpu Usage_Java.util.concurrent - Fatal编程技术网

独立Jetty服务器的CPU停留在95%到100%之间

独立Jetty服务器的CPU停留在95%到100%之间,jetty,cpu-usage,java.util.concurrent,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"

我正在使用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();
ExecutorService=Executors.newFixedThreadPool(100);
对于(int i=0;i<10000;i++){
service.execute(新的Runnable(){
公开募捐{
试一试{
long startTime=System.nanoTime();
URL=新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)”;
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
service.shutdown();
当我执行这个程序时,服务器的CPU立即达到100%(对于两个内核)

我已尝试按照中的建议修改maxThreads、acceptorThreads和缓冲区大小参数

但即使如此,CPU仍然停留在95-100之间,以适应高负载

所以这里的问题是,是否有任何配置,我错过了,以尽量减少CPU?或者这是预期的,并且只能通过添加更多CPU或集群服务来纠正


感谢您的帮助。

您声明确实在不同的计算机上运行ExecutorService部件,但URL是
http://localhost:8080
。这是一个无负载测试

一些建议:

  • 不要将客户端负载和服务器负载放在同一台机器上(不要欺骗并尝试将负载放在同一台物理机器上的两个不同VM上)
  • 使用多台客户机,而不仅仅是1台(当Jetty开发人员测试负载特性时,我们使用客户机与服务器机的比例至少为10:1)
  • 不要使用环回、虚拟网络接口、本地主机等进行测试。。使用真实的网络接口
  • 不要使用不切实际的负载场景进行测试。服务器的实际使用将是大多数HTTP/1.1管道连接,每个物理连接有多个请求。有些在快速网络上,有些在慢速网络上,有些甚至在不可靠的网络上(想想手机)
  • 如果必须使用HttpURLConnection,请了解它是如何管理其HTTP版本+连接的(如keep alive或HTTP/1.1 close),并确保已阅读响应正文内容、关闭流以及

最后,.

感谢您的详细回答。这对我来说没有什么线索。是的,代码确实说它是localhost,但是当我把它复制到其他机器上时,我已经更改了它。