사용 가능한 메모리를 모두 소모하는 것으로 보이는 Ubuntu 9.10 64비트 서버가 있습니다. 내 무닌 그래프에 따르면 소모되는 메모리의 거의 대부분은 스왑 캐시, 캐시, 슬랩 캐시에 있습니다. (나는 이것을 가상 메모리 캐시를 의미한다고 생각합니다. 이것을 가정하는 것이 맞습니까?)
메모리 사용량이 100%에 가까워지면 SSH와 같은 일부(전부는 아니지만) 시스템 서비스가 느려지고 응답하지 않게 됩니다. 시스템을 재부팅한 후 잠시 동안 성능 및 메모리 사용량이 정상화됩니다.
몇 가지 흥미로운 정보:
- 시스템은 Apache 2, MySQL, Munin 및 sshd를 실행합니다.
- 메모리 사용량 급증은 매일 밤 같은 시간(오후 10시 정각)에 발생합니다.
- 사용자의 crontab에는 아무 것도 없는 것으로 보이며 /etc/cron.d/*에는 오후 10시에 발생하는 일은 말할 것도 없고 평범하지 않은 것도 없습니다.
제 질문은 메모리 부족의 원인을 어떻게 알 수 있느냐는 것입니다. 일반적인 유틸리티(예: ps, top 등)를 사용해 보았으나 특이한 점은 없는 것 같습니다.
어떤 아이디어가 있나요? 미리 감사드립니다!
답변1
메모리와 관련된 것이 확실합니까? 캐시가 모든 메모리를 빨아들이면 안 됩니다. 임시적이고 동적이며 활성 메모리가 필요할 때 재할당됩니다. 캐시는 작업 속도를 높이고 낭비되는 메모리를 활용하기 위해 존재합니다.
아마도 시스템을 방해하는 다른 것이 있는지 확인할 것입니다. Top을 사용할 때 시스템 부하가 높나요? "정상적인" 시간과 비교했을 때 그 시간은 어떤가요? 상단을 CPU 사용량과 활성 메모리 사용량으로 정렬합니까?
디스크 i/o를 확인하고 드라이브에 문제가 있는지 확인하기 위해 iotop을 실행해 보셨나요?
모든 크론탭은 어떻게 생겼나요?
낮에 몇번 ps의 스냅샷을 찍고 10시쯤에 어떤 프로세스가 나타났는지 비교해 보셨나요?
장기적으로 보면 netstat를 사용한 네트워크 연결은 어떻습니까? 그 당시 시스템에 들어오고 나가는 이상한 일이 있습니까?
"찾기"와 같이 시스템 데이터베이스를 재구축하거나 인덱싱하는 것처럼 들리지만 시스템 속도가 느려져서는 안 됩니다.
답변2
메모리 사용과 느린 현상은 동일한 문제의 증상입니다. 이때 시스템의 디스크 캐시가 스래싱되는 일이 발생합니다. 시스템은 과도한 디스크 I/O를 피하기 위해 모든 메모리를 사용하지만 여전히 실패합니다.
이는 최근에 읽지 않은 디스크 영역에 많은 디스크 읽기가 발생할 때 가장 일반적입니다. 다시 사용될 수 있는 최근에 사용된 데이터는 캐시 밖으로 밀려나고 다시 읽어야 할 경우 기존 읽기 흐름과 경쟁해야 합니다.
많은 디스크 I/O를 수행하는 일부 프로세스를 확인하십시오. 예를 들어 updatedb
일종의 백업 스크립트입니다. 직접 만든 도구로 판명되면 디스크 캐시를 우회하여 다른 항목을 캐시에서 강제로 빼내지 않도록 변경하는 것이 도움이 될 수 있습니다. ionice
시간에 민감한 읽기를 많이 해치지 않도록 도움이 될 수 있습니다 .