Linux 캐시는 완전히 지울 수 없으며 며칠 후에 전체 RAM을 채웁니다.

Linux 캐시는 완전히 지울 수 없으며 며칠 후에 전체 RAM을 채웁니다.

저는 업무용으로 노트북을 사용하기 때문에 시스템을 종료하지 않고 매일 RAM에 잠시 멈춰두곤 합니다. 이렇게 하면 매일 모든 앱을 다시 시작할 필요가 없습니다.

며칠 동안 "가동 시간"을 보낸 후 캐시가 가득 찬 것을 확인했지만 완전히 지울 수는 없습니다. 이로 인해 스왑 사용이 발생하고 OOM이 발생합니다.

# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       2.2Gi        15Gi       4.7Gi       0.0Ki       5.2Gi        15Gi
Swap:         2.0Gi          0B       2.0Gi
Total:         25Gi       2.2Gi        17Gi
# free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.4Gi       457Mi       9.1Gi       3.5Gi        14Gi       9.2Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.4Gi       2.4Gi
# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.3Gi       9.0Gi       9.0Gi       0.0Ki       9.8Gi       9.4Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.3Gi        11Gi
# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.3Gi       9.0Gi       9.0Gi       0.0Ki       9.8Gi       9.4Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.3Gi        11Gi
# uptime
 10:57:09  up 3 days 19:26,  5 users,  load average: 0.89, 1.94, 1.69
# uname -a
Linux xxxxx-00164 5.3.18-150300.59.76-preempt #1 SMP PREEMPT Thu Jun 16 04:23:47 UTC 2022 (2cc2ade) x86_64 x86_64 x86_64 GNU/Linux
# 

어떤 앱이나 파일이 캐시에 갇혀 있는지 확인하는 방법을 아직 모르겠습니다. 나는 3> drop_caches가 제거된다고 가정합니다.모두파일 캐시 항목. 하지만 내 노트북이 더 오래 작동하므로 캐시를 삭제하면 매번 확보되는 리소스가 줄어듭니다. 위의 출력은 약 8시간 동안 지속됩니다. 1초 이내에 두 번(마지막 두 개의 echo 명령) 캐시 지우기를 시도했지만 캐시에 남아 있던 내용이 사용 가능한 항목에서 손실되었습니다.

그러한 행동을 분석하는 방법은 무엇입니까? 캐시에는 무엇이 남아 있나요?

매우 감사합니다! 스테판 K.

답변1

며칠 동안 "가동 시간"을 보낸 후 캐시가 가득 찬 것을 확인했지만 완전히 지울 수는 없습니다. 이로 인해 스왑 사용이 발생하고 OOM이 발생합니다.

나는 당신이 잘못된 문제를보고 있다고 생각합니다. drop_caches 명령은 사용 중인 어떤 항목도 삭제할 수 없습니다. 따라서 0이 되지 않습니다. 그러나 이것은 일반적으로 문제가 되지 않습니다. 이 사이트에서 아마도 12개의 답변을 찾을 수 있을 것입니다(예:Linux 시스템에서 버퍼와 캐시를 지우는 방법은 무엇입니까?) 이는 일반적으로 의미가 없다고 알려줍니다.

하지만 그렇다고 해도 숫자를 직접 0으로 echo 3 > /proc/sys/vm/drop_caches만들 수 없는 이유를 설명하는 것은 없다고 생각합니다 . cached나는 영향을 미칠 수 있는 최소한 두 가지를 알고 있습니다: 파일 tmpfs(아직 열려 있지만 삭제되었을 수 있는 파일 포함(참조Serverfault에 대한 이 답변) 및 zram( zramctl명령 참조). 다른 몇 가지가 있을 수 있습니다.

기본적인 문제는 캐싱이 아니라 무언가가 메모리를 사용하고 있다는 것입니다.진짜로.

관련 정보