
Kana wapinda Linux Sevha yedatabase inoguma isingatarisirwi, uye chikonzero chinofanira kuzivikanwa. Panogona kunge paine zvikonzero zvakawanda. Semuenzaniso, SIGSEGV -kutadza nekuda kwebug mubackend server. Asi izvi hazviwanzoitiki. Kazhinji, iwe unongopererwa nedhisiki nzvimbo kana ndangariro. Kana iwe ukapera dhisiki nzvimbo, pane imwe chete nzira yekubuda - kusunungura nzvimbo uye tangazve dhatabhesi.
Out-Of-Memory Killer
Kana iwe server kana kuti maitiro acho apera ndangariro, Linux Iyo Out-Of-Memory Killer inopa mhinduro mbiri: kupwanya sisitimu yese kana kumisa maitiro (application) ari kudya memory. Zviri nani, hongu, kumisa maitiro uye kuchengetedza OS kubva pakupwanya. Muchidimbu, Out-Of-Memory Killer inzira inogumisa application yekuchengetedza kernel kubva pakupwanya. Inorega application kuti OS irambe ichishanda. Ngatitangei takurukura kuti OOM inoshanda sei uye kuti tingaidzora sei, tobva tatarisa kuti OOM Killer inosarudza sei maapplication ekugumisa.
Rimwe remabasa makuru Linux — Govera ndangariro kumaprocess kana vachiikumbira. Kazhinji, process kana application inokumbira memori kubva kuOS asi haiishandise zvachose. Kana OS ikagovera memori kune wese anoikumbira asi asingaronge kuishandisa, system ichakurumidza kupera memori, uye system ichadonha. Kudzivirira izvi, OS inochengetera ndangariro yeprocess asi hainyatsoigovani. Memory inogovaniwa chete kana process ichida kuishandisa. Dzimwe nguva OS haina memori yemahara, asi inogovaniwa memori kune process, uye kana process ichiida, OS inogovaniwa kana ichikwanisa. Dambudziko nderekuti dzimwe nguva OS inochengetera ndangariro, asi kana ichidikanwa, hapana memori yemahara, zvichikonzera kuparara kwesystem. OOM inoita basa guru mumamiriro ezvinhu aya, ichimisa maitiro ekudzivirira kernel kuti isatye. Kana process yePostgreSQL ikamiswa nechisimba, meseji inotevera inoonekwa mulog:
Out of Memory: Killed process 12345 (postgres).Kana iyo system yakaderera pandangariro uye haigone kusunungurwa, basa racho rinodanwa out_of_memory. Panguva ino, ane chinhu chimwe chete chasara kuti aite - kupedza imwe kana mamwe maitiro. Ko OOM-mhondi inofanira kumisa hurongwa nekukasika kana inogona kumirira? Zviripachena, kana out_of_memory ichidanwa, imhaka yekumirira I / O oparesheni kana paging kune diski. Naizvozvo, muurayi weOOM anofanira kutanga aita macheki uye, zvichibva paari, ofunga kuti hurongwa uhu hunofanira kugumiswa. Kana macheki ese ari pazasi akanaka, OOM inomisa maitiro.
Kusarudzwa kwemaitiro
Kana ndangariro ichipera, basa racho rinodanwa out_of_memory(). Ine basa select_bad_process(), iyo inogamuchira kuongororwa kubva kubasa badness(). Iyo "yakaipisisa" nzira ichave yakanangwa. Function badness() anosarudza nzira maererano nemimwe mitemo.
- Iyo kernel inoda imwe shoma ndangariro pachayo.
- Unoda kusunungura ndangariro zhinji.
- Hapana chikonzero chekumisa maitiro ari kushandisa ndangariro shoma.
- Minimum process inoda kupedzwa.
- Complex algorithms iyo inowedzera mikana yekupedzisa kune iwo maitiro ayo mushandisi pachake anoda kupedzisa.
Wapedza cheki dzese idzi, OOM inoongorora zvibodzwa (oom_score) OOM inogadza oom_score nzira yega yega, uyezve inowanza kukosha uku nehuwandu hwendangariro. Maitiro ane hukuru hukuru anowanzo kuwira mubairo weOOM Killer. Maitiro ane chekuita nemudzi mushandisi ane zvibodzwa zvakaderera uye haadiki kumanikidzwa kugumisa.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)Iyo Postgres process ID ndeye 3813, saka mune rimwe goko zvinokwanisika kuwana mamaki uchishandisa iyi kernel parameter. oom_score:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2Kana iwe usingade OOM-Killer kuuraya maitiro zvachose, pane imwe kernel sarudzo: oom_score_adj. Wedzera kukosha kwakashata kukuru kuderedza mikana yekupedzisa nzira yaunokoshesa.
sudo echo -100 > /proc/3813/oom_score_adjKuseta kukosha oom_score_adj, isa OOMScoreAdjust muvharovha yebasa:
[Service]
OOMScoreAdjust=-1000Kana kushandisa oomprotect muchikwata rcctl.
rcctl set <i>servicename</i> oomprotect -1000Kumanikidza kumisa nzira
Kana imwe kana mamwe maitiro atosarudzwa, OOM-Killer inodaidza basa racho oom_kill_task(). Iri basa rinotumira chiratidzo chekugumisa kune maitiro. Muchiitiko chekushaya ndangariro oom_kill() Inodaidza basa iri kutumira chiratidzo cheSIGKILL kune maitiro. Mharidzo inonyorerwa kune kernel log.
Out of Memory: Killed process [pid] [name].Maitiro ekudzora OOM-Killer
В Linux Unogona kugonesa kana kudzima OOM-Killer (kunyange zvazvo yekupedzisira isingakurudzirwe). Kuti uigonese kana kuidzima, shandisa parameter vm.oom-kill. Kugonesa OOM-Killer panguva yekumhanya, mhanyisa iwo rairo sysctl.
sudo -s sysctl -w vm.oom-kill = 1Kudzima OOM-Killer, tsanangura kukosha 0 mumurairo mumwechete:
sudo -s sysctl -w vm.oom-kill = 0Mhedzisiro yemurairo uyu haizochengetedzwe zvachose, asi chete kusvika yekutanga reboot. Kana iwe uchida kumwe kushingirira, wedzera mutsara uyu kufaira /etc/sysctl.conf:
echo vm.oom-kill = 1 >>/etc/sysctl.confImwe nzira yekugonesa nekudzima ndeyekunyora shanduko panic_on_oom. Iko kukosha kunogona kutariswa nguva dzose /proc.
$ cat /proc/sys/vm/panic_on_oom
0Kana iwe ukaisa kukosha ku0, ipapo kana ndangariro dzapera, hapazove nekuvhunduka kwe kernel.
$ echo 0 > /proc/sys/vm/panic_on_oomKana iwe ukaisa kukosha ku1, ipapo kana chiyeuchidzo chapera, kernel panic ichaitika.
echo 1 > /proc/sys/vm/panic_on_oomOOM-Killer inogona kuvhurwa nekudzimwa, sezvatatotaura. Linux inogona kuchengetedza ndangariro yakawanda yemaitiro kupfuura aripo, asi kwete kuigovanisa, uye maitiro aya anodzorwa ne kernel parameter LinuxChinoshanduka ndicho chinokonzera izvi. vm.overcommit_memory.
Iwe unogona kutsanangura zvinotevera kukosha kwayo:
0: Kernel pachayo ndiyo inosarudza kana ichizochengeta ndangariro yakawandisa. Iyi ndiyo default value mushanduro zhinji. Linux.
1: Iyo kernel inogara ichichengetera imwe ndangariro. Izvi zvine njodzi, nekuti chiyeuchidzo chinogona kupera, nekuti, kazhinji, rimwe zuva maitiro achazvida.
2: iyo kernel haizochengetera ndangariro yakawanda kupfuura yakatsanangurwa muparameter overcommit_ratio.
Neiyi parameter, unotsanangura chikamu chendangariro chinotenderwa kuchengetwa zvakanyanya. Kana pasina nzvimbo yayo, hapana chiyeuchidzo chakagoverwa, uye kuchengetwa kucharambwa. Iyi ndiyo yakachengeteka sarudzo inokurudzirwa yePostgreSQL. OOM-Killer inobatwa nechimwe chinhu - iyo swapping kugona, iyo inodzorwa nekusiyana cat /proc/sys/vm/swappiness. Aya maitiro anoudza kernel maitiro ekubata paging. Iyo yakakwira kukosha, kashoma kuti OOM igumise maitiro, asi nekuda kweI/O mashandiro ayo ane mhedzisiro yakaipa padhatabhesi. Uye zvakapesana - iyo yakaderera kukosha, iyo yakakwira mukana weOOM-Killer kupindira, asi dhizaini dhizaini zvakare yakakwira. Iko kukosha kweiyo 60, asi kana dhatabhesi rese richikwana mundangariro, zviri nani kuseta kukosha ku1.
Migumisiro
Usarega "mhondi" iri muOOM-Killer ikuvhundutsa. Muchiitiko ichi, mhondi ichave muponesi wehurongwa hwako. Iyo "inouraya" maitiro akaipisisa uye inoponesa sisitimu kubva pakuputsika. Kuti udzivise kushandisa OOM-Killer kumisa PostgreSQL, set to vm.overcommit_memory kukosha 2. Izvi hazvivimbisi kuti OOM-Killer haizofaniri kupindira, asi ichaderedza mukana wekumanikidzira nzira yePostgreSQL kugumisa.
Source: www.habr.com
