유휴 상태일 때 사용 가능한 메모리가 총 메모리보다 훨씬 적습니다.

유휴 상태일 때 사용 가능한 메모리가 총 메모리보다 훨씬 적습니다.

서버가 있고 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

제 경우에는 lsofpostgresql 쿼리 로그 파일이 276M으로 의심스럽더군요. 나는 또한 postgresql의 공유 버퍼가 그것과 관련이 있을 수 있다는 것을 여기에서 읽었습니다.https://serverfault.com/questions/515125/oom-despite-available-memory-cache/856010#856010

postgresql 서비스를 다시 시작할 수 있는데 버퍼/캐시가 7.5G 감소했습니다. 프로덕션 환경에서는 이러한 응답을 더 자세히 조사할 수 있습니다.

관련 정보