
αααα αΌα Linux αααΆαααΈααααααΎααΌαααααΆααα·ααααααααΆααααααααΎαααΆαααααα·αααΉαααααΆαααα α αΎαααΌαα ααα»ααααΌααααααα α’αΆα ααΆαα ααα»ααααΆα αααΎαα α§ααΆα ααα SIGSEGV - ααΆααααΆααααααααΆαααααα α»ααα αααα»ααααΆαααΈαααααΆααααααα ααα»αααααααααΊααααααΆααα ααΆαα αααΎα α’αααααααΆααααα’ααααα αααΆα α¬α’αααα αα αΆαα ααααα·αβααΎβα’αααβα’ααβααα αβαααα»αβααΆα ααΆαβααααΌαβααβαα½αβαααβααΊβαααααΎαβααα αβααααα α αΎαβα αΆααααααΎαβααΌαααααΆαβαα·ααααααβα‘αΎαβαα·αα
ααΆααααααα ααα·
αα ααααααα’ααα αααΆαααΈααααααΎ α¬ααααΎαααΆααααα’ααα’αααα αα αΆα 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-killer αα½ααααααα
ααααααΎαααΆαααααΆαα α¬α’αΆα
αααα
αΆαααΆα? ααΆααααααααα
αααααα 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 ααΊ 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
Π Linux α’αααα’αΆα
ααΎα α¬αα·α 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_oomOOM-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
