Ịtọlite ​​​​Onye Na-egbu Ihe Na-anaghị Echeta Ihe n'ime Linux maka PostgreSQL

Ịtọlite ​​​​Onye Na-egbu Ihe Na-anaghị Echeta Ihe n'ime Linux maka PostgreSQL

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ị.

  1. kernel chọrọ ụfọdụ ebe nchekwa kacha nta maka onwe ya.
  2. Ịkwesịrị ịtọhapụ ọtụtụ ebe nchekwa.
  3. Ọ dịghị mkpa ịkwụsị usoro ndị na-eji obere ebe nchekwa.
  4. Ekwesịrị imecha usoro kacha nta.
  5. 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_adj

Iji tọọ uru oom_score_adj, tọọ OOMScoreAdjust na ngọngọ ọrụ:

[Service]
OOMScoreAdjust=-1000

Ma ọ bụ jiri oomprotect na otu rcctl.

rcctl set <i>servicename</i> oomprotect -1000

Mmanye 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 = 1

Iji gbanyụọ OOM-Killer, ezipụta uru 0 n'otu iwu ahụ:

sudo -s sysctl -w vm.oom-kill = 0

A 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_oom

Enwere 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

Zụta nnabata ntụkwasị obi maka saịtị nwere nchekwa DDoS, sava VPS VDS 🔥 Zụta ebe nrụọrụ weebụ a pụrụ ịtụkwasị obi na nchekwa DDoS, sava VPS VDS | ProHoster