Te whakatū i te Kaiwhakamate Mahara-kore i roto i te Linux mō PostgreSQL

Te whakatū i te Kaiwhakamate Mahara-kore i roto i te Linux mō PostgreSQL

I te wa i roto Linux Ka mutu ohorere te tūmau pātengi raraunga, ā, me whakatau te take. Tērā pea he maha ngā take. Hei tauira, SIGSEGV — i rahua na te hapa i roto i te tūmau o muri. Engari he onge tenei. I te nuinga o nga wa, ka pau noa te mokowā kōpae, te pūmahara rānei. Ki te pau te mokowā kōpae, kotahi noa te huarahi ki waho - whakawāteahia te mokowā ka tīmata anō i te pātengi raraunga.

Kaipatu Pumahara-waho

Ina koe tūmau ka pau rānei te mahara o te tukanga, Linux E rua ngā otinga a te Out-Of-Memory Killer: te tukinga i te pūnaha katoa, te whakamutu rānei i te tukanga (taupānga) e kai ana i te mahara. He pai ake, ko te tikanga, te whakamutu i te tukanga me te tiaki i te OS mai i te tukinga. I roto i te poto, ko te Out-Of-Memory Killer he tukanga e whakamutu ana i tētahi tono hei tiaki i te kernel mai i te tukinga. Ka patua te tono kia mau tonu te OS. Me matapaki tuatahi tātou me pēhea te mahi a te OOM me pēhea te whakahaere, kātahi ka titiro ki te whakatau a te OOM Killer ko ēhea tono hei whakamutu.

Ko tētahi o ngā mahi matua Linux — Tohaina te mahara ki ngā tukanga ina tonoa. Ko te tikanga, ka tono mahara te tukanga, te tono rānei mai i te pūnaha whakahaere engari kāore e whakamahia katoatia. Mena ka tohaina e te pūnaha whakahaere te mahara ki te hunga katoa e tono ana engari kāore e whakaaro ki te whakamahi, ka tere te pau o te mahara o te pūnaha, ā, ka hinga te pūnaha. Hei ārai i tēnei, ka rāhuitia e te pūnaha whakahaere te mahara mō tētahi tukanga engari kāore e tohaina. Ka tohaina te mahara ina hiahia noa te tukanga ki te whakamahi. I ētahi wā kāore he mahara wātea o te pūnaha whakahaere, engari ka tohaina e ia te mahara ki tētahi tukanga, ā, ina hiahiatia e te tukanga, ka tohaina e te pūnaha whakahaere mēnā ka taea. Ko te ngoikoretanga ko ētahi wā ka rāhuitia e te pūnaha whakahaere te mahara, engari ina hiahiatia, kāore he mahara wātea, ka puta he hinganga o te pūnaha. He mahi nui tā te OOM i tēnei horopaki, ka whakamutua ngā tukanga hei ārai i te mataku o te kernel. Ina whakamutua te tukanga PostgreSQL, ka puta te karere e whai ake nei i roto i te rangitaki:

Out of Memory: Killed process 12345 (postgres).

Mena he iti te mahara o te punaha me te kore e taea te wewete, ka kiia te mahi out_of_memory. I tenei wa, kotahi noa te mea e toe ana ki a ia - kia oti tetahi, neke atu ranei nga tukanga. Me whakamutua e te Kaipatu-OOM te mahi tonu ka tatari ranei? Ko te tikanga, ka karangahia te out_of_memory, me tatari mo tetahi mahi I/O, wharangi wharangi ranei ki te kōpae. No reira, me mahi te kaipatu OOM i nga arowhai tuatahi, a, i runga i a raatau, whakatau me whakamutu te mahi. Mena he pai nga arowhai i raro nei, ka whakamutua e OOM te mahi.

Tukatuka whiriwhiri

Ka pau te mahara, ka karangahia te mahi out_of_memory(). He mahi select_bad_process(), ka whiwhi i te arotakenga mai i te mahi badness(). Ko te tukanga "kino" ka arohia. Mahi badness() ka whiriwhiri i tetahi tukanga i runga i etahi ture.

  1. Me iti te mahara o te kernel mo ia ake.
  2. Me whakawātea koe i te maha o te mahara.
  3. Kaore he take ki te whakamutu i nga tukanga e whakamahi iti ana te mahara.
  4. Me whakaoti nga tukanga iti rawa.
  5. Ko nga algorithms matatini e whakanui ana i te tupono ki te whakaoti mo aua tukanga e hiahia ana te kaiwhakamahi ki te whakaoti.

Ka oti enei arowhai katoa, ka tirohia e OOM te kaute (oom_score). Ka tohatohahia e OOM oom_score ia tukanga, ka whakareatia tenei uara ki te nui o te mahara. Ko nga tukanga me nga uara nui ka kaha ki te hinga ki te OOM Killer. Ko nga tukanga e pa ana ki te kaiwhakamahi pakiaka he iti ake te kaute, ka iti ake te kaha ki te whakamutu.

postgres=# SELECT pg_backend_pid();
pg_backend_pid 
----------------
    3813
(1 row)

Ko te ID tukanga Postgres he 3813, no reira i tetahi atu anga ka taea te tiki i te kaute ma te whakamahi i tenei tawhā kernel oom_score:

vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2

Mena kaore koe e hiahia ki te OOM-Killer ki te patu i te tukanga, tera ano tetahi atu whiringa kernel: oom_score_adj. Taapirihia he uara kino nui hei whakaiti i te tupono ki te whakaoti i tetahi tukanga e wariuhia ana e koe.

sudo echo -100 > /proc/3813/oom_score_adj

Hei whakarite uara oom_score_adj, tautuhia te OOMScoreAdjust ki te paraka ratonga:

[Service]
OOMScoreAdjust=-1000

Whakamahi ranei oomprotect i roto i te kapa rcctl.

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

Whakamutua he tukanga

Ina kua kowhiria tetahi, neke atu ranei nga tukanga, ka karangahia e OOM-Killer te mahi oom_kill_task(). Ka tukuna e tenei mahi he tohu whakamutu ki te tukanga. Mena he ngoikore te mahara oom_kill() Karangatia tenei mahi ki te tuku tohu SIGKILL ki te mahi. Ka tuhia he karere ki te rangitaki kernel.

Out of Memory: Killed process [pid] [name].

Me pehea te whakahaere i te OOM-Killer

В Linux Ka taea e koe te whakahohe, te whakakore rānei i te OOM-Killer (ahakoa kāore i te tūtohutia te mea whakamutunga). Hei whakahohe, hei whakakore rānei, whakamahia te tawhā vm.oom-kill. Kia taea ai te OOM-Killer i te wa whakahaere, whakahaeretia te whakahau sysctl.

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

Hei whakakore i te OOM-Killer, tohua te uara 0 i roto i te whakahau ano:

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

Ko te hua o tenei whakahau e kore e ora ake ake, engari tae noa ki te whakaaraara tuatahi. Mena ka hiahia koe kia kaha ake, taapirihia tenei raina ki te konae /etc/sysctl.conf:

echo vm.oom-kill = 1 >>/etc/sysctl.conf

Ko tetahi atu huarahi ki te whakahohe me te mono ko te tuhi i tetahi taurangi panic_on_oom. Ka taea te taki i nga wa katoa te uara /proc.

$ cat /proc/sys/vm/panic_on_oom
0

Mena ka whakatauhia e koe te uara ki te 0, ka pau te mahara, karekau he pawera o te kernel.

$ echo 0 > /proc/sys/vm/panic_on_oom

Mena ka whakatauhia e koe te uara ki te 1, ka mutu te mahara, ka puta he riipene kernel.

echo 1 > /proc/sys/vm/panic_on_oom

Ka taea te whakakā me te whakaweto i te OOM-Killer, e ai ki tā mātou i kōrero ake nei. Linux tērā pea ka nui ake te mahara e rahuitia ana mō ngā tukanga i te mea e wātea ana, engari kāore e tino tohaina, ā, ko tēnei whanonga e whakahaerehia ana e te tawhā kernel LinuxKo te taurangi te kawenga mō tēnei. vm.overcommit_memory.

Ka taea e koe te tautuhi i nga uara e whai ake nei mo taua mea:

0: Ko te kernel tonu te whakatau mēnā ka nui rawa te mahara e rahuitia ana. Koinei te uara taunoa i roto i te nuinga o ngā putanga. Linux.
1: Ka rahuitia e te kernel te mahara taapiri i nga wa katoa. He mea whakararu tenei, na te mea ka pau te mahara, na te mea, tera pea, i tetahi ra ka hiahiatia e nga tukanga.
2: e kore e rahuitia e te kernel te mahara nui atu i te mea kua tohua ki te tawhā overcommit_ratio.

Ma tenei tawhā, ka tohua e koe te ōrau o te pūmahara e whakaaetia ana kia nui rawa te rahui. Mena kaore he waahi mo taua mea, kaore he maharatanga ka tohatohahia, ka whakakorehia te rahui. Koinei te waahanga haumaru e taunaki ana mo PostgreSQL. Ko te OOM-Killer ka pangia e tetahi atu huānga - te kaha whakawhiti, e whakahaeretia ana e te taurangi cat /proc/sys/vm/swappiness. Ko enei uara e whakaatu ana ki te kernel me pehea te hapai i te wharangi. Ko te teitei ake o te uara, ka iti ake pea ka whakamutua e te OOM te mahi, engari na nga mahi I/O ka pa he kino ki runga i te putunga korero. He rereke - ko te iti ake o te uara, ka nui ake te tupono o te wawaotanga OOM-Killer, engari he nui ake te mahinga o te papaunga raraunga. Ko te uara taunoa ko te 60, engari mena ka uru te katoa o te paataka raraunga ki te mahara, he pai ake te whakarite i te uara ki te 1.

Ngā putanga

Kaua e tukua te "kaipatu" i OOM-Killer kia mataku koe. I tenei keehi, ko te kaipatu hei kaiwhakaora mo to punaha. Ka "whakamate" i nga tukanga kino rawa atu, ka whakaora i te punaha mai i te pakaru. Hei karo i te whakamahi OOM-Killer ki te whakamutu i te PostgreSQL, tautuhia ki vm.overcommit_memory uara 2. Kaore tenei e kii ka kore a OOM-Killer e wawao, engari ka whakaitihia te tupono o te akiaki i te tukanga PostgreSQL kia mutu.

Source: will.com

Hokona te manaaki pono mo nga waahi me te tiaki DDoS, nga kaiwhakarato VPS VDS 🔥 Hokona he manaaki paetukutuku pono me te tiakitanga DDoS, ngā tūmau VPS VDS | ProHoster