Gerrit 메모리 릭 우회하기

코드 리뷰 도구로 gerrit을 사용 중이다.

5월 말?쯤에 gerrit-2.6.x-rc? 로 올렸는데 이 때 부터 문제가 생기기 시작했다. 해당 머신에 할당한 메모리에 따라 다르지만, 대략 3일~일주일 후면 heap 공간이 꽉차서 GC하느라 반응이 없거나, 아니면 아예 OOM으로 죽거나. 그래서 포기하고 crontab에서 아예 restart 하게 수정 (이건 실제로 작업하는 시간대가 명확해서 가능한거고 분산된 팀이면 적용하기 괴로울 듯)

그 당시에 찍은 gerrit의 heap 사용량

Gerrit 메일링 말고 다른 쪽에서 검색한 바로는 apache sshd의 세션이 제대로 안 날아가서 생기는 문제라는 얘기도 있던데 여하간 해결이 난망해 보였음. (2.6 올라갈 때 Apache MINA sshd에 대한 의존성이 수정됨)

Gerrit 2.7-rc도 동시에 나오기 시작해서 그 쪽으로 올려도 봤는데 소용이 없더라.

며칠 전에 gerrit 2.7이 정식으로 릴리즈 되었고, 버전 올린김에 issue tracker를 보다가 최근에 다른 사람이 올린 issue를 발견.

우회책도 제시되었다: https://gerrit-review.googlesource.com/#/c/44351/ sshd의 idleTimeout을 작은 값 (예시는 5분) 으로 바꾸라는 것.

서비스 중인 버전을 2.7 (released)로 바꾼 뒤에 한 거라 명확하진 않지만 역시나 이쪽 메모리 문제도 이걸로 잡힌 것 같다. (이 때 쯤엔 아예 포기하고 매일 새벽에 gerrit daemon restart를 걸어놓은 상태)

gerrit-2.7-fixed

일단 heap 사용량이 안정적이 된 듯 하니 앞으로 한동안은 잊고 있어야겠다 (?).