Jetty를 사용하여 서비스로 기본 클래스를 시작합니다. 문제를 설명하기 위해 코드를 추출하십시오.Standalone Jetty 서버에서 CPU가 95 %에서 100 % 사이에 걸림
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 컴퓨터에서 실행됩니다.
이 응용 프로그램을 시작한 후에 다른 컴퓨터에서 아래 프로그램을 실행합니다. 아래 코드는 단지 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를 추가하거나 서비스를 클러스터링함으로써 만 수정할 수 있습니까?
도움 주셔서 감사합니다.
자세한 답변을 보내 주셔서 감사합니다. 이것에는 저를위한 몇몇지도가있다. 예, 코드는 localhost라고 말합니다. 그러나 다른 컴퓨터에 복사 할 때 변경했습니다. – user1401472