하나 또는 몇 개의 중요한 시스템 서비스 데몬을 사용하여 일부 Linux 서버를 실행할 때 이상한 일이 발생할 경우를 대비하여 이러한 데몬에 대한 OOM 킬러를 조정하고 싶습니다. 예를 들어, 오늘날 MySQL을 실행하는 일부 Ubuntu 서버는 apt-checker
MySQL 데몬의 많은 프로세스로 인해 종료되었습니다.예모든 메모리가 소모되고 커널은 MySQL을 종료하는 것이 좋은 생각이라고 생각합니다.
나는 파일을 사용하여 점수를 조정하여 /proc/$(pidof mysqld)/oom_score_adj
MySQL이 종료되는 것을 원하지 않는다는 단서를 커널에 제공할 수 있다는 것을 알고 있지만 이는 서비스를 다시 시작해도 유지되지 않습니다. 이러한 조정 사항을 포함하려면 패키지의 init/upstart 스크립트를 편집해야 합니까? 나는 패키지에 속한 파일을 조정하기 때문에 이것이 매우 우아한 해결책이라고 생각하지 않습니다. 일반 upstart/init 스크립트에 연결하여 조건에 따라 조정할 수 있습니까? 아니면 다음과 같이 정의되지 않은 스크립트를 실행하는 것을 제안하시겠습니까 while true{ adjust_oom(); sleep 60;}
?
답변1
일부 최신 데몬 모니터링 시스템에는 이를 수행하는 방법이 있습니다. (실제로 해당 작업을 수행하는 체인 로딩 도구가 있기 때문에모두이를 수행하는 방법이 있습니다. )
- 갑자기 나타나다:
oom score
작업 파일에 사용됩니다.옴 점수-500
- 체계:
OOMScoreAdjust=
서비스 단위의 설정을 사용하십시오 . 서비스 단위 패치 파일을 사용하여 사전 패키지된 서비스 단위에 영향을 줄 수 있습니다.[서비스]
OOMScoreAdjust=-500 - 데몬 도구 계열:
oom-kill-protect
서비스 프로그램에 있는 nosh 도구 세트의 도구를 사용하세요 .run
시스템 서비스 단위를 변환하는 경우
convert-systemd-units
도구는 실제로OOMScoreAdjust=
설정을 다음과 같은 호출로 변환합니다oom-kill-protect
.#!/bin/nosh
보너스로 매개변수화할 수 있습니다.
…
oom-kill-protect -- -500
…
프로그램 논쟁oom-kill-protect——fromenv
그리고 서비스 환경에서 매개변수의 값을 설정합니다(서비스와 관련된 envdir에서 읽는다고 가정하고 여기서는rcctl
nosh 도구 세트의 shim을 사용하여 작동합니다).RCTL 세트서비스 이름옴보호-500
추가 읽기
- 조나단 데보인 폴라드(2016).
oom-kill-protect
. Nosh 툴셋. 소프트웨어. - 제임스 헌트와 클린트 바이럼(2014). "
oom score
". 누보 리치 요리법. - 레나트 페틀링(2013-10-07). "
OOMScoreAdjust
"systemd.exec
..systemd 매뉴얼 페이지. freedesktop.org. - 조나단 드 보인 폴라드.
rcctl
. Nosh 툴셋. 소프트웨어. - https://unix.stackexchange.com/a/409454/5132
답변2
이는 Upstart 및 구성 옵션을 사용하여 Ubuntu에서 가능합니다 oom score
.
Linux에는 "메모리 부족" 킬러 도구가 있습니다. [...]
일반적으로 OOM 킬러는 모든 프로세스를 동일하게 처리하지만 이 섹션에서는 커널이 이 작업을 다르게 처리할 것을 권장합니다.
이 섹션에 제공되는 "tweak" 값은 -999(OOM 킬러에 의해 종료될 가능성이 매우 낮음)에서 1000(OOM 킬러에 의해 종료될 가능성이 매우 높음) 사이의 정수 값일 수 있습니다. [...]
예:
# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app
답변3
MySQL 자체를 해킹할 수 있지만(예를 들어 OpenSSH가 sshd
이 작업을 수행함) 너무 하드코어하고 지저분합니다(업데이트 문제 등).
래퍼나 초기화 스크립트에서 이 작업을 수행할 수 있습니다. 점수는 상속되어야 합니다(어쨌든 래퍼에서는 이를 수행하고 싶을 수도 있습니다 exec mysqld "$@"
).
사용 cgroups
- 서비스를 다시 시작할 때 적절한 설정이 자동으로 적용될 수 있다는 점에서 더 많은 유연성을 제공하고 영구적으로 유지합니다. 예를 들어 참조하십시오.cgroup을 사용하여 애플리케이션 우선순위 제어더 많은 정보를 알고 싶습니다. 원하는 자동화를 달성하려면 다음을 살펴보세요.libc 그룹에는 cgroup의 규칙 집합을 기반으로 실행 중인 프로세스의 변경 사항을 동적으로 처리하거나 래퍼 cgexec
(동일 패키지의)를 사용할 수 있는 데몬이 포함되어 있습니다.