Kukhazikitsa Wopha Wosakumbukira mu Linux za PostgreSQL

Kukhazikitsa Wopha Wosakumbukira mu Linux za PostgreSQL

Pamene mu Linux Seva ya database imatha mwadzidzidzi, ndipo chifukwa chake chiyenera kudziwika. Pakhoza kukhala zifukwa zingapo. Mwachitsanzo, Mtengo wa SIGSEGV - kulephera chifukwa cha cholakwika mu seva yakumbuyo. Koma izi ndizosowa. Nthawi zambiri, mumangosowa malo a disk kapena kukumbukira. Ngati mulibe malo a disk, pali njira imodzi yokha yotulukira - kumasula malo ndikuyambitsanso database.

Out-Of-Memory Killer

Pamene iwe Seva kapena njirayo yatha kukumbukira, Linux Choyimitsa Choyimitsa Chopanda Memory chimapereka njira ziwiri: kusokoneza dongosolo lonse kapena kuthetsa njira (pulogalamu) yomwe ikudya kukumbukira. Ndi bwino, ndithudi, kuthetsa njira ndikupulumutsa OS kuti isagwe. Mwachidule, Choyimitsa Chopanda Memory ndi njira yomwe imathetsa pulogalamu kuti ipulumutse kernel kuti isagwe. Imasiya pulogalamu kuti OS igwire ntchito. Choyamba tiyeni tikambirane momwe OOM imagwirira ntchito komanso momwe tingailamulire, kenako tiwone momwe OOM Killer imasankhira mapulogalamu oti athetse.

Chimodzi mwa ntchito zazikulu Linux — Gawani kukumbukira ku njira zomwe akupempha. Kawirikawiri, njira kapena pulogalamu imapempha kukumbukira kuchokera ku OS koma sikugwiritsa ntchito kwathunthu. Ngati OS ipereka kukumbukira kwa aliyense amene akuipempha koma sakukonzekera kuigwiritsa ntchito, dongosololi lidzatha msanga kukumbukira, ndipo dongosololi lidzagwa. Pofuna kupewa izi, OS imasunga kukumbukira kwa njira koma siipereka kwenikweni. Kukumbukira kumagawidwa pokhapokha ngati njira ikufunadi kuigwiritsa ntchito. Nthawi zina OS ilibe kukumbukira kwaulere, koma imagawa kukumbukira ku njira, ndipo pamene njirayo ikufunikira, OS imagawa ngati ingathe. Vuto lake ndilakuti nthawi zina OS imasunga kukumbukira, koma ikafunika, palibe kukumbukira kwaulere, zomwe zimapangitsa kuti dongosolo ligwe. OOM imagwira ntchito yofunika kwambiri pankhaniyi, kuthetsa njira zopewera kernel kuti isachite mantha. Pamene njira ya PostgreSQL yathetsedwa mwamphamvu, uthenga wotsatira umawonekera mu log:

Out of Memory: Killed process 12345 (postgres).

Ngati dongosololi ndi lochepa pamtima ndipo silingathe kumasulidwa, ntchitoyi imatchedwa out_of_memory. Pakadali pano, ali ndi chinthu chimodzi chokha choti achite - kumaliza njira imodzi kapena zingapo. Kodi OOM-wakupha athetse ntchitoyi nthawi yomweyo kapena adikire? Mwachiwonekere, pamene out_of_memory imatchedwa, ndi chifukwa chodikira ntchito ya I / O kapena paging ku disk. Chifukwa chake, wakupha wa OOM ayenera kuchita macheke ndipo, potengera iwo, asankhe kuti ntchitoyi iyenera kuthetsedwa. Ngati macheke onse omwe ali pansipa ali abwino, OOM ithetsa ntchitoyi.

Kusankha njira

Pamene kukumbukira kutha, ntchitoyo imatchedwa out_of_memory(). Ili ndi ntchito select_bad_process(), yomwe imalandira kuwunika kuchokera ku ntchitoyi badness(). Njira "yoipitsitsa" idzayang'aniridwa. Ntchito badness() amasankha njira motsatira malamulo ena.

  1. Kernel imafunika kukumbukira pang'ono yokha.
  2. Muyenera kumasula zokumbukira zambiri.
  3. Palibe chifukwa chothetsa njira zomwe zikugwiritsa ntchito kukumbukira pang'ono.
  4. Njira zochepa ziyenera kumalizidwa.
  5. Ma algorithms ovuta omwe amawonjezera mwayi womaliza panjira zomwe wogwiritsa ntchitoyo akufuna kumaliza.

Atamaliza macheke onsewa, OOM imayang'ana mphambu (oom_score). OOM amasankha oom_score ndondomeko iliyonse, ndiyeno kuchulukitsa mtengo uwu ndi kuchuluka kwa kukumbukira. Njira zokhala ndi zikhalidwe zazikulu ndizosavuta kugwidwa ndi OOM Killer. Njira zogwirizanirana ndi wogwiritsa ntchito mizu zimakhala zocheperako ndipo sizingakakamizidwe kuthetsedwa.

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

ID ya Postgres process ndi 3813, kotero mu chipolopolo china ndizotheka kupeza mphambu pogwiritsa ntchito kernel parameter. oom_score:

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

Ngati simukufuna kuti OOM-Killer aphe njirayi, pali njira inanso: oom_score_adj. Onjezani mtengo woyipa waukulu kuti muchepetse mwayi womaliza ntchito yomwe mumaikonda.

sudo echo -100 > /proc/3813/oom_score_adj

Kukhazikitsa mtengo oom_score_adj, ikani OOMScoreAdjust mu block block:

[Service]
OOMScoreAdjust=-1000

Kapena ntchito oomprotect mu timu rcctl.

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

Kukakamiza kuthetsa ndondomeko

Njira imodzi kapena zingapo zikasankhidwa kale, OOM-Killer imayimbira ntchitoyi oom_kill_task(). Ntchitoyi imatumiza chizindikiro chothetsa ntchito. Ngati kukumbukira kukumbukira oom_kill() Imayimbira ntchitoyi kuti itumize chizindikiro cha SIGKILL pakuchitapo kanthu. Uthenga umalembedwa ku kernel log.

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

Momwe mungaletsere OOM-Killer

В Linux Mukhoza kuyatsa kapena kuletsa OOM-Killer (ngakhale kuti yomalizayi siikulimbikitsidwa). Kuti muyatse kapena kuiletsa, gwiritsani ntchito gawoli vm.oom-kill. Kuti mutsegule OOM-Killer panthawi yothamanga, yesani lamulo sysctl.

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

Kuti mulepheretse OOM-Killer, tchulani mtengo 0 mu lamulo lomwelo:

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

Zotsatira za lamuloli sizidzapulumutsidwa mpaka kalekale, koma mpaka kuyambiranso koyamba. Ngati mukufuna kulimbikira kwambiri, onjezani mzerewu pafayilo /etc/sysctl.conf:

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

Njira ina yothandizira ndikuyimitsa ndikulemba kusintha panic_on_oom. Mtengo ukhoza kuwonedwa nthawi zonse /proc.

$ cat /proc/sys/vm/panic_on_oom
0

Ngati muyika mtengo kukhala 0, ndiye kuti kukumbukira kukatha, sipadzakhala mantha a kernel.

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

Ngati muyika mtengo ku 1, ndiye kuti kukumbukira kukatha, mantha a kernel adzachitika.

echo 1 > /proc/sys/vm/panic_on_oom

OOM-Killer ikhoza kuyatsidwa ndi kuzimitsidwa, monga tanenera kale. Linux ingasunge zokumbukira zambiri kuposa zomwe zilipo, koma osagawa, ndipo khalidweli limayendetsedwa ndi kernel parameter LinuxChosinthikacho ndi chomwe chimayambitsa izi. vm.overcommit_memory.

Mutha kufotokozera za izi:

0: Kernel yokha imasankha ngati isungire kukumbukira kochuluka. Iyi ndi mtengo wokhazikika m'mitundu yambiri. Linux.
1: Kernel nthawi zonse imasunga kukumbukira kowonjezera. Izi ndizowopsa, chifukwa kukumbukira kumatha kutha, chifukwa, mwina, tsiku lina njira zidzafunika.
2: kernel sichisunga kukumbukira zambiri kuposa zomwe zafotokozedwa mu parameter overcommit_ratio.

Ndi parameter iyi, mumatchula kuchuluka kwa kukumbukira komwe kumaloledwa kusungidwa mopitirira muyeso. Ngati palibe malo, palibe kukumbukira komwe kwaperekedwa, ndipo kusungitsako kudzakanidwa. Iyi ndiye njira yotetezeka kwambiri yomwe ikulimbikitsidwa ku PostgreSQL. OOM-Killer imakhudzidwa ndi chinthu china - kusinthasintha, komwe kumayendetsedwa ndi kusinthika cat /proc/sys/vm/swappiness. Makhalidwe awa amauza kernel momwe angagwiritsire ntchito paging. Kukwera kwamtengo wapatali, sikutheka kuti OOM idzathetsa ndondomekoyi, koma chifukwa cha ntchito za I / O zimakhala ndi zotsatira zoipa pa database. Ndipo mosemphanitsa - kutsika kwa mtengo, kumapangitsanso mwayi woti OOM-Killer alowererepo, koma magwiridwe antchito a database ndi apamwamba. Mtengo wokhazikika ndi 60, koma ngati nkhokwe yonse ikugwirizana ndi kukumbukira, ndi bwino kuyika mtengo kukhala 1.

Zotsatira

Musalole "wakupha" mu OOM-Killer akuwopsezeni. Pankhaniyi, wakuphayo adzakhala mpulumutsi wa dongosolo lanu. "Imapha" njira zoyipa kwambiri ndikupulumutsa dongosolo kuti lisawonongeke. Kupewa kugwiritsa ntchito OOM-Killer kuthetsa PostgreSQL, yambitsani vm.overcommit_memory mtengo 2. Izi sizikutanthauza kuti OOM-Killer sadzayenera kulowererapo, koma zidzachepetsa mwayi wokakamiza ndondomeko ya PostgreSQL kuti ithetse.

Source: www.habr.com

Gulani kuchititsa kodalirika kwamasamba okhala ndi chitetezo cha DDoS, ma seva a VPS VDS Gulani malo odalirika osungira mawebusayiti okhala ndi chitetezo cha DDoS, ma seva a VPS VDS | ProHoster