VPN-relee lakkab SSH-d vastu võtmast: failideskriptorite piirangud
Tunneli liiklus jätkub, samal ajal kui selle taga olev socat-relee keeldub uutest sessioonidest. Jälgige teekonda ja seejärel lugege päritud piirangut elusal PID-il.
WireGuardi käepigistus lõpeb endiselt, peer näitab endiselt hiljutist lõpp-punkti, ja ometi hangub selle taga oleva relee kaudu uus SSH-sessioon ilma bännerita. See kombinatsioon osutab tunnelist eemale ja protsessile, mis socketi vastu võtab. Relee nagu socat istub rakenduse teel oma deskriptorieelarve, oma laste ja oma päritud piirangutega. Allpool algab teekond kliendist ja lõpeb esimese komponendi juures, mis ei suuda veel ühte socketit avada.
Jälgige teekonda enne, kui numbrit muudate
Jälgige üht ebaõnnestunud päringut, selle asemel et mõelda tunnelist tervikuna. Klient kirjutab tunnelisse, VPN-deemon dekrüpteerib ja suunab ning relee võtab vastu teisel pool. Iga samm kulutab deskriptoreid ja see, mis tavaliselt otsa saab, on viimane.
Alustage päringuga, mida saate korrata, ja mõõtke selle aega. Kui TCP käepigistus lõpeb, aga rakenduse bännerit ei tule, võttis relee socketi ja jäi siis lapse sees või oma ülesvoolu jalas kinni. Kui käepigistus ise kunagi ei lõpe, on põhjus marsruutimine, tulemüür või kuulaja olek, mitte deskriptorite lagi. Kirjutage üles, millist kahest kujust nägite, sest need osutavad erinevatele protsessidele.
Loendage ka hüppeid, mis tööd dubleerivad. Hargnev kuulaja annab iga vastuvõetud socketi lapsele, kes hoiab oma koopiat, seega on tegelik kogusumma kogu puu omadus, mitte ainult vanema oma.
Lugege piirangut, mille relee päris
Ainus piirang, mis loeb, kuulub töötavale protsessile ja selle määras see, mis protsessi käivitas. Kesta sees ulimit -n tippimine kirjeldab kesta. Küsige teenusehaldurilt, mida see rakendas, ja kinnitage seejärel PID-il.
systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
Fail limits trükib pehme ja kõva lae nii, nagu protsess neid näeb. Madal pehme väärtus helde kõva väärtuse all tähendab, et deemonil on lubatud oma lagi tõsta, ja mõned teevad seda käivitamisel; võrdsed madalad väärtused tähendavad, et allikas on unit-fail.
Drop-in-failid laaditakse leksikograafilises järjekorras ja hilisemad failid võidavad, seega on systemctl cat vpn-relay.service autoriteetne vaade sellele, mis kehtib. Faili toimetamine, mida haldur kunagi ei loe, on kõige tavalisem põhjus, miks tõstetud number ei mõju.
Eraldage püsiv samaaegsus säilitatud olekust
Kaks protsessi võivad tabada sama lage seotud põhjustel ja ravimid erinevad. Nõudlus, mis jälgib kasulikke samaaegseid sessioone, on mahuküsimus. Kasv, mis jätkub pärast töö lõppu, on leke või hulk sessioone, mida keegi ei sulgenud.
Mõõtke tühikäigul, oma tavalisel tipphetkel ja veel paar minutit pärast koormuse lõppu. Avatud kirjete loendamine käsuga ls /proc/PID/fd | wc -l pehme piiri vastu ütleb teile vahe ja üks või kaks alla lae olev arv on kõva peatus, mitte aeglane tee.
Kui arv ei taha langeda, vaadake socketite olekuid, mitte summasid. Olekus CLOSE_WAIT istuvad deskriptorid tähendavad, et peer sulges ja teie pool ei sulgenud kunagi, mis on rakenduse elutsükli defekt, mida suurem piirang ainult edasi lükkab. Piirake ka laste mudelit: hargnev relee ilma samaaegsete laste ülempiirita ammendab deskriptorid, protsessipesad ja mälu korraga.
Kontrollige uut väärtust elusal protsessil
Pärast unit-faili toimetamist laadige haldur uuesti ja taaskäivitage teenus, sest ainult uuestilaadimine ei asenda kunagi piiranguid, mille töötav protsess on juba pärandanud. Kontrollige protsessil, mis tegelikult liiklust teenindab.
systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l
awk rida tagastab uue paari; kui see näitab endiselt vana, ei ole teie toimetatud drop-in see, mida laaditakse. ss arv on teie koormuse kontroll, seega avage oodatud arv sessioone ja jälgige, kuidas see tõuseb. Arv, mis jätkab tõusmist pärast nende sessioonide sulgemist, tähendab, et piirang ei olnud kunagi kogu probleem.
Iga suure tõstmisega käib üks hoiatus. Rakendused, mis küsitlevad select() abil, ei saa jälgida deskriptoreid üle FD_SETSIZE, mis on tüüpilistes buildides 1024, seega sellest kõrgemale tõstetud lagi võib tekitada tõrkeid, mis tunduvad seotud olevat. systemd täitmise viide kannab sama hoiatust teenuste jaoks, mida see käivitab.
Hoidke taaskäivitust tunneli kättesaadavusest eemal
Relee taaskäivitamine pillab selle aktiivsed sessioonid ja see on VPN-i langemisest eraldi sündmus. Korraldage muudatus nii, et tunnel püsib üleval, kui relee tsüklit teeb, ja hoiatage igaüht, kelle pikaajaline sessioon selle läbib.
Tagasipööramine on eelmine unit-fail pluss veel üks taaskäivitus ja see fail jääb paigale, kuni uus väärtus on üle elanud tööpäeva. Seejärel sulgege ring päringuga, mis algselt ebaõnnestus: üks uus SSH-sessioon läbi relee, üks ülekanne, mis on piisavalt pikk, et loeb, ja deskriptorite arv, mis naaseb oma tühikäigu tasemele.