본문 바로가기

IT/실무정리

로드러너 이슈 정리 (502 bad gateway, hikair pool restart, web cpong timeout등)

반응형

설명 

 

담당하고 있는 프로젝트에 고도화를 진행하면서 새로운 연동 서비스가 추가 되었다. 해당 서비스와 연동을 하면서 트래픽 증가가 예상이 되어서 로드러너를 통해 과부하 테스트를 진행을 했다. 로드러너 테스트를 진행하면서 동시다발적으로 에러들이 발생을 해서 관련 내용을 정리하고자 한다. 

 

서버 구성도는 on-premise환경, 3tier 형식으로 구축되어있다. 추가로 테스트는 WEB1 -> WAS1 -> DB + 시뮬서버1 으로 과부하 테스트를 했다. 

 

 

문제 

1. 502 Bad gateway 

- 웹에서 ping를 보냈는데 웹서버에 설정된 시간안에 응답을 못받으면 502에러가 발생했다. (웹 설정은 worker.xxx.ping_timeout)

 

로드러너 실행시 간헐적으로 502 발생 (4~5시간마다 1번)
웹의 mod_jk.log에 자세한 내용이 찍힌다

- 100명의 유저로 200tps정도 테스트시 Tomcat의 Thread pool의 개수가 부족하나 싶어서 톰캣의 threadpoolSize를 늘려줬다. 하지만 결과는 동일 ㅠㅠ 

 

2. Hikair pool restart (deadlock)

- Tomcat thread pool의 size를 늘려도 동일한 502발생. 502 발생시 서비스 로그를 확인해보니 서비스로그가 안남으면서 정상적으로 요청을 처리할때 첫째줄에 Hikair pool restart이라고 적혀 있었다. 

- 구글에서 찾아보니 tomcat thread pool size비해 hikari pool size가 적어서 발생할 수 있다는 방안이 있었다. (아래 링크 참고) 

https://techblog.woowahan.com/2664/

- hikair pool size 정하는 공식으로 설정하고 로드러너 다시 실행

Pool size 적용 공식

- 하지만 동일한 502... 

 

해결 

해결책은 정말 간단했다. CPU였다. HTTP 통신은 CPU를 사용한다. 해당 서버에 CPU 사용량이 100% 이상 넘어갈시 해당 서버에 요청이 들어와도 정상 처리를 못한다. 서버에 CPU에 증가량의 원인은 다양하지만 대표적인건 thread pool의 size그리고 로그 출력이다. 로그의 레벨만 제대로 설정하면 cpu의 사용량이 기본 60%에서 30%까지 떨어지는걸 눈으로 확인할 수 있다. (CPU확인 스크립트는 포스트 참고 = https://tonyzorz.tistory.com/139)

 

추가적으로 JVM의 힙설정 + 웹의 retry, timeout 시간을 늘리면 또한 처리가 안될시 방안이 될수 있다. 

1. apache 웹 설정 

- workers.properties

  workers.template.socket_timeout=60

  workers.template.socket_connect_timeout=60000

  worker.template.ping_timeout=60000

 

2. tomcat 설정 

- startup.sh 

  -  JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=50 -XX:ParallelGCThreads=2"

 

로드러너 해결하기 위해 2주정도 시간을 헤맨것같다.. 다른 사람들은 제 포스트를 보고 cpu도 의심해보면 좋을것 같다! 

 

반응형

'IT > 실무정리' 카테고리의 다른 글

리눅스 CPU, MEM, ESTABLISHED 확인 스크립트  (0) 2023.07.16
리눅스 크론탭 10초 간격  (0) 2023.07.16