며칠 동안 기억은 90 %까지 올라간 다음 거기에 머물러 있습니다. 그게 메모리 누출인가요? 캐시 된 메모리를 사용하는 프로세스를 검색하는 방법은 무엇입니까? 수많은 데몬을 실행합니다. 최근

필자는 사용자 정의 웹 OS가있는 NAS를 가지고 있으며, Mobotix IP 카메라를 보완하는 시스템을 함께 구성하는 수많은 데몬을 실행합니다.

최근 몇 주 동안, 저는 약간의 문제가 있습니다. 내장 된 리소스 모니터는 하루에 약 10 %의 메모리 사용량 증가를 보여줍니다. 90 %에 도달하면 +/- 1 % 범위 내에 있습니다.

나는 또한 내가 부르는, 최적화 된 메모리를 계산하고있다. 즉, 제거 된 버퍼와 추가 된 캐시는 매일 ~ 20 % 정도를 유지합니다.

출력 free 지금과 같은:

             total       used       free     shared    buffers     cached
Mem:       1901072    1731036     170036          0     146228    1207360
-/+ buffers/cache:     377448    1523624
Swap:      1048572       1648    1046924

보시다시피, 메모리는 거의 꽉 차 있지만 캐시 / 버퍼링은 대부분의 메모리를 차지하는 것처럼 보입니다.

나는 이것이 어딘가에 메모리 누수로 인해 발생했다는 느낌을 가지고 있지만 확실하지 않습니다.

어떤 프로세스가 버퍼링 / 캐시 된 메모리를 채우고 있는지 어떻게 탐지합니까?



답변

이것은 문제가되지 않습니다. 리눅스는 그렇게하기로되어 있습니다. 정말로 메모리 문제가 있다면, 모든 것이 천천히 돌아가고 프로세스가 OOM 킬러 .

Linux 커널은 디스크 캐싱에 사용되지 않는 RAM을 이용합니다. 이것은 좋은 일이며 모든 것이 더 빨리 돌아갑니다. 이 메모리는 필요한 프로그램에서 계속 사용할 수 있으며 다른 곳에서는 필요하지 않은 경우에만 캐싱에 사용됩니다. 그 이유는 freebuffers/cache 별도로 사용 가능한 메모리로 간주해야합니다.

시스템에서 사용할 수있는 실제 메모리 양은 다음과 같습니다. free + buffers + cache, 게시 한 예에서 170036 + 146228 + 1207360 = 15236241.5G의 여유 메모리입니다.

이것은 매우 잘 설명되어 있습니다. RedHat 문서 :

이 예제에서 사용 가능한 총 메모리 양은 4040360KB입니다.
  264,224 KB는 프로세스에서 사용하고 3776136 KB는 다른 프로세스에서 사용 가능합니다.
  응용 프로그램. 첫 번째 줄에 혼란스러워하지 마십시오.
  28160KB는 무료입니다!
사용량 수치를 보면 알 수 있습니다.
  대부분의 메모리 사용은 버퍼 및 캐시 용입니다. Linux는 항상 시도합니다.
  사용 가능한 메모리를 사용하여 디스크 작업 속도를 높이려면 RAM을 사용하십시오.
  버퍼 (파일 시스템 메타 데이터) 및 캐시 (실제 내용이있는 페이지
  파일 또는 블록 장치).
이렇게하면 시스템이 더 빨리 실행됩니다.
  디스크 정보가 이미 I / O를 저장하는 메모리에 있기 때문에
  작업. 프로그램이나 응용 프로그램에서 공간이 필요한 경우
  오라클, 그럼 리눅스는 메모리를 양보하는 버퍼와 캐시를 무료로 것입니다
  응용 프로그램 용.
시스템이 잠시 동안 실행되는 경우 일반적으로
  첫 번째 줄의 “무료”필드 아래의 작은 숫자를보십시오.

자세한 내용은 여기를 참조하십시오 :