AWS에 배포된 Apache 서버의 역방향 프록시를 사용하여 Tomcat에서 실행되면서 피크 시간에 애플리케이션 속도가 느려집니다(때때로).

AWS에 배포된 Apache 서버의 역방향 프록시를 사용하여 Tomcat에서 실행되면서 피크 시간에 애플리케이션 속도가 느려집니다(때때로).

머리말: 저는 소프트웨어 개발자이고 처음에는 무슨 일이 일어나고 있는지 아무도 몰랐습니다. 그래서 몇 가지 테스트와 독서를 했으며 동료들이 이 문제를 해결하도록 돕고 싶습니다.

문제:

문제는 사용량이 많은 시간대에는 서버가 너무 느려서 Chrome과 같은 브라우저에서 연결 시간이 초과되지만(30초 후) 서버는 여전히 작동 중이며 ~100초 후에 페이지를 제공할 수 있다는 것입니다(불면증으로 테스트됨). 프로덕션 서버에서 문제를 재현했는데 abs ..., 이는 아마도 Apache 서버 구성으로 인해 발생한 동시 요청 수와 관련이 있습니다.

더 많은 정보:

개발할 때 tomcat8을 로컬에서 실행하고 " "로 테스트했는데 abs -c 200 -n 2000 https:/[link]실행 시간이 괜찮습니다. 그러나 프로덕션 서버를 테스트하면 50개의 동시 요청이 있어도 테스트 중인 API의 속도 저하가 상당했습니다(기본 시간 800ms에서 27846ms로).

시도한 사항 및 자세한 내용:

Java melody가 실행 중이고 Tomcat 실행 스레드의 스레드 제한에 도달했다고 생각하여 스레드 수를 기본값 200에서 500으로 늘렸습니다(테스트를 수행하기 전이었습니다). 앞서 언급한 테스트를 실행할 때 바쁜 스레드가 500개 중 50개 정도까지 증가하는 것을 볼 수 있습니다(프로덕션에서 실행 중이므로 일부 사람들은 실제로 프로그램을 사용하고 있음). 아니요, 여전히 속도가 많이 느려집니다.

피크 시간에는 약 1000개의 http 세션이 있지만 스레드, 메모리 및 CPU는 100%에 가깝지 않습니다. 우리가 할 수 있는 최고의 서버로 업그레이드했는지 확인하기 위해서였지만, 물론 그렇지 않았습니다. 우리는 SQL을 사용하고 있지만 SQL 서버도 정점에 도달하지 않았으므로 이것이 문제인지 의심됩니다.

JVM 인수를 모방해서는 안 된다는 것을 알고 있지만 비슷한 문제를 보면서 "-XX:ReservedCodeCacheSize=512M"을 추가하려고 시도했지만 그 역시 작동하지 않았습니다. 또한 server.xml에서 acceptCount를 1000으로 늘리려고 시도했지만 여전히 작동하지 않습니다.이러한 변경 사항을 취소해야 합니까?나는 어떤 성능 변화도 발견하지 못했고 문서를 읽어본 결과 알 수 있는 한 이대로 두어도 괜찮습니다.

일정 시간 동안 활동이 없으면 웹앱이 홈 페이지로 이동한 다음 xx분마다 홈 페이지를 계속 새로 고치는 이상한 기능이 있습니다. 나는 이것이 성능에 좋지 않다고 생각합니다. 특히 사용자가 많은 탭을 열어 놓고 새로 고치기 시작하는 경우, 아마도 문제를 일으키는 원인은 아니지만 언급할 가치가 있습니다.

오늘 시도할 다음 작업은 Apache 서버 인수를 조작하는 것입니다. 나는 읽고있다튜닝 가이드MaxRequestWorkers / MaxClients는 우리가 겪고 있는 상황을 설명할 수 있는 것처럼 보입니다. 인용하다이 지시어가 너무 낮으면 Apache는 사용 가능한 하드웨어를 제대로 활용하지 못하여 비용이 낭비되고 피크 시간 동안 페이지 로드 시간이 오래 지연됩니다.

어떤 조언이라도 감사하겠습니다. 바라건대 그것은 단지 아파치 서버이고 적어도 오늘은 서버를 사용할 수 있게 만들 수 있습니다. 이러한 속도 저하를 일으킬 수 있는 다른 구성이 있습니까?

답변1

귀하의 웹서버는 실제로 SlowLoris DOS 공격을 에뮬레이션하는 너무 많은 요청으로 인해 질식할 수 있습니다.이전 답변주제에.

관련 정보