뚜렷한 이유 없이 Tomcat의 성능이 저하됩니다.

뚜렷한 이유 없이 Tomcat의 성능이 저하됩니다.

우리는 Amazon EC2 서버, 8코어 프로세서, 7GB RAM의 Tomcat 6에서 게임 애플리케이션 .WAR을 실행하고 있습니다. 애플리케이션은 Amazon RDS에서 호스팅되는 MySQL 데이터베이스를 사용합니다.

이 Facebook 애플리케이션은 단지 20~30명의 사용자가 플레이할 때 액세스하는 데 오랜 시간이 걸립니다. 1~2명의 사용자와는 큰 차이가 있습니다. 전체 .WAR은 ~4mb이며 모든 정적 콘텐츠는 다른 곳에서 호스팅됩니다.

서버의 RAM이 부족할 뻔한 적이 없습니다. CPU 사용률은 13.5~14%를 넘은 적이 없습니다. 심지어 500명의 사용자가 모든 것을 완전히 느리게 멈췄습니다. 스레드 수 또는 스레드 풀이 최대치에 가까워지지 않았습니다. 최대 스레드를 높였지만 눈에 띄는 차이는 없었습니다.

내 이론은 Tomcat이 하나의 프로세서 코어만 사용할 수 있다는 것입니다. 이는 활동 급증 시 CPU 사용량이 안정적으로 13-14%에 있었음에도 불구하고 Tomcat이 느려져서 정지되는 이유를 설명합니다.
하지만 왜 하나의 CPU 코어만 사용하는지 이해하려고 애쓰고 있습니다. server.xml에는 프로세서 캡이 없습니다. 앱에는 여러 서블릿(4 또는 5)이 포함되어 있습니다. Java 코드에는 SingleThreadModel에 대한 언급이 없습니다.

애플리케이션이 극도로 느리게 실행되는 원인은 무엇입니까? 응용 프로그램에 1~5명만 있으면 정상적으로 실행됩니다. 20~30명이면 거의 연락이 되지 않습니다.

답변1

이는 애플리케이션 설계에 결함이 있을 수 있습니다. 동일한 동작을 수행하는 애플리케이션도 하나 있습니다. 코드의 상당 부분이 동기화되므로 얼마나 많은 CPU를 제공하더라도 단일 스레드에서 효과적으로 실행됩니다. 이 상황에서는 동일한 애플리케이션의 여러 인스턴스를 실행하고 인스턴스 간에 로드 균형을 조정하는 것 외에는 거의 아무것도 할 수 없습니다.

관련 정보