추석 시즌이라 사용자가 몰리면서, 사이트에 접속이 안된다는 연락을 받았다 😱
추석 복지몰 전용서버를 스카우터로 확인해보니 200명가량에서 멈춰있었고,
내가 url을 쳐서 접속해보려니 접속대기상태가 되었다.
서버는 죽지 않았고, HEAP, GC TIME 정상, 에러로그도 안나왔다.
다른 connector가 연결이 끊어질때까지 기다리는 느낌이였다 😩
새로 셋팅한 서버인데 옵션을 좀 조정해줘야 할 것 같아서, 정리해두고 밤에 작업을 해주었다.
추가적으로 서버 재기동하는김에 JVM쪽 튜닝도 아주 살짝만 해줄려고 한다.
1. JVM 튜닝
"JVM 튜닝을 한다는건 GC(Garbage Collection)를 튜닝하는 것과 마찬가지다"라고 봅니다
GC가 돌아갈때 다른 스레드들이 전부 멈추게 되는데요 -> SWT(Stop The Word) 라고들 합니다.
"GC가 돈다는건 쓸모없는 객체가 많아졌다는 것"이고 -> GC가 도는 주기나 GC가 도는 시간을 줄이는게
애플리케이션 성능의 관건이라고 이해합니다 -> "즉 GC를 튜닝하는 것보다 애플리케이션 점검이 먼저입니다"
-> "튜닝은 최종"
-> 객체를 비효율적으로 사용하고 있는건 아닌지 점검이 필요합니다 -> 저도 계속해서 소스 보완하고 있습니다 👩💻
-> 그리고 튜닝에 사용된 값은 정해진게 아닙니다 -> 서비스, 하드웨어 환경에 따라 매우 틀립니다
-> 값을 바꿔가며 테스트,모니터링을 할 필요성이 있습니다
제일 먼저 우리는 어떤 GC를 사용하고 있는지부터 파악해야겠죠?
CMD에 다음 명령어를 입력해보세요. 저는 문제의 서버에서 진행해봤습니다.
java -XX:+PrintCommandLineFlags -version
UseParallelGC를 사용중이네요 -> GC종류나 특성이나 동작방식은 정리가 되면 글을 올리겠습니다.
간단하게 알고 가실건 JDK 1.7과 1.8에서 메모리구조가 바뀌었는데요
위에 사진에 보면 Permanet가 없어지면서 -> PermSize, MaxPermSize 같은 옵션들은 1.8이상부터 안먹습니다.
길게 설명했지만 저는 간단하게 Xms, Xmx만 건드릴게요 😜ㅎㅎㅎㅎㅎㅎ
set JAVA_OPTS=-server -Xms4096M -Xmx4096M
Xms, Xmx 값은 어떤 서비스를 하느냐, 컴퓨터환경이 어떠냐에 따라 다릅니다.
하지만 두 값을 같게 하는걸 권장합니다
이 값들이 무엇을 의미하느냐는 다음에 정리해서 글을 올리겠습니다
GC 동작방식을 이해를 해야되서 너무 깁니다
2. 아파치 - MPM(Multi Processing Module)옵션 오픈, MaxConnectionsPerChild 값 조정
우선 어떤 MPM 모듈을 사용하는지 알아야됩니다
cd C:\Apache24\bin
httpd -V
윈도우 서버면 WinNt만 사용가능합니다
리눅스라면 worker로 다양한 옵션을 건드릴 수 있었을텐데 아쉽습니다
MPM모듈 주석 되어있는걸 해제해주어야합니다
저는 여기서 MaxConnectionPerChild 값을 조정해주었습니다
MPM에 대해서도 정리해서 다음에 글을 올리도록 하겠습니다!
3. 아파치 톰캣 - server.xml에 connector 스레드값 조정, DB MAXACTIVE 조정
maxThreads를 조정합니다
DB쪽 maxActive, maxIdle 값을 조정해줍니다 -> 이 또한 같은 수를 권장합니다
4. 끝
계속 공부하면서 정리중이며, 부족한 부분이 많아서 틀린내용이 있을 수도 있어서
틀린부분 댓글주시면 공부하고 내용수정하도록 하겠습니다
https://www.yes24.com/Product/Goods/72161685
추가적으로 아직 읽고있지만 많이 도움되고 있는 책 공유드립니다!
참고자료
'트러블슈팅' 카테고리의 다른 글
레거시 오라클 쿼리 리팩토링: 주문번호 부분입력으로 편의성 추가(Feat. 성능 최적화) (0) | 2024.04.19 |
---|---|
오라클 ORA-00018: 최대 세션 수를 초과했습니다 (0) | 2023.09.21 |