무언가가 모든 메모리를 소비합니다 (일부 앱에서 메모리 누수가 의심됩니다). 무엇을 감지하는 방법? 새로운 시작이없고 새로운 사용자가

liquidsoap + icecast 번들과 간단한 웹 사이트 (httpd + mysqld)를 실행하는 서버가 있습니다. 특별한 것은 없습니다. 방문자는 하루에 약 2000 명 이상이며 평균 50 명 정도가 동시에 온라인 상태입니다.

서버에는 8GB RAM이 있습니다. 시간이 지남에 따라 서버에서 새로운 시작이없고 새로운 사용자가 없지만 사용 가능한 메모리 양이 지속적으로 줄어 듭니다. 어느 시점에서 스왑이 시작되고 서버의로드가 증가하여 응답하지 않습니다. 일반적으로 서버를 다시 시작하면됩니다.

정확히 메모리 누수를 감지하려면 어떻게해야합니까? top을 사용하여 리소스 사용을 모니터링하지만 도움이되는 것은 없습니다.

여기에 이미지 설명을 입력하십시오

많은 메모리를 사용하는 방법을 찾을 수있는 방법이 있습니까? 또는 무엇이 디스크로 심하게 교환되기 시작합니까? 서버를 재부팅하지 않고 메모리를 확보 할 수있는 방법이 있습니까?



답변

top배치 모드에서 실행 하여 메모리 크기를 주기적으로보고하면 남은 메모리를 누가 사용하는지 확인할 수 있습니다. 들이받은 sar배치 모드에서 것은 메모리 사용 및 관련 I / O에 좋은 진단을 제공해야합니다. munin시스템을 모니터링하기 위해 실행 하면 사용중인 메모리에 대한 세부 정보가있는 그래프가 제공됩니다. 이것은 많은 도움이 될 수 있습니다.

limits.conf를 사용하여 프로그램의 최대 코어 크기를 제한 할 수 있습니다. 올바르게 설정하면 메모리가 누출되는 모든 프로그램이 종료됩니다. 이것은 pam_limits 모듈과 함께 작동합니다. ulimits명령 으로 한계를 설정할 수도 있습니다 .

많은 양의 메모리를 사용할 수있는 몇 가지 프로그램을 실행하고 있습니다. 당신이 볼 수있는 것들은 다음과 같습니다.

  • 제대로 실행되지 않는 프로그래밍 된 응용 프로그램 apache2은 메모리를 누수 할 수 있습니다. 이 경우 메모리 크기가 증가하는 것을 볼 수 있습니다. MaxRequestsPerChild100 회 정도 설정 하면 apache2를 조정하여 특정 횟수만큼 사용한 후에 어린이를 재활용 할 수 있습니다 . 이렇게해도 문제가 해결되면 누출을 해결해야합니다. 나는 이것을 먼저 볼 것입니다.
  • MySQL은 데이터를 메모리에로드하려고 할 수 있습니다. 메모리에 많은 데이터가있는 경우 약간의 스 래싱이 발생할 수 있지만 현재처럼 극적이지 않아야합니다.
  • tmpfs파일 시스템이 마운트 된 경우 파일을 사용할 때 파일이 삭제되지 않으면 메모리가 누출 될 수 있습니다. 오래 지속되는 파일도 문제가 될 수 있습니다.
  • 대략 같은 시간에 문제가 발생하면 메모리가 누출되는 예정된 프로그램이있을 수 있습니다.
  • 공유 메모리를 할당하는 프로그램이 있지만 종료하기 전에 해제하지 않으면 비교적 보이지 않는 메모리 누수가 발생합니다. 공유 메모리가 메모리에 잠겨 있으면 강제로 스와핑 될 수 있습니다. 사용 가능한 공유 메모리의 양은 일반적으로 상대적으로 제한됩니다.
  • liquidsoap + icecast 번들은 메모리를 사용하는 버퍼링 문제를 일으킬 수 있습니다. 이 조합을 사용하지 않았으므로 이것이 어떻게 나타날지 잘 모르겠습니다.

일반적인 메모리 사용량 : 여유 메모리는 원하는 것이 아닙니다. 시스템이 오랫동안 켜져 있고 사용 가능한 메모리가 많은 경우 무언가 잘못되었습니다. 파일을 읽거나 쓸 때마다 블록은 버퍼 캐시로 이동합니다. 이렇게하면 사용 가능한 메모리가 줄어들고 좋은 것입니다. 시스템은 메모리를 다른 곳을 찾지 않고도 몇 개의 프로그램을 시작할 수있는 충분한 여유 공간을 유지합니다. 많은 프로그램이 빠르게 실행되면 실행이 중지되면 메모리가 사용 가능한 풀로 돌아갑니다.

버퍼 캐시에있는 파일을 읽을 때 디스크 액세스가 필요하지 않으며 버퍼 캐시에서 읽기가 해결됩니다. 쓰기도 비슷한 메커니즘을 사용합니다. 시스템에 메모리가 필요한 경우 버퍼 캐시는 가장 먼저 사용되는 장소 중 하나입니다. 대부분의 버퍼는 즉시 해제 될 수 있습니다.

메모리 누수가있는 경우 사용 가능한 메모리와 버퍼가 모두 축소되기 시작합니다. 누출 된 메모리를 결국 스왑 공간으로 이동해야하므로 여전히 심각한 문제는 아닙니다. 스왑 공간을 채우고 남은 여유 공간을 프로그램을 시작할 수 없을 때까지 시스템은 여전히 ​​정상적으로 실행됩니다. 소량의 스왑 공간이 사용되는 것이 일반적입니다.


답변

이 명령을 사용하여 RAM 사용과 관련된 상위 10 개 응용 프로그램을 볼 수 있습니다.

ps -A --sort -rss -o comm,pmem | head -n 11

많은 하위 프로세스가 생성 된 경우이 명령이 도움이되는 경우가 있습니다.

ps auxf

이렇게하면 어떤 프로세스가 함께 속하는지 알 수 있습니다.


답변

실제로 응용 프로그램 측면에서 해당 메모리를 사용하는 것은 없습니다.

실제 메모리 사용량이 프로그램 사용량과 관련하여 더 나은 아이디어를 얻으려면 페이지 캐시를 나타내는 ‘캐시 된’값을 공제해야합니다.

기본적으로 이것은 좋은 메모리 관리이며 이상적으로는 원하는 것입니다.

자세한 정보는 여기 링크를 참조하십시오 : http://www.linuxatemyram.com/


답변

나는 이것에 대한 전문가는 아니지만 액체 비누 + 아이스 캐스트는 멀티미디어와 관련이 있습니다. 시스템이 사용 가능 해지면 나중에 사용하기 위해 메모리를 캐시 및 / 또는 점유합니다. 하루 중 특정 시간에 또는 일정 기간 동안 트래픽이 증가하면 스왑이 시작됩니다. 이 시점에서 요청 (콘텐츠를 보는 사용자)이 증가하면 필요한 리소스는 8GB 이상의 램이됩니다.