
Pe a i totonu Linux E muta faafuaseʻi le 'auʻaunaga faʻamaumauga, ma e manaʻomia ona iloa le mafuaʻaga. E mafai ona i ai ni mafuaʻaga se tele. Mo se faʻataʻitaʻiga, 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 e sapalai pe ua uma le manatua o le faagasologa, Linux E lua fofo e ofoina mai e le Out-Of-Memory Killer: fa'aleagaina le faiga atoa pe fa'amutaina le faiga (polokalame) o lo'o 'aina le manatua. E sili atu, ioe, le fa'amutaina o le faiga ma fa'asaoina le OS mai le fa'aleagaina. I se aotelega, o le Out-Of-Memory Killer o se faiga e fa'amutaina ai se talosaga e fa'asaoina ai le kernel mai le fa'aleagaina. E ositaulagaina ai le talosaga ina ia fa'aauau pea ona fa'agaoioia le OS. Se'i 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 e le OOM Killer po'o a talosaga e fa'amutaina.
O se tasi o galuega autÅ« Linux ā Tu'uina atu le manatua i fa'agasologa pe a latou talosagaina. E masani lava, o se fa'agasologa po'o se talosaga e talosagaina le manatua mai le OS ae le fa'aaogaina atoa. Afai e tu'uina atu e le OS le manatua i tagata uma e talosagaina ae le fuafua e fa'aaoga, o le a vave ona uma le manatua o le polokalama, ma o le a malepe le polokalama. Ina ia puipuia lenei mea, e teuina e le OS le manatua mo se fa'agasologa ae le tu'uina atu moni. E tu'uina atu le manatua pe a fa'amoemoe moni se fa'agasologa e fa'aaoga. O nisi taimi e leai se manatua saoloto o le OS, ae e tu'uina atu le manatua i se fa'agasologa, ma a mana'omia e le fa'agasologa, e tu'uina atu e le OS pe a mafai. O le itu le lelei o nisi taimi e teuina e le OS le manatua, ae a mana'omia, e leai se manatua saoloto, e mafua ai ona malepe le polokalama. E taua tele le matafaioi a le OOM i lenei tulaga, e fa'amutaina ai fa'agasologa e puipuia ai le kernel mai le popole. A fa'amalosia le fa'amutaina o le fa'agasologa PostgreSQL, o le fe'au lenei e aliali mai i le log:
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
2Afai 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_adjE seti se tau oom_score_adj, seti le OOMScoreAdjust i le poloka tautua:
[Service]
OOMScoreAdjust=-1000Pe fa'aaoga oomprotect i se au rcctl.
rcctl set <i>servicename</i> oomprotect -1000Fa'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
РLinux E mafai ona e fa'agaoioia pe tapeina le OOM-Killer (e ui e le fautuaina le mulimuli). Mo le fa'agaoioia pe tapeina, 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 = 1Ina ia faʻamalo le OOM-Killer, faʻamaonia le tau 0 i le poloaiga lava e tasi:
sudo -s sysctl -w vm.oom-kill = 0O 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.confO 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
0Afai 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_oomAfai 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_oomE pei ona ua uma ona matou ta'ua, e mafai ona ki ma tape le OOM-Killer. Linux atonu e tele atu le manatua e teuina mo faiga fa'agasologa nai lo le mea e maua, ae le'i fa'atulagaina moni, ma o lenei amioga e pulea e se parakalafa kernel LinuxO le fesuia'iga e nafa ma lenei mea. vm.overcommit_memory.
E mafai ona e faʻamaonia tulaga taua mo ia:
0: O le kernel lava ia e filifili pe tatau ona tele naua le manatua e teuina. O le tulaga masani lea i le tele o lomiga. 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
