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.
- E manaʻomia e le kernel sina manatua itiiti mo ia lava.
- E tatau ona e fa'asa'oloto le tele o manatuaga.
- E le mana'omia le fa'amutaina o fa'agasologa o lo'o fa'aogaina ai sina manatua.
- E mana'omia ona fa'amae'aina faiga aupito maualalo.
- 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