
저는 Ubuntu 12.04를 실행하고 있는데 큰 문제가 있습니다. 오늘 두 번이나 열려 있는 그놈 터미널 세션 중 하나가 잠겨 오류가 인쇄되었습니다.
pipe: too many open files
ulimit -n
나는 이것이 1024인 내 사용자 제한과 관련이 있을 수 있다는 것을 알고 있습니다. 문제는 이 일이 발생하면 문제가 있는 터미널을 강제로 종료할 수 있지만 새 PID를 생성하는 항목을 열 수 없다는 것입니다. 예를 들어, 아무것도 죽이는 데 사용할 수 없고 xkill
, 다른 터미널을 열어서 상단을 볼 수도 없고, 종료를 실행할 수도 없고, 콘솔에만 드롭하여 로그인할 수도 없습니다. X 창을 열어야 하는 링크를 클릭하면 다음과 같은 새 창이 나타납니다.
There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)
이는 Ctrl+Alt+F1을 누른 후 로그인을 시도할 때 발생하는 것과 동일한 오류입니다. 이 시점에서 완전히 멈췄기 때문에 강제로 컴퓨터를 하드부팅해야 합니다. 이로 인해 디버깅이 매우 어려워졌습니다.
이 오류가 발생하면 복구할 수 있는 방법이 있나요? 오류를 추적하려면 어떻게 해야 합니까?
마지막으로, 저는 엄청나게 많은 일을 실행하지 않았습니다. 두 개의 터미널, 하나는 2개의 탭이 있는 byobu 세션, 다른 하나는 Python 세션; Emacs의 단일 인스턴스, 단일 Google Chrome 및 여러 ROS(로봇 운영 체제) 노드.
편집하다
Ctrl+Alt+백스페이스를 눌러 디스플레이 관리자를 다시 시작하면 다시 로그인하여 터미널을 열 수 있었습니다. 사용하면 ps
잠금이 발생한 상태에서 실행 중이던 프로세스가 여전히 많이 실행되고 있는 것으로 나타났습니다. 최소한 이를 통해 소프트웨어에서 컴퓨터를 재부팅할 수 있습니다. 이 문제의 원인을 확인하려면 어떻게 해야 합니까?
편집 2
방금 옆에 두었던 두 개의 터미널을 열고 충돌이 일어나기를 기다렸습니다. 그런 일이 발생하자 top
. 출력물이 특히 유용할지는 모르겠지만 첨부했습니다. 제가 유일하게 발견한 이상한 점은 5개의 좀비 프로세스가 있다는 것이었습니다.
답변1
어딘가에서 리소스 누출이 발생한 것으로 보입니다. 'lsof'를 실행하면 열려 있는 모든 파일 목록을 얻을 수 있습니다(분명히 시스템이 중단되기 전 어느 시점에). 목록을 활성 PID와 비교하면 (아마도) 범인을 찾을 수 있습니다.
또한 /etc/security/limits.conf(또는 다른 곳에서)에서 열린 파일 제한을 변경하는 것이 좋습니다. 한동안 Ubuntu를 따르지 않았으며 제한이 로드되지 않는다는 추측이 있는 것 같습니다. 기본). 실제로 리소스 누출이 있는 경우 문제가 길어질 뿐입니다. 먼저 누출을 찾아보세요.
답변2
열린 파일이 너무 많다는 메시지는 시스템 전체의 문제가 아니라 프로세스별로 발생하는 문제일 수 있습니다. "메모리를 할당할 수 없습니다"는 프로세스별로 다를 수 있지만 아마도 시스템 전체에 해당할 수 있습니다.
cydonian.monk가 지적했듯이 일종의 리소스 누출이 있습니다. 가장 가능성이 높은 원인은 자식을 반복적으로 생성하거나 파일을 반복적으로 열거나 시스템에 메모리가 부족해지는 지점까지 메모리를 할당하는 버그 또는 메모리 누수가 있는 폭주 또는 오작동 프로세스입니다.
나는 당신이 너무 많은 파일을 열었다는 메시지를 처음으로 받은 하나의 gnome 터미널 창에서 무엇을 하고 있었는지에 집중할 것입니다. 해당 창에서/그 창에서 무엇이 실행 중인지 확인하고 해당 창의 동작에 집중하세요. ps is cron을 몇 분마다 실행하거나 실행 top -b
하고 출력을 파일에 저장하면 다음 충돌이 발생할 때 무슨 일이 있었는지 엿볼 수 있습니다.
제공한 상단 출력은 정상적으로 실행되는 시스템처럼 보입니다.
답변3
파일 수의 상한을 늘려 보셨나요?
당신이 해야 할 일은 다음 줄을 /etc/security/limits.conf에 추가하는 것입니다.
* soft nofile 6000
* hard nofile 6000