Middleware Tomcat 리소스 사용량 부하 현상문의
페이지 정보
작성자 Wonjongseok 아이디로 검색 전체게시물 댓글 2건 조회 2,987회 좋아요 0회 작성일 21-08-13 15:06본문
시스템 운영 중 Tomcat 리소스 사용량 부하 현상에 기술 문의를 드립니다.
[서버구성상태]
현재 Azure VMSS(Virtual Machine Scale Sets) 레드햇 리눅스 환경에서 현재 서버 4대 유지 중
각각 서버에는 std-tom 톰캣과 view-tom 톰캣 두개의 톰캣이 기동 중
각각 서버에 있는 std-tom톰캣은 모두 Azure Redis(Azure Cache for Redis)에 연결되어 세션 클러스터링 중이며,
톰캣 위에 개발자들이 스프링부트를 올려 개발을 진행함
[이슈사항]
아래 캡처 본처럼 std-tom 톰캣을 재기동 하면 서버 메모리 사용률이 30%정도 까지 내려갔다가 약 50%까지 천천히 올라갑니다.
서버 4대 모두 메모리사용률이 50% 정도가 되면 메모리는 더 이상 오르지 않으며 그대로 유지되고, 갑자기 CPU가 오르기 시작합니다.
std-tom 톰캣을 재기동 하지않고 이대로 두면 CPU가 100%까지 올라가며 그대로 유지됩니다.
(리눅스에서 top으로 확인 시 std-tom톰캣만 CPU 부하가 걸립니다.)
그리고 CPU 70% 이상부터는 std-tom 연동되어있는 서비스들이 제대로 작동되지 않고 오류가 발생하며,
부하가 발생하지 않도록 수동으로 주기적으로 4대의 서버에 있는std-tom 톰캣을 순차적으로 재기동 하고 있는 상황입니다.
std-tom 톰캣 Catalina.sh 파일에 메모리 설정
vmstat 및 jstat으로 메모리 사용량 확인
추가문의
=========================================================================================
지난주 금요일 CPU 사용률이 서서히 증가되는 중이던 서버 2대에서 약간의 시간차를 두고 생성한 6개의 ThreadDump 파일 전달 드립니다.
먼저 메모리 사용률이 서서히 증가하여 일정수치에 도달하였을 때부터 CPU 사용률이 서서히 올라가서
사용자 증가로 발생하는 CPU 사용률 증가는 아닌 것으로 생각됩니다.
추가로 오늘 오전에 개발자분이 분석한 내용은 JVM Check 했을 때
Old Generation 100% 차 있으며 Garbage Collection을 해도 비워지는 부분이 없어 반복해서 Garbage Collection이 이뤄지고 있다고 합니다.
ThreadDump 파일만으로 원인 분석이 어려우시면 추가로 요청해주세요.
=========================================================================================
첨부파일
- 20210813_212_thread-dump1.txt (159.8K) 57회 다운로드 | DATE : 2021-08-17 12:15:40
- 20210813_212_thread-dump2.txt (161.0K) 3회 다운로드 | DATE : 2021-08-17 12:15:40
- 20210813_212_thread-dump3.txt (161.1K) 7회 다운로드 | DATE : 2021-08-17 12:15:40
- 20210813_213_thread-dump1.txt (160.1K) 7회 다운로드 | DATE : 2021-08-17 12:15:40
- 20210813_213_thread-dump2.txt (160.1K) 2회 다운로드 | DATE : 2021-08-17 12:15:40
댓글목록
미들웨어님의 댓글
미들웨어 작성일
안녕하세요.
vmstat로 보면 us 6, sy 2만 사용되고있을 정도로 여유있네요.
위 그래프만 봤을때는 cpu사용량이 증가된거고 사용량이 늘었나? 정도 추측이 가능합니다.
저라면 CPU가 3%이다 30~40%로 증가됐을때 ThreadDump 를 생성해서 어떤 Thread가 실행되고 있는지 확인해볼 것 같습니다.
일반적으로 cpu가 급작스럽게 튀는 경우는 크게 두가지를 생각해 볼 수 있습니다.
첫째는 사용자의 증가로 인한 cpu증가고, 두번째로는 batch 입니다.
정기, 비정기적으로 batch process 가 돌경우 cpu증가가 발생가능합니다.
도움이 되셨기를 바랍니다.
미들웨어님의 댓글
미들웨어 작성일
redisson-netty RUNNABLE 스레드가 60여개가 넘네요.
무한루프 도는 부분이 있는지 프로그램 확인이 필요할 것 같습니다.
1. do ... while loop 사용하는 부분이 있는지 확인이 필요한데, tomcat server.log 에 관련된 호출파일이 있다면 연관해서 찾아보시면 좋을 듯 합니다
2. redisson-netty 스레드 무한루프랑 비슷한 사례를 찾았는데 확인해볼 필요가 있을듯 하네요
https://github.com/redisson/redisson/issues/2299
https://github.com/netty/netty/pull/9579
3. Threaddump 분석된 자료리포트 첨부로 올려두고싶은데, pdf는 업로드가 안되네요..
구글드라이브에 누구나 다운받을 수 있게 공유링크 알려드리겠습니다. (클릭후 다운해주세요)
https://drive.google.com/file/d/1OnB9t2Ws9AZuCtTFosNJKV1HrLm2ULLa/view?usp=sharing
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000006cb518228> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <0x00000006cb6aae60> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000006cb518180> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:810)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)