400ms STW 하나가 실시간 서비스를 어떻게 멈춰세우는지
·
JAVA
글을 작성하게 된 이유실시간 트래픽이 몰리는 서비스에서 Stop-The-World(STW)가 400ms 이상 걸리면서, 모듈 사이 통신이 끊기고 라우팅이 꼬이는 상황을 겪고 나서야 깨달았다. 이 글은 그때 겪었던 장애 상황부터, GC 원인 분석, 그리고 ParallelGC에서 G1GC로 튜닝하면서 실제로 STW를 줄였던 과정을 정리해보려고 쓴다. GC가 뭐길래?Java에서는 개발자가 직접 free() 같은 걸 호출해서 메모리를 해제하지 않는다.대신 GC가 주기적으로 돌아다니면서 더 이상 참조되지 않는 객체를 찾아서 메모리에서 치워준다.이 덕분에 메모리 관리가 편해지는 대신, GC가 도는 동안 애플리케이션의 모든 쓰레드가 멈춘다. 이것을 Stop-The-World(STW) 라고 부른다. 서비스 간략 설명내..