
แ แแแแกแแช แจแแแแแ Linux แแแแแชแแแแ แแแแแก แกแแ แแแ แ แแแฃแแแแแแแแ แแแแจแแแ แแ แแแแแแแก แแแแแแแแ แกแแญแแ แ. แจแแแซแแแแ แ แแแแแแแแ แแแแแแ แแ แกแแแแแแแก. แแแแแแแแแ, SIGSEGV โ แฌแแ แฃแแแขแแแแแแ Backend แกแแ แแแ แแ แแ แกแแแฃแแ แจแแชแแแแแก แแแแ. แแแแ แแ แแก แแจแแแแแแ. แงแแแแแแ แฎแจแแ แแ, แแฅแแแ แฃแแ แแแแ แแแแแแฌแฃแ แแแแ แแแกแแแก แแแแแแ แแ แแแฎแกแแแ แแแ. แแฃ แแแกแแแ แกแแแ แชแ แแแแแแฌแฃแ แแแแ, แแแแแกแแแแแ แแฎแแแแ แแ แแแ - แแแแแแแแกแฃแคแแแ แกแแแ แชแ แแ แแแแแขแแแ แแแ แแแแแชแแแแ แแแแ.
แแแฎแกแแแ แแแแก แแแ แแจแ แแแแแแแ
แ แแแแกแแช แจแแ แกแแ แแแ แ แแ แแ แแชแแกแก แแแฎแกแแแ แแแ แแฌแฃแ แแแ, Linux Out-Of-Memory Killer แแ แแแแแกแแแแแก แแแแแแแแแแก: แแแแแ แกแแกแขแแแแก แแแแแจแแ แแ แแแฎแกแแแ แแแแก แแแแฎแแแ แแแแแ แแ แแชแแกแแก (แแแแแแแชแแแก) แจแแฌแงแแแขแ. แ แ แแฅแแ แฃแแแ, แฃแแฏแแแแกแแ แแ แแชแแกแแก แจแแฌแงแแแขแ แแ แแแแ แแชแแฃแแ แกแแกแขแแแแก แแแแแจแแแกแแแ แแแชแแ. แแแแแแ, Out-Of-Memory Killer แแ แแก แแ แแชแแกแ, แ แแแแแแช แฌแงแแแขแก แแแแแแแชแแแก, แ แแแ แแแ แแแ แแแแแจแแแกแแแ แแแแชแแแก. แแก แแแแแแแชแแแก แแกแฎแแแ แแแแ แแฅแชแแแก แแแแ แแชแแฃแแ แกแแกแขแแแแก แแฃแจแแแแแก แจแแกแแแแ แฉแฃแแแแแแ. แฏแแ แแแแแแฎแแแแ, แแฃ แ แแแแ แแฃแจแแแแก OOM แแ แ แแแแ แแแแ แแแ แแก, แจแแแแแ แแ แแแแแแฎแแแแ, แแฃ แ แแแแ แฌแงแแแขแก OOM Killer, แ แแแแแ แแแแแแแชแแแแ แจแแฌแงแแแขแแก.
แแ แ-แแ แแ แแแแแแ แ แแแแชแแแ Linux โ แแ แแชแแกแแแแกแแแแก แแแฎแกแแแ แแแแก แแแแแงแแคแ แแแแ แแแแฎแแแแแกแแแแแแ. แ แแแแ แช แฌแแกแ, แแ แแชแแกแ แแ แแแแแแแชแแ แแแแ แแขแแฃแแ แกแแกแขแแแแกแแแ แแแฎแแแก แแแฎแกแแแ แแแแก, แแแแ แแ แกแ แฃแแแ แแ แแงแแแแแก แแแก. แแฃ แแแแ แแชแแฃแแ แกแแกแขแแแ แแแฎแกแแแ แแแแก แแแแแงแแคแก แงแแแแแกแแแแก, แแแแช แแแก แแแฎแแแก, แแแแ แแ แแ แแแแแแแก แแแก แแแแแงแแแแแแก, แกแแกแขแแแ แกแฌแ แแคแแ แแแแแฌแฃแ แแแ แแ แกแแกแขแแแ แแแแแแจแแแ. แแแแก แแแแแแแ แแกแแชแแแแแแแ, แแแแ แแชแแฃแแ แกแแกแขแแแ แแแแฎแแแก แแแฎแกแแแ แแแแก แแ แแชแแกแแกแแแแก, แแแแ แแ แ แแแแฃแ แแ แแ แแแแแงแแคแก แแแก. แแแฎแกแแแ แแแ แแแแแงแแคแแแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แแ แแชแแกแ แ แแแแฃแ แแ แแแแ แแแก แแแก แแแแแงแแแแแแก. แแแแฏแแ แแแแ แแชแแฃแ แกแแกแขแแแแก แแ แแฅแแก แแแแแกแฃแคแแแ แแแฎแกแแแ แแแ, แแแแ แแ แแก แแแแแงแแคแก แแแฎแกแแแ แแแแก แแ แแชแแกแแกแแแแก แแ แ แแแแกแแช แแ แแชแแกแก แแก แกแญแแ แแแแ, แแแแ แแชแแฃแแ แกแแกแขแแแ แแแแแงแแคแก แแแก, แแฃ แจแแฃแซแแแ. แฃแแ แงแแคแแแ แแฎแแ แ แแก แแ แแก, แ แแ แแแแฏแแ แแแแ แแชแแฃแแ แกแแกแขแแแ แแแแฎแแแก แแแฎแกแแแ แแแแก, แแแแ แแ แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ, แแแแแกแฃแคแแแ แแแฎแกแแแ แแแ แแ แแ แแก, แ แแช แแฌแแแแก แกแแกแขแแแแก แแแแแจแแแก. 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 = 1OOM-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
