11.04에서을 /proc/[pid]
포함 oom_score_adj
하지만 man proc
이전을 설명합니다 oom_adj
. 이것을 사용하는 방법에 대한 정보를 얻지 못했습니다.
내가 준비해야 할 것은 'pbs'또는 'gridengine'으로 시작한 프로세스가 다른 것이 죽기 전에 종료된다는 것입니다. 어떻게해야합니까?
11.04에서을 /proc/[pid]
포함 oom_score_adj
하지만 man proc
이전을 설명합니다 oom_adj
. 이것을 사용하는 방법에 대한 정보를 얻지 못했습니다.
내가 준비해야 할 것은 'pbs'또는 'gridengine'으로 시작한 프로세스가 다른 것이 죽기 전에 종료된다는 것입니다. 어떻게해야합니까?
답변:
비슷한 질문에 대한 유닉스 및 리눅스에 대한 내 Q & A 를 기반으로 합니다.
Stuart가 그의 대답 에서 아주 잘 지적했듯이 유효한 값은 -1000에서 1000 사이의 정수입니다 oom_score_adj
. 값 이 낮을수록 사망 할 가능성이 줄어 듭니다.
응용 프로그램을 다시 시작한 후에이 값을 반복해서 변경해야하는 것은 매우 불편합니다. 프로세스가 종료 된 후에는 정보가 손실됩니다. Upstart (Ubuntu의 init 데몬)에는 데몬이 시작될 때마다 설정되도록 데몬을 구성 할 수있는 좋은 옵션이 있습니다.
[...] 저격 [...]
예:
# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app
따라서 기본적으로 /etc/init/myservice.conf
변경하려는 서비스 의 구성 파일을 편집하여 행을 포함시킬 수 있습니다 oom score -1000
. 귀하의 질문에서 말하는 'pbs'또는 'gridengine'서비스가 Upstart 가능 서비스라고 가정합니다. 그렇지 않으면 영구적으로 변경하는 다른 방법이 필요합니다.
oom_adj 또는 oom_score_adj에 대해 높은 (ish) 값을 설정하면 먼저 종료됩니다. 예 :
echo 15 > /proc/[pid]/oom_adj
oom_adj는 -16에서 15로갑니다. 위에서 언급했듯이 oom_score_adj는 -1000에서 1000을 허용합니다.
sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
코드를 조사하는 것은 항상 좋은 생각입니다. 일반적으로 kernel.org의 검색 기능을 사용하지만 현재는 작동하지 않습니다. Github도 잘 작동합니다. 나는 이것을 찾았다:
대신 -1000 ~ +1000 범위의 새로운 튜너 블 / proc / pid / oom_score_adj가 추가되었습니다. 휴리스틱을 극화하여 특정 작업은 oom kill으로 간주되지 않고 다른 작업은 항상 고려 될 수 있습니다. 값이 badness () 점수에 직접 추가되므로 예를 들어 -500의 값은 시스템의 CPU, 메모리 카드 또는 CPU의 다른 작업과 비교할 때 메모리 소비의 50 %를 할인하거나 동일한 메모리 컨트롤러를 공유합니다.