Linux가 내 프로세스를 종료했는지 여부와 이유를 어떻게 알 수 있나요?

Linux가 내 프로세스를 종료했는지 여부와 이유를 어떻게 알 수 있나요?

저는 Amazon의 Linux 배포판(4.4.11-23.53.amzn1.x86_64) 중 하나에서 개발 중입니다. (1GB RAM) 이 인스턴스에서는
영원히 모듈을 사용하여 node.js를 실행하고 있습니다. (충돌 발생 시 Node.js 프로세스가 다시 시작되도록 보장합니다.)
내 경험으로는
웹 서버가 약 2-3시간 동안 작동한 다음 프로세스가 사라집니다. 웹 서버를 실행하기 전에는 약 70% 정도의 메모리를 점유하고 있으며, 이후에는 약 80% 정도의 메모리를 점유하고 있습니다.
/var/log의 모든 파일을 살펴봤지만 종료된 프로세스와 관련된 내용은 아무것도 발견되지 않았습니다. 또한 내 노드 서버의 모든 출력을 기록했지만 거기에서도 결과를 얻지 못했습니다.
나는 메모리 부족으로 인해 Linux가 내 프로세스를 종료했다고 가정하지만 다시 확인하는 방법을 모르겠습니다. 그리고 시간이 지나도 웹 애플리케이션 메모리 사용량이 증가하지 않는데 왜 메모리 사용량이 증가하는지 잘 모르겠습니다.

답변1

프로세스가 종료된 이유를 알아내려면 상위 프로세스를 인쇄하세요.종료 상태. 종료 상태는 프로그램이 신호로 인해 프로세스를 종료했는지 여부를 나타내며 8비트 종료 코드를 포함합니다. 8자리 종료 코드는 일반적으로 성공의 경우 0이고 오류의 경우 1..125입니다.

C/Perl/… 프로그램에서는 전체 종료 상태를 쿼리할 수 있습니다. 해당 언어 라이브러리의 설명서를 참조하세요. 쉘 스크립트에서는 신호 정보를 포함한 종료 상태가 8비트 값으로 압축되어 있으며 신호는 128+ 값으로 보고됩니다.N어디N신호번호입니다.

#!/bin/sh
myprogram
ret=$?
if [ $ret -eq 0 ]; then
  echo "The program exited normally";;
elif [ $ret -gt 128 ]; then
  echo "The program died of signal $((ret-128)): $(kill -l $ret)"
else
  echo "The program failed with status $ret"
fi

시스템 메모리 부족으로 인해 Linux가 프로그램을 종료하면 이는 시스템 로그, 특히 명령과 함께 표시될 수 있는 커널 로그에 기록되며 dmesg일반적으로 다음 파일에 기록됩니다 /var/log(어떤 파일인지는 모르겠습니다). ) Amazon 배포판에서는 파일 이름을 사용합니다).

아니요생각하다프로세스에 메모리가 부족하여 종료되었습니다. 무슨 일이 일어나고 있는지 확인하세요. 가장 합리적인 설명은 프로그램에 버그가 있어서 충돌이 발생했다는 것입니다.

관련 정보