서버가 있고 free
출력은 다음과 같습니다.
root@server:~# free -h
total used free shared buff/cache available
Mem: 31G 903M 22G 7.7G 8.2G 22G
Swap: 975M 38M 937M
이제 이 서버는 전혀 부하가 없고 부하 평균이 0.00인 SSH와 같은 몇 가지 서비스만 실행하면서 완전히 유휴 상태입니다. 클리어 버퍼를 사용해 보았는데 sync; echo 3 > /proc/sys/vm/drop_caches
버퍼가 다운됐는데 보시다시피 여전히 8.2G를 사용하고 있습니다.
총 31G 중 1G만 사용하고 22G만 사용 가능한 이유는 무엇인가요? OOM 수확기가 더 많은 메모리를 요청하는 프로세스를 종료하기 때문에 커널은 실제로 22G 이상의 여유 공간을 제공할 수 없는 것 같습니다. 그런데 그 이유는 무엇일까요?
커널 버전으로 Ubuntu 18.04 서버를 실행하고 있습니다4.15.0-24-generic
답변1
좋습니다. 상황은 여기에 설명된 내용과 유사합니다.https://serverfault.com/questions/288319/linux-not-freeing-large-disk-cache-when-memory-demand-goes-up
제 경우에는 lsof
postgresql 쿼리 로그 파일이 276M으로 의심스럽더군요. 나는 또한 postgresql의 공유 버퍼가 그것과 관련이 있을 수 있다는 것을 여기에서 읽었습니다.https://serverfault.com/questions/515125/oom-despite-available-memory-cache/856010#856010
postgresql 서비스를 다시 시작할 수 있는데 버퍼/캐시가 7.5G 감소했습니다. 프로덕션 환경에서는 이러한 응답을 더 자세히 조사할 수 있습니다.