Fa'atūina le Killer Out-Of-Memory Killer i Linux mo PostgreSQL

Fa'atūina le Killer Out-Of-Memory Killer i Linux mo PostgreSQL

Pe a faʻafuaseʻi ona tuʻu se server database i Linux, e tatau ona e suʻeina le mafuaʻaga. Atonu e tele mafuaaga. Faataitaiga, SIGSEGV - toilalo ona o se pusa i le pito i tua server. Ae e seasea. O le tele o taimi, na'o le leai o se avanoa o le disk po'o le manatua. Afai e te le maua le avanoa o le disk, e na o le tasi lava le auala e alu ese ai - faʻasaʻo avanoa ma toe amata le database.

Fasioti-Matua

A leai se mea e manatua e se server poʻo se faʻagasologa, e ofoina atu e Linux ni fofo se 2: faʻalavelaveina le polokalama atoa pe faʻamutaina le faagasologa (faʻaoga) o loʻo 'ai le manatua. E sili atu, ioe, e faʻamutaina le faagasologa ma faʻasaoina le OS mai le paʻu. I se faapuupuuga, Out-Of-Memory Killer o se faiga e faʻaumatia ai se talosaga e faʻasaoina ai le fatu mai le paʻu. E ositaulagaina le talosaga e faʻaauau pea le OS. Sei o tatou talanoaina muamua le auala e galue ai le OOM ma le auala e pulea ai, ona vaʻai lea pe faʻapefea ona filifili le OOM Killer po o le fea talosaga e faamuta.

O se tasi o galuega autu a Linux o le tuʻufaʻatasia o manatuaga i faiga pe a latou talosagaina. E masani lava, o se faagasologa poʻo se talosaga e manaʻomia le manatua mai le OS, ae e le faʻaaogaina atoatoa. Afai e tuʻuina atu e le OS le manatuaga i tagata uma e fesili i ai ae leai ni fuafuaga e faʻaaogaina, e le o toe mamao ae uma le manatua ma o le a toilalo le faiga. Ina ia aloese mai lenei mea, o loʻo faʻapolopolo e le OS le manatuaga mo le faʻagasologa, ae le faʻasaʻolotoina. E na'o le taimi lava e fa'aaogaina ai e se faiga. E tupu e le maua e le OS se manatuaga saoloto, ae e tuʻuina atu le manatua i se faagasologa, ma pe a manaʻomia se gaioiga, e tuʻuina atu e le OS pe a mafai. O le itu i lalo o nisi taimi e teu ai le OS manatua, ae i le taimi saʻo e leai se manatuaga saoloto, ma paʻu le faiga. O le OOM e iai sona sao taua i lenei faʻaaliga ma faʻamutaina faiga e puipuia ai le fatu mai le fefe. Pe a faʻamalosia se faiga PostgreSQL e faʻamutaina, e aliali mai se feʻau i totonu o le ogalaau:

Out of Memory: Killed process 12345 (postgres).

Afai o le faiga e maualalo le manatua ma e le mafai ona faʻasaʻoloto, e taʻua le galuega out_of_memory. I lenei la'asaga, e tasi lava le mea o totoe e fai - fa'auma se tasi pe sili atu faiga. E tatau i le OOM-killer ona faʻamutaina vave le gaioiga pe mafai ona faʻatali? E manino lava, pe a valaʻau out_of_memory, e mafua ona o le faʻatali mo se gaioiga I / O poʻo le paging i le disk. O le mea lea, e tatau i le OOM killer ona faia muamua siaki ma, faʻavae i luga o latou, filifili e tatau ona faʻamutaina le faagasologa. Afai o siaki uma o loʻo i lalo e lelei, o le a faʻamutaina e le OOM le gaioiga.

Fa'agasologa filifiliga

A uma le manatua, e valaʻau le galuega out_of_memory(). E iai lana galuega select_bad_process(), lea e maua se iloiloga mai le galuega badness(). O le faiga "sili ona leaga" o le a taulaʻi. Galuega badness() filifilia se faiga e tusa ai ma nisi tulafono.

  1. E manaʻomia e le kernel sina manatua itiiti mo ia lava.
  2. E tatau ona e fa'asa'oloto le tele o manatuaga.
  3. E le mana'omia le fa'amutaina o fa'agasologa o lo'o fa'aogaina ai sina manatua.
  4. E mana'omia ona fa'amae'aina faiga aupito maualalo.
  5. Faʻalavelave algorithms e faʻateleina ai le avanoa e faʻamaeʻa ai mo na faiga e manaʻo le tagata faʻaoga e faʻamaeʻa.

A maeʻa uma nei siaki, suʻesuʻe e le OOM le togi (oom_score). OOM tofia oom_score faiga taitasi, ona faatele lea o lenei tau i le aofaiga o le manatua. O faʻagasologa e sili atu le taua e sili atu ona afaina i le OOM Killer. O faʻagasologa e fesoʻotaʻi ma le tagata faʻaoga aʻa e maualalo sikoa ma e itiiti le faʻamalosia e faʻamutaina.

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

O le Postgres process ID o le 3813, o lea i totonu o se isi atigi e mafai ona maua le sikoa e faʻaaoga ai le kernel parameter oom_score:

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

Afai e te le manaʻo i le OOM-Killer e faʻaumatia le faagasologa, o loʻo i ai se isi filifiliga fatu: oom_score_adj. Fa'aopoopo se tau leaga tele e fa'aitiitia ai avanoa e fa'amae'a ai se faiga e te fa'atauaina.

sudo echo -100 > /proc/3813/oom_score_adj

E seti se tau oom_score_adj, seti le OOMScoreAdjust i le poloka tautua:

[Service]
OOMScoreAdjust=-1000

Pe fa'aaoga oomprotect i se au rcctl.

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

Fa'amalo fa'amutaina se fa'agasologa

A maeʻa ona filifilia se tasi poʻo le sili atu, o le OOM-Killer e taʻua le galuega oom_kill_task(). O lenei galuega e auina atu se faailo e faamuta ai le faagasologa. I le tulaga o le le lava manatua oom_kill() Valaau lenei galuega e lafo se faailo SIGKILL i le faagasologa. Ua tusia se fe'au i le fatu log.

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

Faʻafefea ona pulea le OOM-Killer

I luga o Linux, e mafai ona e faʻatagaina pe faʻamalo le OOM-Killer (e ui lava e le fautuaina le mea mulimuli). Ina ia mafai pe faʻamalo faʻaaoga le parakalafa vm.oom-kill. Ina ia mafai ai le OOM-Killer i le taʻavale, taʻavale le poloaiga sysctl.

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

Ina ia faʻamalo le OOM-Killer, faʻamaonia le tau 0 i le poloaiga lava e tasi:

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

O le taunuuga o lenei poloaiga o le a le faasaoina e faavavau, ae naʻo seʻia oʻo i le toe faʻafouina muamua. Afai e te manaʻomia le faʻamalosi atili, faʻaopoopo le laina lea i le faila /etc/sysctl.conf:

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

O le isi auala e mafai ai ma faʻamalo o le tusia lea o se fesuiaiga panic_on_oom. E mafai ona siaki i taimi uma le tau /proc.

$ cat /proc/sys/vm/panic_on_oom
0

Afai e te setiina le tau i le 0, pe a uma le manatua, o le a leai se popole o fatu.

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

Afai e te setiina le tau i le 1, ona alu loa lea o le manatua, o le a tupu le popole o le fatu.

echo 1 > /proc/sys/vm/panic_on_oom

OOM-Killer e le gata e mafai ona ki ma tape. Ua uma ona matou fai atu e mafai e Linux ona faʻaagaga le tele o manatuaga mo faʻagasologa nai lo le avanoa e aunoa ma le tuʻuina atu, ma o lenei amio e pulea e se Linux kernel parameter. O le fesuiaiga e nafa ma lenei vm.overcommit_memory.

E mafai ona e faʻamaonia tulaga taua mo ia:

0: O le fatu lava ia e filifili pe fa'aagaga tele le manatua. O le faaletonu lea i le tele o lomiga o Linux.
1: O le fatu o le a faʻasaoina i taimi uma se manatuaga faaopoopo. E lamatia lenei mea, aua e mafai ona mou atu le manatua, aua, e foliga mai, o le a manaʻomia e le faʻagasologa se aso.
2: e le fa'apolopolo e le fatu le tele o manatuaga nai lo le fa'atonuga i le parakalafa overcommit_ratio.

Faatasi ai ma lenei parakalafa, e te faʻamaoti le pasene o le manatua e faʻatagaina ona faʻaagaga. Afai e leai se avanoa mo ia, e leai se manatua e tuʻuina atu, ma o le a faʻafitia le faʻaagaga. Ole filifiliga sili lea ona saogalemu e fautuaina mo PostgreSQL. OOM-Killer o loʻo aʻafia i se isi elemene - o le fesuiaiga o gafatia, lea e pulea e le fesuiaiga cat /proc/sys/vm/swappiness. O nei tulaga taua e taʻu atu ai i le fatu le auala e taulimaina ai le paging. O le maualuga o le tau, o le itiiti ifo o le a faʻamutaina e le OOM le faʻagasologa, ae ona o le I / O faʻagaioiga e i ai se aʻafiaga leaga i luga o faʻamaumauga. Ma le isi itu - o le maualalo o le tau, o le maualuga o le avanoa o le OOM-Killer intervention, ae o le faʻamaumauga o faʻamaumauga e maualuga atu foi. O le tau le aoga o le 60, ae afai e fetaui le database atoa i le mafaufau, e sili atu le setiina o le tau i le 1.

O taunuʻuga

Aua ne'i fa'afefeina oe e le "killer" i le OOM-Killer. I lenei tulaga, o le fasioti tagata o le a avea ma faaola o lau faiga. E "fasiotia" faiga sili ona leaga ma laveai le faiga mai le paʻu. Ina ia aloese mai le faʻaaogaina o le OOM-Killer e faʻamutaina PostgreSQL, seti i vm.overcommit_memory tau 2. E le faʻamautinoa ai e le tatau ona faʻalavelave le OOM-Killer, ae o le a faʻaitiitia ai le ono mafai ona faʻamalosia le faagasologa o le PostgreSQL e faʻamutaina.

puna: www.habr.com

Faaopoopo i ai se faamatalaga