
Mgbe n'ime Linux Ihe nkesa nchekwa data ahụ na-akwụsị na mberede, a ga-achọpụtakwa ihe kpatara ya. Enwere ike inwe ọtụtụ ihe kpatara ya. Dịka ọmụmaatụ, SIGSEGV - ọdịda n'ihi ahụhụ dị na sava azụ azụ. Mana nke a dị ụkọ. Ọtụtụ mgbe, ohere diski ma ọ bụ ebe nchekwa agwụla gị. Ọ bụrụ na ohere diski agwụla, enwere naanị otu ụzọ ị ga - esi wepụ ohere ma malitegharịa nchekwa data.
Onye na-egbughị ebe nchekwa
Mgbe ị ihe nkesa ma ọ bụ usoro ahụ agwụla ebe nchekwa, Linux Onye Na-egbu Ihe n'Eluigwe na-enye ngwọta abụọ: imebi sistemụ ahụ dum ma ọ bụ kwụsị usoro (ngwa) nke na-eripịa ebe nchekwa. N'ezie, ọ ka mma ịkwụsị usoro ahụ ma chekwaa OS ka ọ ghara ịda. Na nkenke, Onye Na-egbu Ihe n'Eluigwe na-apụta bụ usoro nke na-akwụsị ngwa iji chekwaa kernel ka ọ ghara ịda ada. Ọ na-achụpụ ngwa ahụ iji mee ka OS na-arụ ọrụ. Ka anyị buru ụzọ tụlee otu OOM si arụ ọrụ na otu esi achịkwa ya, wee lelee otu OOM Killer si ekpebi ngwa ndị a ga-akwụsị.
Otu n'ime ọrụ ndị bụ isi Linux — Kewaa ebe nchekwa na usoro mgbe ha rịọrọ ya. Dịka ọ na-adịkarị, usoro ma ọ bụ ngwa na-arịọ ebe nchekwa site na OS mana ọ naghị eji ya kpamkpam. Ọ bụrụ na OS kenye ebe nchekwa nye onye ọ bụla rịọrọ ya mana ọ naghị eme atụmatụ iji ya, sistemụ ahụ ga-agwụ ngwa ngwa na ebe nchekwa, sistemụ ahụ ga-ada. Iji gbochie nke a, OS na-echekwa ebe nchekwa maka usoro mana ọ naghị ekenye ya n'ezie. A na-ekenye ebe nchekwa naanị mgbe usoro chọrọ iji ya. Mgbe ụfọdụ OS enweghị ebe nchekwa efu, mana ọ na-ekenye ebe nchekwa na usoro, mgbe usoro ahụ chọrọ ya, OS na-ekenye ya ma ọ bụrụ na ọ nwere ike. Ihe na-adịghị mma bụ na mgbe ụfọdụ OS na-echekwa ebe nchekwa, mana mgbe ọ dị mkpa, enweghị ebe nchekwa efu, na-akpata ọdịda sistemụ. OOM na-arụ ọrụ dị mkpa na ọnọdụ a, na-akwụsị usoro iji gbochie kernel ịtụ ụjọ. Mgbe a kwụsịrị usoro PostgreSQL n'ike, ozi na-esonụ na-apụta na ndekọ ahụ:
Out of Memory: Killed process 12345 (postgres).Ọ bụrụ na usoro ahụ dị ala na ebe nchekwa na enweghị ike ịtọhapụ ya, a na-akpọ ọrụ ahụ out_of_memory. N'oge a, ọ nwere naanị otu ihe ọ ga-eme - mezue otu usoro ma ọ bụ karịa. Kwesịrị ka onye na-egbu OOM kwụsị ọrụ ozugbo ma ọ bụ ọ nwere ike ichere? N'ụzọ doro anya, mgbe a na-akpọ out_of_memory, ọ bụ n'ihi ichere ọrụ I/O ma ọ bụ paging na diski. Ya mere, onye na-egbu OOM ga-ebu ụzọ mee nyocha na, dabere na ha, kpebie na a ga-akwụsị usoro ahụ. Ọ bụrụ na nlele niile dị n'okpuru dị mma, OOM ga-akwụsị usoro a.
Nhọrọ usoro
Mgbe ebe nchekwa kwụsịrị, a na-akpọ ọrụ ahụ out_of_memory(). O nwere ọrụ select_bad_process(), nke na-enweta nyocha site na ọrụ ahụ badness(). Usoro "kachasị njọ" ga-ezubere iche. Ọrụ badness() na-ahọrọ usoro dịka iwu ụfọdụ siri dị.
- kernel chọrọ ụfọdụ ebe nchekwa kacha nta maka onwe ya.
- Ịkwesịrị ịtọhapụ ọtụtụ ebe nchekwa.
- Ọ dịghị mkpa ịkwụsị usoro ndị na-eji obere ebe nchekwa.
- Ekwesịrị imecha usoro kacha nta.
- Algọridim mgbagwoju anya nke na-abawanye ohere nke ịmecha maka usoro ndị ahụ nke onye ọrụ n'onwe ya chọrọ imecha.
N'ịbụ onye dechara nlele ndị a niile, OOM na-enyocha akara ahụ (oom_score). OOM na-ahọpụta oom_score usoro nke ọ bụla, wee mụbaa uru a site na ọnụọgụ nke ebe nchekwa. Usoro nwere ụkpụrụ buru ibu nwere ike ịdaba na onye na-egbu OOM. Usoro ejikọtara na onye ọrụ mgbọrọgwụ nwere akara dị ala ma ọ dị obere ka a ga-amanye ịkwụsị.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)NJ usoro Postgres bụ 3813, yabụ na shei ọzọ, enwere ike nweta akara ahụ site na iji paramita kernel a. oom_score:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2Ọ bụrụ na ịchọghị OOM-Killer igbu usoro a ma ọlị, enwere nhọrọ kernel ọzọ: oom_score_adj. Tinye nnukwu uru na-adịghị mma iji belata ohere ịmecha usoro ị ji kpọrọ ihe.
sudo echo -100 > /proc/3813/oom_score_adjIji tọọ uru oom_score_adj, tọọ OOMScoreAdjust na ngọngọ ọrụ:
[Service]
OOMScoreAdjust=-1000Ma ọ bụ jiri oomprotect na otu rcctl.
rcctl set <i>servicename</i> oomprotect -1000Mmanye nkwụsị nke usoro
Mgbe ahọpụtara otu ma ọ bụ karịa usoro, OOM-Killer na-akpọ ọrụ ahụ oom_kill_task(). Ọrụ a na-eziga mgbaama nkwụsị na usoro. N'ihe gbasara ụkọ ebe nchekwa oom_kill() Na-akpọ ọrụ a ka izipu mgbaama SIGKILL na usoro a. A na-edere ozi na ndekọ kernel.
Out of Memory: Killed process [pid] [name].Otu esi ejikwa OOM-Killer
В Linux I nwere ike ime ka OOM-Killer rụọ ọrụ ma ọ bụ gbanyụọ ya (ọ bụ ezie na anaghị atụ aro nke ikpeazụ). Iji mee ka ọ rụọ ọrụ ma ọ bụ gbanyụọ ya, jiri paramita ahụ. vm.oom-kill. Iji mee ka OOM-Killer rụọ ọrụ n'oge a na-agba ọsọ, gbaa iwu ahụ sysctl.
sudo -s sysctl -w vm.oom-kill = 1Iji gbanyụọ OOM-Killer, ezipụta uru 0 n'otu iwu ahụ:
sudo -s sysctl -w vm.oom-kill = 0A gaghị echekwa nsonaazụ nke iwu a ruo mgbe ebighị ebi, mana ọ bụ naanị ruo mgbe mbido mbụ. Ọ bụrụ na ịchọrọ nkwụsi ike karịa, tinye ahịrị a na faịlụ ahụ /etc/sysctl.conf:
echo vm.oom-kill = 1 >>/etc/sysctl.confỤzọ ọzọ iji mee ka ma gbanyụọ bụ ide mgbanwe panic_on_oom. Enwere ike ịlele uru ahụ mgbe niile /proc.
$ cat /proc/sys/vm/panic_on_oom
0Ọ bụrụ na ịtọọ uru na 0, mgbe ebe nchekwa gwụchara, ụjọ agaghị enwe kernel.
$ echo 0 > /proc/sys/vm/panic_on_oomỌ bụrụ na ịtọọ uru na 1, mgbe ebe nchekwa ahụ kwụsịrị, ụjọ ga-eme kernel.
echo 1 > /proc/sys/vm/panic_on_oomEnwere ike ịgbanwuo ma ọ bụ gbanyụọ OOM-Killer, dịka anyị kwurula. Linux nwere ike ịchekwa ebe nchekwa karịa maka usoro dị, mana ọ gaghị ekenye ya n'ezie, a na-ejikwa paramita kernel achịkwa omume a. LinuxIhe na-agbanwe agbanwe bụ ihe kpatara nke a. vm.overcommit_memory.
Ị nwere ike ịkọwapụta ụkpụrụ ndị a maka ya:
0: Kernel n'onwe ya na-ekpebi ma ọ ga-echekwa oke ebe nchekwa. Nke a bụ uru ndabara na ọtụtụ ụdị. Linux.
1: Mkpụrụ ndụ ga-edobe ebe nchekwa ọzọ. Nke a dị ize ndụ, n'ihi na ebe nchekwa nwere ike ịpụ, n'ihi na, o yikarịrị, otu ụbọchị usoro ga-achọ ya.
2: kernel agaghị edobe ebe nchekwa karịa ka akọwapụtara na oke overcommit_ratio.
Site na oke a, ị na-akọwapụta pasentị ebe nchekwa ekwenyere ka edobere karịa. Ọ bụrụ na enweghị ohere maka ya, ọ nweghị ebe nchekwa ekenyela, a ga-ajụkwa ndoputa ahụ. Nke a bụ nhọrọ kacha dịrị nchebe maka PostgreSQL. OOM-Killer na-emetụta ihe ọzọ - ike mgbanwe, nke mgbanwe na-achịkwa cat /proc/sys/vm/swappiness. Ụkpụrụ ndị a na-agwa kernel ka esi edozi ibe akwụkwọ. Ọnụ ahịa dị elu karị, ọ ga-abụ na OOM ga-akwụsị usoro ahụ, ma n'ihi ọrụ I / O ọ na-enwe mmetụta ọjọọ na nchekwa data. Na nke ọzọ - ọnụ ahịa dị ala, nke dị elu nke ohere OOM-Killer ntinye aka, mana arụmọrụ nchekwa data dịkwa elu. Uru ndabara bụ 60, mana ọ bụrụ na nchekwa data niile dabara na ebe nchekwa, ọ ka mma ịtọ uru na 1.
Nsonaazụ
Ekwela ka "onye na-egbu" na OOM-Killer mee gị ụjọ. N'okwu a, onye na-egbu egbu ga-abụ onye nzọpụta nke usoro gị. Ọ "na-egbu" usoro kachasị njọ ma na-azọpụta usoro ahụ site na ịdaba. Iji zere inwe iji OOM-Killer kwụsị PostgreSQL, tọọ ka vm.overcommit_memory uru 2. Nke a anaghị ekwe nkwa na OOM-Killer agaghị etinye aka, ma ọ ga-ebelata ohere nke ịmanye usoro PostgreSQL ka ọ kwụsị.
isi: www.habr.com
