본문 바로가기

소프트웨어 이야기/데이터 저장소 + 시각화

(PostgreSQL) OOM Killer

PostgreSQL 서버에 Out Of Memory가 발생하는 경우, PostgreSQL 자체를 재부팅해야지만 복구할 수 있다. 


메모리가 부족해지고, Swap 영역이 증가하게 되면 Linux Kernel의 OOM Killer가 프로세스를 죽이게 된다. 그러면서 부족해진 메모리를 늘리고, Swap 영역을 줄인다. 


이러면, 서버에 접속할 수 없는 수준으로 서버가 고장나는 일은 막을 수 있다. 그러나 OOM Killer가 Session을 죽이면서, DB Connection이 제 멋대로 끊길거다. 


PostgreSQL: SSL SYSCALL error: EOF detected 


그러면 PostgreSQL에서 이런 에러가 내뱉어지면서, PostgreSQL을 사용하는 앱에서는 에러가 마구 날거다. 

이 경우, PostgreSQL의 메모리 사용 설정값을 조정하면, 이런 문제를 해소할 수 있다.


shared_buffers, work_mem이 두가지를 낮게 조정하면 된다.

아니면 connection이 너무 많이 맺어져서 메모리를 많이 사용하게 된거일 수도 있다.

이 경우, max_connections을 줄이고, connection-pooling software ( ex. Pgpool )을 사용하는게 좋다.


OOM killer는 실제로 필요한 메모리보다 더 많은 메모리를 가상으로 할당(overcommit)했지만, 실제로 할당할 메모리가 없을 때 발생한다. 


그래서 아예 overcommit을 하지 않게 설정하는 방법도 있다. 


자세한 내용은 아래의 도큐먼트를 확인하면 된다! 

PostgreSQL DOC - Linux Memory Overcommit


참고 

OOM killer & Overcommit 

Configuring memory for Postgres 

PostgreSQL: SSL SYSCALL error: EOF detected