แ แแแแกแแช แแแแแชแแแแ แแแแแก แกแแ แแแ แ แแแฃแแแแแแแแ แฉแแ แแแแ Linux-แจแ, แแฅแแแ แฃแแแ แแแแแแ แแแแแแ. แจแแแซแแแแ แ แแแแแแแแ แแแแแแ แแงแแก. แฒแแแแแแแแ, SIGSEGV โ แฌแแ แฃแแแขแแแแแแ Backend แกแแ แแแ แแ แแ แกแแแฃแแ แจแแชแแแแแก แแแแ. แแแแ แแ แแก แแจแแแแแแ. แงแแแแแแ แฎแจแแ แแ, แแฅแแแ แฃแแ แแแแ แแแแแแฌแฃแ แแแแ แแแกแแแก แแแแแแ แแ แแแฎแกแแแ แแแ. แแฃ แแแกแแแ แกแแแ แชแ แแแแแแฌแฃแ แแแแ, แแแแแกแแแแแ แแฎแแแแ แแ แแแ - แแแแแแแแกแฃแคแแแ แกแแแ แชแ แแ แแแแแขแแแ แแแ แแแแแชแแแแ แแแแ.
แแแฎแกแแแ แแแแก แแแ แแจแ แแแแแแแ
แ แแแแกแแช แกแแ แแแ แก แแ แแ แแชแแกแก แแแฎแกแแแ แแแ แแแแแฌแฃแ แแแ, Linux แแแแแแแแแ 2 แแแแแฌแงแแแขแแแแแแก: แแแแ แแ แแแแแ แกแแกแขแแแแก แแ แแ แแชแแกแแก (แแแแแแแชแแแก) แจแแฌแงแแแขแ, แ แแแแแแช แญแแแก แแแฎแกแแแ แแแแก. แฃแแฏแแแแกแแ, แ แ แแฅแแ แฃแแแ, แจแแฌแงแแแขแแ แแ แแชแแกแ แแ แแแแแแแ แฉแแแแ OS แแแแ แแแกแแแ. แแแแแแ, Out-Of-Memory Killer แแ แแก แแ แแชแแกแ, แ แแแแแแช แแแแแก แแแแแแแชแแแก แแแ แแแแก แแแแ แแแกแแแ แแแแแกแแ แฉแแแแ. แแก แกแฌแแ แแแก แแแแแแแชแแแก แแแแ แแชแแฃแแ แกแแกแขแแแแก แจแแกแแแแ แฉแฃแแแแแแ. แแแแแ แฏแแ แแแแแแฎแแแแ, แแฃ แ แแแแ แแฃแจแแแแก OOM แแ แ แแแแ แแแแแแแแขแ แแแแ แแแ, แจแแแแแ แแ แแแแฎแแ, แ แแแแ แแแแแฌแงแแแขแก OOM Killer แ แแแแแ แแแแแแแชแแ แจแแฌแงแแแขแแก.
Linux-แแก แแ แ-แแ แแ แแแแแแ แ แแแแชแแแแ แแ แแชแแกแแแแกแแแแก แแแฎแกแแแ แแแแก แแแแแงแแคแ, แ แแแแกแแช แแกแแแ แแแแก แแแฎแแแแ. แ แแแแ แช แฌแแกแ, แแ แแชแแกแ แแ แแแแแแแชแแ แแแฎแแแก แแแฎแกแแแ แแแแก OS-แแแ, แแแแ แแ แกแ แฃแแแ แแ แแงแแแแแก แแแก. แแฃ OS แแซแแแแก แแแฎแกแแแ แแแแก แงแแแแแก, แแแแช แแแแก แแแฎแแแก, แแแแ แแ แแ แแแแ แแแก แแแก แแแแแงแแแแแแก, แซแแแแแ แแแแ แแแฎแกแแแ แแแ แแแแแฌแฃแ แแแ แแ แกแแกแขแแแ แแแ แชแฎแแแแ. แแแแก แแแแแแแ แแกแแชแแแแแแแ, OS แแขแแแแแก แแแฎแกแแแ แแแแก แแ แแชแแกแแกแแแแก, แแแแ แแ แ แแแแฃแ แแ แแ แแแแแแกแฃแคแแแแก แแแก. แแแฎแกแแแ แแแ แแแแแแงแแคแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แแ แแชแแกแ แ แแแแฃแ แแ แแแแ แแแก แแแก แแแแแงแแแแแแก. แฎแแแแ แแกแ, แ แแ OS-แก แแ แแฅแแก แแแแแกแฃแคแแแ แแแฎแกแแแ แแแ, แแแแ แแ แแแแญแแแก แแแฎแกแแแ แแแแก แแ แแชแแกแก แแ แ แแชแ แแ แแชแแกแก แแก แกแญแแ แแแแ, OS แแแแแงแแคแก แแแก แแฃ แจแแฃแซแแแ. แแแแฃแกแ แแก แแ แแก, แ แแ แแแแฏแแ OS แแขแแแแแก แแแฎแกแแแ แแแแก, แแแแ แแ แกแแญแแ แ แแ แแก แแ แแ แแก แแแแแกแฃแคแแแ แแแฎแกแแแ แแแ แแ แกแแกแขแแแ แแจแแแแ. OOM แแแแจแแแแแแแแ แ แแแก แแกแ แฃแแแแก แแ แกแชแแแแ แจแ แแ แฌแงแแแขแก แแ แแชแแกแแแก, แ แแแ แแแแแแแ แแแชแแแแก แแแ แแแ แแแแแแแกแแแ. แ แแแแกแแช PostgreSQL แแ แแชแแกแ แแซแฃแแแแฃแแแ แจแแฌแงแแแก, แจแแขแงแแแแแแแ แแแแแฉแแแแแ แแฃแ แแแแจแ:
Out of Memory: Killed process 12345 (postgres).
แแฃ แกแแกแขแแแ แแแแแ แแแฎแกแแแ แแแแจแแ แแ แแแกแ แแแแแแแแกแฃแคแแแแ แจแแฃแซแแแแแแแ, แคแฃแแฅแชแแ แแแแแแซแแฎแแแ out_of_memory
. แแ แแขแแแแ แแแก แแฎแแแแ แแ แแ แกแแฅแแ แ แฉแแแ - แแแแกแ แฃแแแก แแ แแ แแ แแแขแ แแ แแชแแกแ. แฃแแแ แจแแฌแงแแแขแแก แแฃ แแ แ OOM-แแแแแแแแ แแ แแชแแกแ แแแฃแงแแแแแแแแ แแฃ แจแแแซแแแแ แแแแแแแแก? แชแฎแแแแ, แ แแแแกแแช out_of_memory แแแแแซแแฎแแแฃแแแ, แแก แแแแแฌแแแฃแแแ I/O แแแแ แแชแแแก แแแแแแแแแก แแ แแแกแแแ แแแแฏแแแแแก แแแแ. แแแแขแแ, OOM แแแแแแแแ แฏแแ แฃแแแ แจแแแกแ แฃแแแก แจแแแแฌแแแแแแ แแ แแแแแ แแแงแ แแแแแแ แแแแแฌแงแแแขแแก, แ แแ แแ แแชแแกแ แฃแแแ แจแแฌแงแแแก. แแฃ แฅแแแแแ แแแงแแแแแแ แงแแแแ แจแแแแฌแแแแ แแแแแแแแแ, OOM แจแแฌแงแแแขแก แแ แแชแแกแก.
แแ แแชแแกแแก แจแแ แฉแแแ
แ แแแแกแแช แแแฎแกแแแ แแแ แแแแแฌแฃแ แแแ, แคแฃแแฅแชแแ แแแแแแซแแฎแแแ out_of_memory()
. แแฅแแก แคแฃแแฅแชแแ select_bad_process()
, แ แแแแแแช แแฆแแแก แจแแคแแกแแแแก แคแฃแแฅแชแแแแแ badness()
. "แงแแแแแแ แชแฃแแ" แแ แแชแแกแ แแฅแแแแ แแแแแแแแแแ แแฃแแ. แคแฃแแฅแชแแ badness()
แแ แฉแแแก แแ แแชแแกแก แแแ แแแแฃแแ แฌแแกแแแแก แแแฎแแแแแ.
- แแแ แแแก แกแญแแ แแแแ แแแ แแแแฃแแ แแแแแแแแฃแ แ แแแฎแกแแแ แแแ แแแแแกแแแแก.
- แแฅแแแ แฃแแแ แแแแแแแแกแฃแคแแแ แแแแ แ แแแฎแกแแแ แแแ.
- แแ แแ แแก แกแแญแแ แ แแ แแชแแกแแแแก แจแแฌแงแแแขแ, แ แแแแแแแช แแชแแ แ แแแฎแกแแแ แแแแก แแงแแแแแแ.
- แแแแแแแแฃแ แ แแ แแชแแแฃแ แแแ แฃแแแ แแแกแ แฃแแแแก.
- แ แแฃแแ แแแแแ แแแแแแ, แ แแแแแแแช แแ แแแก แแ แแ แแชแแกแแแแก แแแกแ แฃแแแแแก แจแแแกแแแก, แ แแแแแแ แจแแกแ แฃแแแแแช แแแแแ แแแแฎแแแ แแแแแก แกแฃแ แก.
แงแแแแ แแ แจแแแแฌแแแแแก แแแกแ แฃแแแแแก แจแแแแแ, OOM แแแแแแแก แฅแฃแแแก (oom_score
). OOM แแแแญแแแก oom_score
แแแแแแฃแ แแ แแชแแกแก แแ แจแแแแแ แแแ แแแแแแก แแ แแแแจแแแแแแแแก แแแฎแกแแแ แแแแก แ แแแแแแแแแแ. แฃแคแ แ แแแแ แแแแจแแแแแแแแก แแฅแแแ แแ แแชแแกแแแ แฃแคแ แ แแแขแแ แแแฎแแแแแแ OOM Killer-แแก แแกแฎแแแ แแแ. Root แแแแฎแแแ แแแแแแแ แแแแแแจแแ แแแฃแ แแ แแชแแกแแแก แฃแคแ แ แแแแแแ แฅแฃแแ แแฅแแก แแ แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแซแฃแแแแฃแแ แแแฎแแแแ แจแแฌแงแแแก.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)
Postgres แแ แแชแแกแแก ID แแ แแก 3813, แแกแ แ แแ, แกแฎแแ แแแ แกแจแ แจแแกแแซแแแแแแแ แฅแฃแแแก แแแฆแแแ แแ แแแ แแแแก แแแ แแแแขแ แแก แแแแแงแแแแแแ. oom_score
:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2
แแฃ แแ แแกแฃแ แ OOM-Killer-แแ แแ แแชแแกแ แกแแแ แแแ แแแแแแแแฃแ แแก, แแ แกแแแแแก แแแ แแแแก แแแแแ แแ แแ แแแ แแแแขแ: oom_score_adj
. แแแแแแขแแ แแแแ แฃแแ แงแแคแแแ แแแแจแแแแแแแ, แ แแแ แจแแแแชแแ แแ แแฅแแแแ แฆแแ แแแฃแแ แแ แแชแแกแแก แแแกแ แฃแแแแแก แจแแแกแแแ.
sudo echo -100 > /proc/3813/oom_score_adj
แแแแจแแแแแแแแก แแแกแแงแแแแแแแ oom_score_adj
, แแแแงแแแแ OOMScore Adjust แกแแ แแแกแแก แแแแแจแ:
[Service]
OOMScoreAdjust=-1000
แแ แแแแแแงแแแแ oomprotect
แแฃแแแจแ rcctl
.
rcctl set <i>servicename</i> oomprotect -1000
แแ แแชแแกแแก แแซแฃแแแแแ แจแแฌแงแแแขแ
แ แแแแกแแช แแ แแ แแ แแแขแ แแ แแชแแกแ แฃแแแ แแ แฉแแฃแแแ, OOM-Killer แแซแแฎแแแก แคแฃแแฅแชแแแก oom_kill_task()
. แแก แคแฃแแฅแชแแ แแแแแแแแก แแ แแชแแกแแก แแแกแ แฃแแแแแก แกแแแแแแก. แแแฎแกแแแ แแแแก แแแคแแชแแขแแก แจแแแแฎแแแแแจแ oom_kill()
แฃแฌแแแแแก แแ แคแฃแแฅแชแแแก แแ แแชแแกแแ SIGKILL แกแแแแแแแก แแแกแแแแแแแแ. แจแแขแงแแแแแแแ แแฌแแ แแแ แแแ แแแแก แแฃแ แแแแจแ.
Out of Memory: Killed process [pid] [name].
แ แแแแ แแแแแแขแ แแแแ OOM-Killer
Linux-แแ แจแแแแซแแแแ แฉแแ แแแ แแ แแแแแ แแแ OOM-Killer (แแฃแแชแ แแก แฃแแแแแกแแแแแ แแ แแ แแก แ แแแแแแแแแแฃแแ). แฉแแ แแแแก แแ แแแแแ แแแแกแแแแก แแแแแแงแแแแ แแแ แแแแขแ แ vm.oom-kill
. แแแแกแแแแแก, แ แแ แฉแแ แแแ OOM-Killer แแแจแแแแแก แแ แแก, แแแฃแจแแแ แแ แซแแแแแ sysctl
.
sudo -s sysctl -w vm.oom-kill = 1
OOM-Killer-แแก แแแแแ แแแแกแแแแก, แแแแแ แแ แซแแแแแแจแ แแแฃแแแแแ แแแแจแแแแแแแ 0:
sudo -s sysctl -w vm.oom-kill = 0
แแ แแ แซแแแแแแก แจแแแแแ แกแแแฃแแแแแ แแ แจแแแแแฎแแแ, แแแแ แแ แแฎแแแแ แแแ แแแ แแแแแขแแแ แแแแแแ. แแฃ แแแขแ แแแแซแแแแแ แแญแแ แแแแแ, แแแแแแขแแ แแก แฎแแแ แคแแแแก /etc/sysctl.conf
:
echo vm.oom-kill = 1 >>/etc/sysctl.conf
แฉแแ แแแแกแ แแ แแแแแ แแแแก แแแแแ แแ แแ แแแแ แชแแแแแแก แฉแแฌแแ แ panic_on_oom
. แแแแจแแแแแแแแก แจแแแแฌแแแแ แงแแแแแแแแก แจแแกแแซแแแแแแแ /proc
.
$ cat /proc/sys/vm/panic_on_oom
0
แแฃ แแแแจแแแแแแแแก แแแแงแแแแแ 0-แแ, แแแจแแ แ แแชแ แแแฎแกแแแ แแแ แแแแแฌแฃแ แแแ, แแแ แแแแก แแแแแแ แแ แแฅแแแแ.
$ echo 0 > /proc/sys/vm/panic_on_oom
แแฃ แแแแจแแแแแแแแก แแแแงแแแแแ 1-แแ, แแแจแแ แ แแแแกแแช แแแฎแกแแแ แแแ แแแแแฌแฃแ แแแ, แแแ แแแแก แแแแแแ แแแฎแแแแ.
echo 1 > /proc/sys/vm/panic_on_oom
OOM-Killer แแ แ แแฎแแแแ แจแแแซแแแแ แฉแแ แแแ แแ แแแแแ แแแ. แฉแแแ แฃแแแ แแแฅแแแ, แ แแ Linux-แก แจแแฃแซแแแ แแ แแชแแกแแแแกแแแแก แฃแคแ แ แแแขแ แแแฎแกแแแ แแแแก แแแแแแแ, แแแแ แ แฎแแแแแกแแฌแแแแแแ แแแกแ แ แแแแฃแ แแ แแแแแงแแคแแก แแแ แแจแ, แแ แแก แฅแชแแแ แแแแขแ แแแแแแ Linux-แแก แแแ แแแแก แแแ แแแแขแ แแ. แชแแแแแ แแแกแฃแฎแแกแแแแแแแแ แแแแแ vm.overcommit_memory
.
แแแแกแแแแแก แจแแแแซแแแแ แแแฃแแแแแ แจแแแแแแ แแแแจแแแแแแแแแ:
0: แแแ แแแ แแแแแ แฌแงแแแขแก, แแแฏแแแจแแแก แแฃ แแ แ แซแแแแแ แแแแ แ แแแฎแกแแแ แแแ. แแก แแ แแก แแแแฃแแแกแฎแแแแ Linux-แแก แฃแแแขแแก แแแ แกแแแแจแ.
1: แแแ แแแ แงแแแแแแแแก แแขแแแแแก แแแแแขแแแแ แแแฎแกแแแ แแแแก. แแก แกแแ แแกแแแ, แ แแแแแ แแแฎแกแแแ แแแ แจแแแซแแแแ แแแแแฌแฃแ แแก, แ แแแแแ, แแแแ แแแแแแแแแ, แแ แ แแฆแแก แแ แแชแแกแแแ แแแแก แแแแแฎแแแก.
2: แแแ แแแ แแ แแขแแแแแก แแแข แแแฎแกแแแ แแแแก, แแแแ แ แแแแแแแแฃแแแ แแแ แแแแขแ แจแ overcommit_ratio
.
แแ แแแ แแแแขแ แแ, แแฅแแแ แแแฃแแแแแแ แแแฎแกแแแ แแแแก แแ แแ แแชแแแขแก, แ แแแแแก แแแแแแขแแ แแแฏแแแจแแ แแ แแก แแแจแแแแฃแแ. แแฃ แแแแกแแแแก แแแแแแ แแ แแ แแก, แแแฎแกแแแ แแแ แแ แแ แแก แแแแแงแแคแแแ แแ แแแฏแแแจแแ แฃแแ แงแแคแแแ แแฅแแแแ. แแก แแ แแก แงแแแแแแ แฃแกแแคแ แแฎแ แแแ แแแแขแ, แ แแแแแแช แ แแแแแแแแแแฃแแแ PostgreSQL-แแกแแแแก. OOM-Killer แแแแแแแแก แแฎแแแแก แกแฎแแ แแแแแแแขแแ - แแแชแแแแก แจแแกแแซแแแแแแแแแ, แ แแแแแแช แแแแขแ แแแแแแ แชแแแแแแก แแแแ . cat /proc/sys/vm/swappiness
. แแก แแแแจแแแแแแแแแ แแฃแแแแแ แแแ แแแก, แแฃ แ แแแแ แฃแแแ แแแแฅแชแแก แแแแฏแแแแ. แ แแช แฃแคแ แ แแแฆแแแแ แแแแจแแแแแแแ, แแแ แแแแแแแแ แแแแแแแแ แแแแกแ, แ แแ OOM แจแแแฉแแ แแแก แแ แแชแแกแก, แแแแ แแ I/O แแแแ แแชแแแแแก แแแแ แแก แฃแแ แงแแคแแ แแแแแแแแก แแฎแแแแก แแแแแชแแแแ แแแแแแ. แแ แแแ แแฅแแ - แ แแช แฃแคแ แ แแแแแแแ แแแแจแแแแแแแ, แแแ แฃแคแ แ แแแฆแแแแ OOM-Killer แฉแแ แแแแก แแแแแแแแ, แแแแ แแ แแแแแชแแแแ แแแแแก แจแแกแ แฃแแแแ แแกแแแ แฃแคแ แ แแแฆแแแแ. แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแ แแ แแก 60, แแแแ แแ แแฃ แแแแแ แแแแแชแแแแ แแแแ แฏแแแแ แแแฎแกแแแ แแแแจแ, แฃแแฏแแแแกแแ แแแแงแแแแ แแแแจแแแแแแแ 1-แแ.
แจแแแแแแแ
แแฃ แแแกแชแแแ แฃแคแแแแแก โแแแแแแแแโ OOM-Killer-แจแ แจแแแแจแแแแ. แแ แจแแแแฎแแแแแจแ แแแแแแแ แแฅแแแแ แแฅแแแแ แกแแกแขแแแแก แแฎแกแแแแ. แแก โแแแแแกโ แงแแแแแแ แชแฃแ แแ แแชแแกแแแก แแ แแฎแกแแแก แกแแกแขแแแแก แแแแ แแแกแแแ. แแแแกแแแแแก, แ แแ แแ แแแแญแแ แแแ OOM-Killer-แแก แแแแแงแแแแแ PostgreSQL-แแก แจแแกแแฌแงแแแขแแ, แแแแงแแแแ vm.overcommit_memory
แแแแจแแแแแแแ 2. แแก แแ แแซแแแแ แแแ แแแขแแแก, แ แแ OOM-Killer-แก แแ แแแฃแฌแแแก แฉแแ แแแ, แแแแ แแ แแก แจแแแแชแแ แแแก PostgreSQL แแ แแชแแกแแก แแซแฃแแแแแก แจแแฌแงแแแขแแก แแแแแแแแแก.
แฌแงแแ แ: www.habr.com