Ho theha Sebolai se sa Tsejoeng ka ho Sebetsa Linux bakeng sa PostgreSQL

Ho theha Sebolai se sa Tsejoeng ka ho Sebetsa Linux bakeng sa PostgreSQL

Ha o kena Linux Seva ea database e fela ka tšohanyetso, 'me sesosa se hloka ho fumanoa. Ho ka ba le mabaka a 'maloa. Mohlala, SIGSEGV - ho hloleha ka lebaka la bothata ho seva se ka morao. Empa sena ke seoelo. Hangata, o felloa ke sebaka sa disk kapa memori. Haeba u felloa ke sebaka sa disk, ho na le tsela e le 'ngoe feela ea ho tsoa - lokolla sebaka ebe u qala database hape.

'Molai ea sa Lebaleheng

Ha o seva kapa ts'ebetso e felloa ke mohopolo, Linux Sebolai sa Kantle ho Memori se fana ka ditharollo tse pedi: ho thula sistimi yohle kapa ho fedisa tshebetso (tshebediso) e jang memori. Ho molemo, ehlile, ho fedisa tshebetso mme o boloke OS hore e se ke ya thula. Ka bokhutshwane, Sebolai sa Kantle ho Memori ke tshebetso e fedisang tshebediso ho pholosa kernel hore e se ke ya thula. E tela tshebediso ho boloka OS e sebetsa. A re qaleng ka ho buisana ka hore na OOM e sebetsa jwang le hore na e ka laolwa jwang, ebe re sheba hore na OOM Killer e etsa qeto ya hore na ke ditshebediso dife tse lokelang ho fediswa.

E 'ngoe ea mesebetsi ea bohlokoa Linux — Abela memori lits'ebetsong ha ba e kopa. Ka tloaelo, ts'ebetso kapa ts'ebeliso e kopa memori ho tsoa ho OS empa ha e e sebelise ka botlalo. Haeba OS e abela memori ho bohle ba e kopang empa ba sa rera ho e sebelisa, sistimi e tla felloa ke memori kapele, 'me sistimi e tla oa. Ho thibela sena, OS e boloka memori bakeng sa ts'ebetso empa ha e le hantle ha e e abele. Memori e abeloa feela ha ts'ebetso e hlile e ikemiselitse ho e sebelisa. Ka linako tse ling OS ha e na memori ea mahala, empa e abela memori ts'ebetsong, 'me ha ts'ebetso e e hloka, OS e abela eona haeba e khona. Bothata ke hore ka linako tse ling OS e boloka memori, empa ha ho hlokahala, ha ho na memori ea mahala, e bakang ho putlama ha sistimi. OOM e bapala karolo ea bohlokoa boemong bona, e felisa lits'ebetso ho thibela kernel ho tšoha. Ha ts'ebetso ea PostgreSQL e emisoa ka matla, molaetsa o latelang o hlaha ho log:

Out of Memory: Killed process 12345 (postgres).

Haeba sistimi e le tlase mohopolong mme e ke ke ea lokolloa, ts'ebetso e bitsoa out_of_memory. Mothating ona, o na le ntho e le 'ngoe feela e setseng - ho phethela ts'ebetso e le' ngoe kapa ho feta. Na OOM-killer e lokela ho emisa ts'ebetso hang-hang kapa e ka ema? Ho hlakile hore ha ho bitsoa out_of_memory, ke ka lebaka la ho emela ts'ebetso ea I / O kapa paging ho disk. Ka hona, 'molai oa OOM o tlameha ho qala ho hlahloba' me, a ipapisitse le bona, a etse qeto ea hore ts'ebetso e tlameha ho felisoa. Haeba licheke tsohle tse ka tlase li nepahetse, OOM e tla emisa ts'ebetso.

Khetho ea ts'ebetso

Ha memori e fela, tshebetso e bitswa out_of_memory(). E na le mosebetsi select_bad_process(), e amohelang tlhahlobo ho tsoa mosebetsing badness(). Mokhoa o "mpe ka ho fetisisa" o tla lebisitsoe. Mosebetsi badness() e kgethang mokgoa ho ya ka melao e itseng.

  1. Kernel e hloka mohopolo o fokolang bakeng sa eona.
  2. U hloka ho lokolla mohopolo o mongata.
  3. Ha ho na tlhoko ea ho emisa lits'ebetso tse sebelisang mohopolo o fokolang.
  4. Ts'ebetso e fokolang e tlameha ho phethoa.
  5. Li-algorithms tse rarahaneng tse eketsang menyetla ea ho phethoa bakeng sa lits'ebetso tseo mosebelisi ka boeena a batlang ho li phetha.

Ha o qetile licheke tsena kaofela, OOM e hlahloba lintlha (oom_score). OOM e fana oom_score ts'ebetso e 'ngoe le e' ngoe, ebe e atisa boleng bona ka bongata ba mohopolo. Mekhoa e nang le litekanyetso tse kholoanyane e na le monyetla oa ho oela ho OOM Killer. Mekhoa e amanang le mosebelisi ea metso e na le lintlha tse tlase 'me ha ho bonolo hore e qobelloe ho emisa.

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

The Postgres process ID ke 3813, kahoo ka khetla e 'ngoe hoa khoneha ho fumana lintlha ka ho sebelisa parameter ena ea kernel. oom_score:

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

Haeba u sa batle hore OOM-Killer e bolaee ts'ebetso ho hang, ho na le khetho e 'ngoe ea kernel: oom_score_adj. Kenya boleng bo boholo bo fosahetseng ho fokotsa menyetla ea ho phethela ts'ebetso eo u e nkang e le ea bohlokoa.

sudo echo -100 > /proc/3813/oom_score_adj

Ho beha boleng oom_score_adj, seta OOMScoreAdjust sebakeng sa tšebeletso:

[Service]
OOMScoreAdjust=-1000

Kapa sebelisa oomprotect sehlopheng rcctl.

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

Qobella pheliso ea ts'ebetso

Ha ts'ebetso e le 'ngoe kapa tse ngata li se li khethiloe, OOM-Killer e letsetsa ts'ebetso oom_kill_task(). Ts'ebetso ena e romella lets'oao la ho emisa ts'ebetsong. Boemong ba khaello ea mohopolo oom_kill() E letsetsa tšebetso ena ho romella lets'oao la SIGKILL ts'ebetsong. Molaetsa o ngolloa ho kernel log.

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

Mokhoa oa ho laola OOM-Killer

В Linux O ka nolofalletsa kapa wa tima OOM-Killer (le hoja ya morao e sa kgothaletswe). Ho e nolofalletsa kapa ho e tima, sebedisa paramethara vm.oom-kill. Ho nolofalletsa OOM-Killer ka nako ea ho sebetsa, tsamaisa taelo sysctl.

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

Ho tima OOM-Killer, bolela boleng ba 0 ka taelo e tšoanang:

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

Sephetho sa taelo ena se ke ke sa bolokeha ka ho sa feleng, empa feela ho fihlela ho qala bocha. Haeba o hloka ho phehella ho eketsehileng, eketsa mola ona faeleng /etc/sysctl.conf:

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

Tsela e 'ngoe ea ho nolofalletsa le ho thibela ke ho ngola phetoho panic_on_oom. Boleng bo ka hlahlojoa kamehla /proc.

$ cat /proc/sys/vm/panic_on_oom
0

Haeba u beha boleng ho 0, joale ha memori e fela, ho ke ke ha e-ba le tšabo ea kernel.

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

Haeba u beha boleng ho 1, joale ha memori e fela, ho tla ba le tšabo ea kernel.

echo 1 > /proc/sys/vm/panic_on_oom

OOM-Killer e ka buloa le ho tingoa, joalo ka ha re se re boletse. Linux e ka boloka memori e ngata bakeng sa lits'ebetso ho feta e fumanehang, empa e sa e abele, 'me boitšoaro bona bo laoloa ke paramethara ea kernel LinuxMofuta o feto-fetohang ke oona o ikarabellang bakeng sa sena. vm.overcommit_memory.

O ka hlalosa litekanyetso tse latelang bakeng sa eona:

0: Kernel ka boeona e etsa qeto ea hore na e boloke memori e ngata haholo. Ena ke boleng ba kamehla liphetolelong tse ngata. Linux.
1: Kernel e tla lula e boloka mohopolo o eketsehileng. Sena se kotsi, hobane mohopolo o ka 'na oa fela, hobane, mohlomong, ka letsatsi le leng mekhoa e tla e hloka.
2: kernel e ke ke ea boloka mohopolo o fetang o boletsoeng paramenteng overcommit_ratio.

Ka paramethara ena, o totobatsa peresente ea memori e lumelletsoeng ho bolokoa ho feta tekano. Haeba ho se na sebaka sa eona, ha ho memori e fanoeng, 'me peheletso e tla haneloa. Ena ke khetho e sireletsehileng ka ho fetisisa e khothalletsoang PostgreSQL. OOM-Killer e angoa ke ntho e 'ngoe - bokhoni ba ho swapping, bo laoloang ke ho fetoha cat /proc/sys/vm/swappiness. Litekanyetso tsena li bolella kernel mokhoa oa ho sebetsana le paging. Ha boleng bo phahame, ha ho na monyetla oa hore OOM e felise ts'ebetso, empa ka lebaka la ts'ebetso ea I / O e na le phello e mpe ho database. Mme ka tsela e fapaneng - ha boleng bo tlase bo le tlase, menyetla ea ho kenella ha OOM-Killer e phahame, empa ts'ebetso ea database le eona e phahame. Boleng ba kamehla ke 60, empa haeba database eohle e lumellana le mohopolo, ho molemo ho beha boleng ho 1.

Liphello

Se ke oa lumella "'molai" ea ho OOM-Killer ho u tšosa. Tabeng ena, 'molai e tla ba mopholosi oa tsamaiso ea hau. E "bolaea" lits'ebetso tse mpe ka ho fetesisa mme e boloka sistimi hore e se ke ea senyeha. Ho qoba ho sebelisa OOM-Killer ho emisa PostgreSQL, beha ho vm.overcommit_memory boleng 2. Sena ha se tiise hore OOM-Killer e ke ke ea tlameha ho kenella, empa e tla fokotsa monyetla oa ho qobella mokhoa oa PostgreSQL hore o khaotse.

Source: www.habr.com

Reka sebaka se tšepahalang sa libaka tse nang le ts'ireletso ea DDoS, li-server tsa VPS VDS 🔥 Reka sebaka se tšepahalang sa ho amohela webosaete ka tšireletso ea DDoS, li-server tsa VPS VDS | ProHoster