top
배치 모드에서 실행 하여 메모리 크기를 주기적으로보고하면 남은 메모리를 누가 사용하는지 확인할 수 있습니다. 들이받은 sar
배치 모드에서 것은 메모리 사용 및 관련 I / O에 좋은 진단을 제공해야합니다. munin
시스템을 모니터링하기 위해 실행 하면 사용중인 메모리에 대한 세부 정보가있는 그래프가 제공됩니다. 이것은 많은 도움이 될 수 있습니다.
limits.conf를 사용하여 프로그램의 최대 코어 크기를 제한 할 수 있습니다. 올바르게 설정하면 메모리가 누출되는 모든 프로그램이 종료됩니다. 이것은 pam_limits 모듈과 함께 작동합니다. ulimits
명령 으로 한계를 설정할 수도 있습니다 .
많은 양의 메모리를 사용할 수있는 몇 가지 프로그램을 실행하고 있습니다. 당신이 볼 수있는 것들은 다음과 같습니다.
- 제대로 실행되지 않는 프로그래밍 된 응용 프로그램
apache2
은 메모리를 누수 할 수 있습니다. 이 경우 메모리 크기가 증가하는 것을 볼 수 있습니다. MaxRequestsPerChild
100 회 정도 설정 하면 apache2를 조정하여 특정 횟수만큼 사용한 후에 어린이를 재활용 할 수 있습니다 . 이렇게해도 문제가 해결되면 누출을 해결해야합니다. 나는 이것을 먼저 볼 것입니다.
- MySQL은 데이터를 메모리에로드하려고 할 수 있습니다. 메모리에 많은 데이터가있는 경우 약간의 스 래싱이 발생할 수 있지만 현재처럼 극적이지 않아야합니다.
- 큰
tmpfs
파일 시스템이 마운트 된 경우 파일을 사용할 때 파일이 삭제되지 않으면 메모리가 누출 될 수 있습니다. 오래 지속되는 파일도 문제가 될 수 있습니다.
- 대략 같은 시간에 문제가 발생하면 메모리가 누출되는 예정된 프로그램이있을 수 있습니다.
- 공유 메모리를 할당하는 프로그램이 있지만 종료하기 전에 해제하지 않으면 비교적 보이지 않는 메모리 누수가 발생합니다. 공유 메모리가 메모리에 잠겨 있으면 강제로 스와핑 될 수 있습니다. 사용 가능한 공유 메모리의 양은 일반적으로 상대적으로 제한됩니다.
- liquidsoap + icecast 번들은 메모리를 사용하는 버퍼링 문제를 일으킬 수 있습니다. 이 조합을 사용하지 않았으므로 이것이 어떻게 나타날지 잘 모르겠습니다.
일반적인 메모리 사용량 : 여유 메모리는 원하는 것이 아닙니다. 시스템이 오랫동안 켜져 있고 사용 가능한 메모리가 많은 경우 무언가 잘못되었습니다. 파일을 읽거나 쓸 때마다 블록은 버퍼 캐시로 이동합니다. 이렇게하면 사용 가능한 메모리가 줄어들고 좋은 것입니다. 시스템은 메모리를 다른 곳을 찾지 않고도 몇 개의 프로그램을 시작할 수있는 충분한 여유 공간을 유지합니다. 많은 프로그램이 빠르게 실행되면 실행이 중지되면 메모리가 사용 가능한 풀로 돌아갑니다.
버퍼 캐시에있는 파일을 읽을 때 디스크 액세스가 필요하지 않으며 버퍼 캐시에서 읽기가 해결됩니다. 쓰기도 비슷한 메커니즘을 사용합니다. 시스템에 메모리가 필요한 경우 버퍼 캐시는 가장 먼저 사용되는 장소 중 하나입니다. 대부분의 버퍼는 즉시 해제 될 수 있습니다.
메모리 누수가있는 경우 사용 가능한 메모리와 버퍼가 모두 축소되기 시작합니다. 누출 된 메모리를 결국 스왑 공간으로 이동해야하므로 여전히 심각한 문제는 아닙니다. 스왑 공간을 채우고 남은 여유 공간을 프로그램을 시작할 수 없을 때까지 시스템은 여전히 정상적으로 실행됩니다. 소량의 스왑 공간이 사용되는 것이 일반적입니다.