ืืืฉืจ ืฉืจืช ืืกื ื ืชืื ืื ื ืกืืจ ืืืืคื ืืืชื ืฆืคืื ืืืื ืืงืก, ืืชื ืฆืจืื ืืืฆืื ืืช ืืกืืื. ืืืืืืช ืืืืืช ืืกืคืจ ืกืืืืช. ืืืืืื, SIGSEGV - ืืฉื ืขืงื ืืื ืืฉืจืช ืืงืฆื ืืืืืจื. ืืื ืื ื ืืืจ. ืืจืื, ืคืฉืื ื ืืืจ ืื ืฉืื ืืืืกืง ืื ืืืืืจืื. ืื ื ืืืจ ืื ืฉืื ืืืืกืง, ืืฉ ืจืง ืืืฆื ืืื - ืคื ื ืืงืื ืืืคืขื ืืืืฉ ืืช ืืกื ืื ืชืื ืื.
ืจืืฆื ืืกืจ ืืืืจืื
ืืืฉืจ ืืฉืจืช ืื ืืชืืืื ื ืืืจ ืืืืืจืื, ืืื ืืงืก ืืฆืืขื 2 ืคืชืจืื ืืช: ืืงืจืืก ืืช ืื ืืืขืจืืช ืื ืืกืืื ืืช ืืชืืืื (ืืืคืืืงืฆืื) ืฉืืืืืช ืืช ืืืืืจืื. ืขืืืฃ, ืืืืื, ืืกืืื ืืช ืืชืืืื ืืืืกืื ืืช ืืขืจืืช ืืืคืขืื ืืงืจืืกื. ืืงืืฆืืจ, Out-Of-Memory Killer ืืื ืชืืืื ืฉืืืจื ืืคืืืงืฆืื ืืื ืืืฆืื ืืช ืืืืื ืืงืจืืกืช. ืื ืืงืจืื ืืช ืืืืฉืื ืืื ืืฉืืืจ ืขื ืืขืจืืช ืืืคืขืื ืคืืขืืช. ืชืืืื ื ืืื ืืืฆื ืคืืขืืช OOM ืืืืฆื ืืฉืืื ืื, ืืืืืจ ืืื ื ืจืื ืืืฆื OOM Killer ืืืืื ืืืื ืืคืืืงืฆืื ืืืคืกืืง.
ืืืช ืืืฉืืืืช ืืขืืงืจืืืช ืฉื ืืื ืืงืก ืืื ืืืงืฆืืช ืืืืจืื ืืชืืืืืื ืืฉืื ืืืงืฉืื ืืืช. ืืืจื ืืื, ืชืืืื ืื ืืืฉืื ืืืงืฉืื ืืืืจืื ืืืขืจืืช ืืืคืขืื, ืื ืืื ื ืืฉืชืืฉืื ืื ืืืืคื ืืื. ืื ืืขืจืืช ืืืคืขืื ืชืืืง ืืืืจืื ืืื ืื ืฉืืืงืฉ ืืืชื ืืื ืืื ืื ืชืืื ืืืช ืืืฉืชืืฉ ืื, ืืงืจืื ืืืื ืืืืืจืื ืืืืืจ ืืืืขืจืืช ืชืืืฉื. ืืื ืืืืื ืข ืืื, ืืขืจืืช ืืืคืขืื ืฉืืืจืช ืืืืจืื ืืชืืืื, ืื ืืืขืฉื ืืื ื ืืฉืืจืจืช ืืืชื. ืืืืจืื ืืืงืฆื ืจืง ืืืฉืจ ืชืืืื ืืืืช ืืืื ืืืฉืชืืฉ ืื. ืงืืจื ืฉืืืขืจืืช ืืืคืขืื ืืื ืืืืจืื ืคื ืื, ืืื ืืื ืืงืฆื ืืืืจืื ืืชืืืื, ืืืืฉืจ ืชืืืื ืฆืจืื ืืช ืื, ืืขืจืืช ืืืคืขืื ืืงืฆื ืืืชื ืื ืืื ืืืืื. ืืืืกืจืื ืืื ืฉืืคืขืืื ืืขืจืืช ืืืคืขืื ืฉืืืจืช ืืืืจืื, ืืื ืืืื ืื ืืื ืืื ืืืืจืื ืคื ืื, ืืืืขืจืืช ืงืืจืกืช. OOM ืืืื ืชืคืงืื ืืฉืื ืืชืจืืืฉ ืื ืืืคืกืืง ืชืืืืืื ืืื ืืื ืืข ืืืงืจื ื ืืืืื ืก ืืคืื ืืงื. ืืืฉืจ ืชืืืื PostgreSQL ื ืืืฅ ืืืกืชืืื, ืืืคืืขื ืืืืขื ืืืืื:
Out of Memory: Killed process 12345 (postgres).
ืื ืืืขืจืืช ืืกืจ ืืืืจืื ืืืื ืืคืฉืจืืช ืืฉืืจืจ ืืืชื, ืืคืื ืงืฆืื ื ืงืจืืช out_of_memory
. ืืฉืื ืื ื ืืชืจ ืื ืจืง ืืืจ ืืื ืืขืฉืืช - ืืืฉืืื ืชืืืื ืืื ืื ืืืชืจ. ืืื OOM-killer ืฆืจืื ืืืคืกืืง ืืช ืืชืืืื ืืืืคื ืืืืื ืื ืฉืืื ืืืื ืืืืืช? ืืจืืจ ืฉืืืฉืจ ื ืงืจื out_of_memory, ืื ื ืืืข ืืืืชื ื ืืคืขืืืช I/O ืื ืืืืคื ืืืืกืง. ืืื, ืขื ืืจืืฆื OOM ืืืฆืข ืชืืืื ืืืืงืืช ืืขื ืืกืืกื ืืืืืื ืฉืืฉ ืืืคืกืืง ืืช ืืชืืืื. ืื ืื ืืืืืงืืช ืืืื ืืืืืืืช, OOM ืชืกืืื ืืช ืืชืืืื.
ืืืืจืช ืชืืืื
ืืืฉืจ ืืืืืจืื ื ืืืจ, ืืคืื ืงืฆืื ื ืงืจืืช out_of_memory()
. ืืฉ ืืื ืคืื ืงืฆืื select_bad_process()
, ืฉืืงืื ืืขืจืื ืืืคืื ืงืฆืื badness()
. ืืชืืืื "ืืืจืืข ืืืืชืจ" ืืืื ืืืืงื. ืคืึผื ืงืฆึดืึธื badness()
ืืืืจ ืชืืืื ืืคื ืืืืื ืืกืืืืื.
- ืืงืจื ื ืืงืืง ืืืื ืืืื ืืืืจืื ืืขืฆืื.
- ืืชื ืฆืจืื ืืคื ืืช ืืจืื ืืืืจืื.
- ืืื ืฆืืจื ืืืคืกืืง ืชืืืืืื ืืืฉืชืืฉืื ืืืืืจืื ืืืขื.
- ืฆืจืื ืืืฉืืื ืืื ืืืื ืชืืืืืื.
- ืืืืืจืืชืืื ืืืจืืืื ืืืืืืืื ืืช ืกืืืืื ืืืฉืืื ืืืืชื ืชืืืืืื ืฉืืืฉืชืืฉ ืขืฆืื ืจืืฆื ืืืฉืืื.
ืืืืจ ืืฉืืืช ืื ืืืืืงืืช ืืืื, OOM ืืืื ืช ืืช ืืฆืืื (oom_score
). OOM ืืงืฆื oom_score
ืื ืชืืืื, ืืืืืจ ืืื ืืืคืื ืืช ืืขืจื ืืื ืืืืืช ืืืืืจืื. ืชืืืืืื ืืขืื ืขืจืืื ืืืืืื ืืืชืจ ื ืืืื ืืืชืจ ืืืคืื ืงืืจืื ืืจืืฆื OOM. ืืชืืืืืื ืืงืฉืืจืื ืืืฉืชืืฉ ืืฉืืจืฉ ืืฉ ืฆืืื ื ืืื ืืืชืจ ืืกืืืจ ืคืืืช ืฉืืืืืฆื ืืืคืกืืง.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)
ืืืื ืืชืืืื ืฉื Postgres ืืื 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
, ืืืืจ ืืช OOMScoreAdjust ืืืืืง ืืฉืืจืืช:
[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
ืืืื ืืงืก, ืืชื ืืืื ืืืคืขืื ืื ืืืฉืืืช ืืช 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. ืืืจ ืืืจื ื ืฉืืื ืืงืก ืืืืื ืืฉืืืจ ืืืชืจ ืืืืจืื ืืชืืืืืื ืืื ืฉืืืื ืืืื ืืืงืฆืืช ืืืชื ืืคืืขื, ืืืชื ืืืืช ืื ื ืฉืืืช ืขื ืืื ืคืจืืืจ ืืืืช ืืื ืืงืก. ืืืฉืชื ื ืืืจืื ืืื vm.overcommit_memory
.
ืืชื ืืืื ืืฆืืื ืืช ืืขืจืืื ืืืืื ืขืืืจื:
0: ืืงืจื ื ืขืฆืื ืืืืื ืื ืืฉืืืจ ืืืชืจ ืืื ืืืืจืื. ืืืื ืืจืืจืช ืืืืื ืืจืื ืืืจืกืืืช ืฉื ืืื ืืงืก.
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