
Aia i loko Linux Hoʻopau koke ʻia ke kikowaena waihona ʻikepili, a pono e hoʻoholo ʻia ke kumu. Hiki ke loaʻa kekahi mau kumu. Eia kekahi laʻana, SIGSEGV — hāʻule ʻole ma muli o ka hewa i loko o ke kikowaena hope. Akā kakaikahi kēia. ʻO ka pinepine, pau ʻoe i waho o kahi disk a i ʻole ka hoʻomanaʻo. Inā pau ʻoe i waho o ka hakahaka diski, hoʻokahi wale nō ala i waho - hoʻokuʻu i ka hakahaka a hoʻomaka hou i ka waihona.
Killer-O-Memory
I ka wā āu kikowaena pūnaewele a i ʻole e pau ka hoʻomanaʻo o ke kaʻina hana, Linux Hāʻawi ka Out-Of-Memory Killer i ʻelua mau hopena: e hoʻopau i ka ʻōnaehana holoʻokoʻa a i ʻole e hoʻopau i ke kaʻina hana (noi) e ʻai ana i ka hoʻomanaʻo. ʻOi aku ka maikaʻi, ʻoiaʻiʻo, e hoʻopau i ke kaʻina hana a mālama i ka OS mai ka hāʻule ʻana. I ka pōkole, ʻo ka Out-Of-Memory Killer kahi kaʻina hana e hoʻopau i kahi noi e mālama i ka kernel mai ka hāʻule ʻana. Hoʻopau ia i ka noi e hoʻomau i ka holo ʻana o ka OS. E kūkākūkā mua kākou pehea e hana ai ʻo OOM a pehea e kaohi ai iā ia, a laila e nānā pehea e hoʻoholo ai ka OOM Killer i nā noi e hoʻopau.
ʻO kekahi o nā hana nui Linux — E hoʻokaʻawale i ka hoʻomanaʻo i nā kaʻina hana ke noi lākou. ʻO ka maʻamau, noi kahi kaʻina hana a noi paha i ka hoʻomanaʻo mai ka OS akā ʻaʻole hoʻohana piha. Inā hoʻokaʻawale ka OS i ka hoʻomanaʻo i nā mea a pau e noi ana akā ʻaʻole hoʻolālā e hoʻohana, e pau koke ka hoʻomanaʻo o ka ʻōnaehana, a e hāʻule ka ʻōnaehana. No ka pale ʻana i kēia, mālama ka OS i ka hoʻomanaʻo no kahi kaʻina hana akā ʻaʻole ia e hoʻokaʻawale maoli. Hoʻokaʻawale ʻia ka hoʻomanaʻo ke manaʻo maoli kahi kaʻina hana e hoʻohana. I kekahi manawa ʻaʻohe hoʻomanaʻo manuahi o ka OS, akā hoʻokaʻawale ia i ka hoʻomanaʻo i kahi kaʻina hana, a i ka wā e pono ai ke kaʻina hana, hoʻokaʻawale ka OS inā hiki. ʻO ka hemahema, i kekahi manawa mālama ka OS i ka hoʻomanaʻo, akā i ka wā e pono ai, ʻaʻohe hoʻomanaʻo manuahi, e hana ana i kahi hāʻule ʻana o ka ʻōnaehana. He kuleana koʻikoʻi ko OOM i kēia hiʻohiʻona, e hoʻopau ana i nā kaʻina hana e pale aku i ka kernel mai ka hopohopo. Ke hoʻopau ikaika ʻia ke kaʻina hana PostgreSQL, ʻike ʻia ka leka aʻe ma ka log:
Out of Memory: Killed process 12345 (postgres).Inā haʻahaʻa ka ʻōnaehana ma ka hoʻomanaʻo a ʻaʻole hiki ke hoʻokuʻu ʻia, kāhea ʻia ka hana out_of_memory. I kēia pae, hoʻokahi wale nō mea āna e hana ai - hoʻopau i hoʻokahi a ʻoi aku paha kaʻina hana. Pono anei ʻo OOM-killer e hoʻopau koke i ke kaʻina hana a hiki paha ke kali? ʻIke ʻia, ke kāhea ʻia ʻo out_of_memory, ma muli o ke kali ʻana i kahi hana I/O a i ʻole ka ʻaoʻao i ka disk. No laila, pono e hana mua ka mea pepehi kanaka OOM a, ma muli o ia mau mea, e hoʻoholo e hoʻopau ke kaʻina hana. Inā maikaʻi nā loiloi a pau ma lalo nei, e hoʻopau ʻo OOM i ke kaʻina hana.
Kaʻina hana koho
Ke pau ka hoʻomanaʻo, kāhea ʻia ka hana out_of_memory(). He hana kona select_bad_process(), loaʻa ka loiloi mai ka hana badness(). E kuhikuhi ʻia ke kaʻina hana "ʻoi loa". Hana badness() koho i ka hana e like me kekahi mau rula.
- Pono ka kernel i kahi hoʻomanaʻo liʻiliʻi nona iho.
- Pono ʻoe e hoʻokuʻu i ka nui o ka hoʻomanaʻo.
- ʻAʻohe pono e hoʻopau i nā kaʻina hana e hoʻohana ana i ka hoʻomanaʻo liʻiliʻi.
- Pono e hoʻopau i nā kaʻina hana liʻiliʻi.
- ʻO nā algorithms paʻakikī e hoʻonui i ka manawa o ka hoʻopau ʻana no kēlā mau kaʻina hana a ka mea hoʻohana ponoʻī e makemake e hoʻopau.
Ma hope o ka hoʻopau ʻana i kēia mau loiloi, nānā ʻo OOM i ka helu (oom_score). Hāʻawi ʻo OOM oom_score kēlā me kēia kaʻina hana, a laila hoʻonui i kēia waiwai me ka nui o ka hoʻomanaʻo. ʻO nā kaʻina hana me nā waiwai nui e hāʻule paha i ka OOM Killer. ʻO nā kaʻina hana e pili ana i ka mea hoʻohana kumu he helu haʻahaʻa a ʻaʻole hiki ke koi ʻia e hoʻopau.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)ʻO 3813 ka ID kaʻina hana Postgres, no laila ma kahi pūpū ʻē aʻe hiki ke kiʻi i ka helu me ka hoʻohana ʻana i kēia ʻāpana kernel oom_score:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2Inā ʻaʻole ʻoe makemake iā OOM-Killer e pepehi i ke kaʻina hana, aia kekahi koho kernel: oom_score_adj. Hoʻohui i kahi waiwai maikaʻi ʻole e hōʻemi i ka manawa o ka hoʻopau ʻana i kahi kaʻina hana āu e manaʻo ai.
sudo echo -100 > /proc/3813/oom_score_adjE hoʻonoho i kahi waiwai oom_score_adj, hoʻonoho iā OOMScoreAdjust i ka poloka lawelawe:
[Service]
OOMScoreAdjust=-1000A i ʻole hoʻohana oomprotect ma kahi hui rcctl.
rcctl set <i>servicename</i> oomprotect -1000Hoʻopau ikaika i kahi kaʻina hana
Ke koho mua ʻia kahi kaʻina hana a ʻoi aku paha, kāhea ʻo OOM-Killer i ka hana oom_kill_task(). Hoʻouna kēia hana i kahi hōʻailona hoʻopau i ke kaʻina hana. Inā pilikia ka hoʻomanaʻo oom_kill() Kāhea i kēia hana e hoʻouna i kahi hōʻailona SIGKILL i ke kaʻina hana. Ua kākau ʻia kahi memo i ka log kernel.
Out of Memory: Killed process [pid] [name].Pehea e hoʻomalu ai iā OOM-Killer
В Linux Hiki iā ʻoe ke hoʻā a hoʻopau paha iā OOM-Killer (ʻoiai ʻaʻole i ʻōlelo ʻia ka mea hope). No ka hoʻā a hoʻopau paha iā ia, e hoʻohana i ke koho vm.oom-kill. No ka hiki iā OOM-Killer i ka wā holo, e holo i ke kauoha sysctl.
sudo -s sysctl -w vm.oom-kill = 1No ka hoʻopau ʻana iā OOM-Killer, e kuhikuhi i ka waiwai 0 ma ke kauoha like:
sudo -s sysctl -w vm.oom-kill = 0ʻAʻole e mālama mau ʻia ka hopena o kēia kauoha, akā a hiki i ka reboot mua. Inā makemake ʻoe i ka hoʻomau hou aku, e hoʻohui i kēia laina i ka faila /etc/sysctl.conf:
echo vm.oom-kill = 1 >>/etc/sysctl.confʻO kekahi ala e hiki ai a hoʻopau ʻia ʻo ke kākau ʻana i kahi loli panic_on_oom. Hiki ke hoʻopaʻa ʻia ka waiwai i nā manawa a pau /proc.
$ cat /proc/sys/vm/panic_on_oom
0Inā hoʻonoho ʻoe i ka waiwai i ka 0, a laila i ka pau ʻana o ka hoʻomanaʻo, ʻaʻohe pilikia kernel.
$ echo 0 > /proc/sys/vm/panic_on_oomInā hoʻonoho ʻoe i ka waiwai i ka 1, a laila i ka pau ʻana o ka hoʻomanaʻo, e kū mai kahi kernel panic.
echo 1 > /proc/sys/vm/panic_on_oomHiki ke hoʻā a hoʻopau iā OOM-Killer, e like me kā mākou i ʻōlelo mua ai. Linux hiki ke mālama i ka hoʻomanaʻo hou aʻe no nā kaʻina hana ma mua o ka mea i loaʻa, akā ʻaʻole i hoʻokaʻawale maoli ʻia, a ua hoʻomalu ʻia kēia ʻano e kahi parameter kernel LinuxʻO ke ʻano loli ke kuleana no kēia. vm.overcommit_memory.
Hiki iā ʻoe ke kuhikuhi i kēia mau waiwai no ia:
0: ʻO ka kernel ponoʻī e hoʻoholo inā e mālama i ka nui o ka hoʻomanaʻo. ʻO kēia ka waiwai paʻamau i ka hapa nui o nā mana. Linux.
1: E mālama mau ka kernel i ka hoʻomanaʻo hou. He pilikia kēia, no ka mea, pau ka hoʻomanaʻo, no ka mea, ʻoi aku paha, i kekahi lā e koi ʻia nā kaʻina hana.
2: ʻAʻole mālama ka kernel i ka hoʻomanaʻo ʻoi aku ma mua o ka mea i kuhikuhi ʻia ma ka ʻāpana overcommit_ratio.
Me kēia ʻāpana, kuhikuhi ʻoe i ka pākēneka o ka hoʻomanaʻo i ʻae ʻia e mālama ʻia. Inā ʻaʻohe wahi no ia, ʻaʻohe hoʻomanaʻo i hoʻokaʻawale ʻia, a e hōʻole ʻia ka mālama ʻana. ʻO kēia ka koho palekana i manaʻo ʻia no PostgreSQL. Hoʻopili ʻia ʻo OOM-Killer e kekahi mea ʻē aʻe - ka hiki ke hoʻololi, i hoʻomalu ʻia e ka mea hoʻololi cat /proc/sys/vm/swappiness. Hōʻike kēia mau waiwai i ka kernel pehea e mālama ai i ka paging. ʻO ke kiʻekiʻe o ka waiwai, ʻoi aku ka liʻiliʻi o ka OOM e hoʻopau i ke kaʻina hana, akā ma muli o nā hana I/O he hopena maikaʻi ʻole ia ma ka waihona. A ʻo ka hope - ʻo ka haʻahaʻa o ka waiwai, ʻoi aku ka kiʻekiʻe o ka hoʻopili ʻana o OOM-Killer, akā ʻoi aku ka kiʻekiʻe o ka hana ʻikepili. ʻO 60 ka waiwai paʻamau, akā inā kūpono ka waihona waihona i ka hoʻomanaʻo, ʻoi aku ka maikaʻi o ka hoʻonohonoho ʻana i ka waiwai i 1.
Nā hopena
Mai ʻae i ka "killer" ma OOM-Killer e hoʻoweliweli iā ʻoe. I kēia hihia, ʻo ka mea pepehi ka mea hoʻopakele o kāu ʻōnaehana. "Pepehi" ia i nā kaʻina hana ʻino loa a mālama i ka ʻōnaehana mai ka hāʻule ʻana. I mea e pale aku ai i ka hoʻohana ʻana iā OOM-Killer e hoʻopau i ka PostgreSQL, hoʻonohonoho i vm.overcommit_memory waiwai 2. ʻAʻole kēia e hōʻoiaʻiʻo ʻaʻole pono ʻo OOM-Killer e hoʻopili, akā e hōʻemi ia i ka hiki ke koi i ke kaʻina PostgreSQL e hoʻopau.
Source: www.habr.com
