명령을 실행하면 Ubuntu 서버에서 “메모리를 할당 할 수 없습니다”가 반환됩니다 가진 사용자로 SSH를

우분투 14.04를 사용하고 있습니다. 최근에 sudo 권한을 가진 사용자로 SSH를 통해 로그인하면 실행하는 모든 명령에 “메모리를 할당 할 수 없음”오류가 발생합니다. 여기 내 콘솔에서 시도한 몇 가지가 있습니다.

myuser@mymachine:~$ whoami
-bash: fork: Cannot allocate memory
myuser@mymachine:~$ uname -a
-bash: fork: Cannot allocate memory

sudo reboot now위의 오류가 발생 하더라도 인스턴스 잠금을 해제 할 수있는 방법이 무엇인지 모르겠습니다. 중요한 경우 호스트는 DigitalOcean입니다.

편집 : 여기에 주어진 답변 / 제안에 따라 “무료”의 출력입니다

myuser@mymachine:~$ free
-bash: fork: Cannot allocate memory


답변

해결책

오류 메시지에 표시된 것처럼 컴퓨터의 메모리가 부족합니다. 여러 가지 이유가있을 수 있지만 기본적으로 무언가가 모든 메모리를 차지하고 기본 명령 사용을 위해 남겨 두지 않습니다.

액 적을 재부팅 (클라이언트 제어판으로 이동하여 “재부팅”선택) ssh한 다음 top또는 을 실행하는 것이 htop좋습니다. 메모리 사용량을 주시하고 모든 메모리를 사용하는 프로세스를 확인하십시오. 거기에서 시도해보십시오

  1. 결함이있는 프로그램 / 프로세스 종료 / 제거

    경고 : 프로세스가 필수 시스템 프로세스인지 먼저 조사 하십시오 ! 시스템 프로세스로 인해 메모리 문제가 발생하는 경우 해당 프로세스를 중지하고 연구하지 말고 처리하는 구체적인 방법을 찾으십시오.

  2. 모든 메모리를 차지하지 않도록 해당 프로그램 / 프로세스의 구성을 변경하십시오.

문제가 다시 발생하지 않도록하기위한 제안

  • 스왑 메모리추가 하는 것이 좋습니다. 메모리가 부족하면 더 많은 메모리를 할당하기 때문입니다.
  • 프로그램을 설치할 때마다 의도하지 않은 방식으로 메모리가 소모되지 않도록 프로그램을 올바르게 구성하십시오.
  • 패키지를 추가하거나 기본적으로 새 항목을 구성 할 때마다 htop또는 top현재 프로그램에서 사용중인 메모리 양을 확인 하거나 확인 하십시오. 거의 모든 것을 사용하고 있다면 불필요한 프로그램 / 프로세스를 제거하고 제거하여 일부를 제거하십시오.
  • 시스템 프로세스 이외에도 자동으로 시작되는 항목이 있거나 자동으로 시작하지 않으려면 제거하십시오! 그러나 부팅 절차 나 시스템 기능 등에 필수적 일 수 있으므로 프로세스를 종료 / 삭제하기 전에 프로세스가 무엇인지 조사하십시오.

답변

재부팅하지 않고이 상태에서 벗어나려면 다음과 같이 OOM 킬러를 수동으로 트리거 할 수 있습니다 .

echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger
echo 0 > /proc/sys/kernel/sysrq

참고


답변

허용 된 답변을 완료하기 위해 고려해야 할 한 가지 추가 사항이 있습니다. 시스템에 파일 핸들 또는 소켓 버퍼 가 부족하고 여전히 동일한 오류가 발생하는 동안 많은 메모리가있을 수 있습니다. 공유 호스팅이 이러한 특성의 제한을 부과하는 경우 특히 그렇습니다. OpenVZ 시스템에서

# cat / proc / user_beancounters

이렇게하면 맨 오른쪽 열에 첫 번째 오버런이 발생합니다. 이것이 사실이라면, 더 큰 호스팅 패키지로 이동하거나 가장 가능성있는 범인을 찾아 내십시오. mysql 또는 mariadb 데이터베이스는 결함이있는 PHP 앱이있을 경우 파일 핸들을 초당 수백 개까지 누수 할 수 있습니다.

웹 서버가 인터넷에 ssh를 열고 사용자 이름 / 비밀번호 로그인을 허용하는 경우에도 발생할 수 있습니다. fail2ban을 실행하더라도 분산 리소스 사전을 사용하여 많은 리소스를 소비 할 수 있습니다.