WireGuard rokasspiediens joprojām tiek pabeigts, peer joprojām rāda nesenu galapunktu, un tomēr jauna SSH sesija caur starpniekserveri aiz tā karājas bez banera. Šī kombinācija norāda prom no tuneļa uz procesu, kas pieņem socket. Starpniekserveris kā socat sēž lietojumprogrammas ceļā ar savu deskriptoru budžetu, saviem bērniem un saviem mantotajiem ierobežojumiem. Zemāk esošā gājiens sākas pie klienta un apstājas pie pirmās sastāvdaļas, kas nevar atvērt vēl vienu socket.

Izsekojiet ceļu, pirms maināt skaitli

Izsekojiet vienam neveiksmīgam pieprasījumam, nevis spriediet par visu tuneli. Klients raksta tunelī, VPN dēmons atšifrē un maršrutē, un starpniekserveris pieņem otrā pusē. Katrs solis patērē deskriptorus, un tas, kas parasti beidzas, ir pēdējais.

Sāciet ar pieprasījumu, ko varat atkārtot, un izmēriet tā laiku. Ja TCP rokasspiediens tiek pabeigts, bet lietojumprogrammas baners nepienāk, starpniekserveris paņēma socket un pēc tam iestrēga bērnā vai savā augšupējā kājā. Ja pats rokasspiediens nekad netiek pabeigts, iemesls ir maršrutēšana, ugunsmūris vai klausītāja stāvoklis, nevis deskriptoru griesti. Pierakstiet, kuru no divām formām novērojāt, jo tās norāda uz dažādiem procesiem.

Saskaitiet arī lēcienus, kas dublē darbu. Atzarojies klausītājs katru pieņemto socket nodod bērnam, kas patur savu kopiju, tāpēc reālā summa ir visa koka īpašība, nevis tikai vecāka.

Nolasiet ierobežojumu, ko starpniekserveris mantojis

Vienīgais svarīgais ierobežojums pieder darbojošam procesam, un to noteica tas, kas šo procesu palaida. ulimit -n ierakstīšana shellā apraksta shellu. Pajautājiet pakalpojumu pārvaldniekam, ko tas piemēroja, pēc tam apstipriniet PID.

systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits

limits fails izdrukā mīkstos un cietos griestus tā, kā process tos redz. Zema mīksta vērtība zem dāsnas cietas vērtības nozīmē, ka dēmonam ir atļauts pacelt savus griestus, un daži to dara palaišanas laikā; vienādas zemas vērtības nozīmē, ka avots ir unit fails.

Drop-in faili tiek ielādēti leksikogrāfiskā secībā, un vēlākie faili uzvar, tāpēc systemctl cat vpn-relay.service ir autoritatīvs skats uz to, kas tiek piemērots. Faila rediģēšana, ko pārvaldnieks nekad nelasa, ir visbiežākais iemesls, kāpēc paaugstinātam skaitlim nav efekta.

Atdaliet stabilu vienlaicību no saglabātā stāvokļa

Divi procesi var sasniegt vienus un tos pašus griestus nesaistītu iemeslu dēļ, un līdzekļi atšķiras. Pieprasījums, kas seko noderīgām vienlaicīgām sesijām, ir jaudas jautājums. Izaugsme, kas turpinās pēc darba beigām, ir noplūde vai sesiju kopa, ko neviens nav aizvēris.

Mēriet tukšā stāvoklī, parastajā maksimumā un vēlreiz dažas minūtes pēc slodzes apstāšanās. Atvērto ierakstu skaitīšana ar ls /proc/PID/fd | wc -l pret mīksto ierobežojumu parāda starpību, un skaitlis viens vai divi zem griestiem ir ciets apstājums, nevis lēns ceļš.

Kad skaitlis atsakās krist, skatieties socket stāvokļus, nevis kopsummas. Deskriptori, kas sēž CLOSE_WAIT, nozīmē, ka peer aizvēra, bet jūsu puse nekad, un tas ir lietojumprogrammas dzīves cikla defekts, ko lielāks ierobežojums tikai atliek. Ierobežojiet arī bērnu modeli: atzarojies starpniekserveris bez vienlaicīgu bērnu griestiem vienlaikus izsmeļ deskriptorus, procesa slotus un atmiņu.

Pārbaudiet jauno vērtību dzīvajā procesā

Pēc unit rediģēšanas pārlādējiet pārvaldnieku un restartējiet pakalpojumu, jo tikai pārlāde nekad neaizstāj ierobežojumus, ko darbojošs process jau mantojis. Pārbaudiet procesā, kas faktiski apkalpo trafiku.

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 rinda atgriež jauno pāri; ja tā joprojām rāda veco, jūsu rediģētais drop-in nav tas, kas tiek ielādēts. ss skaits ir jūsu slodzes pārbaude, tāpēc atveriet gaidīto sesiju skaitu un vērojiet, kā tas kāpj. Skaitlis, kas turpina kāpt pēc šo sesiju aizvēršanas, nozīmē, ka ierobežojums nekad nav bijusi visa problēma.

Ar katru lielu palielinājumu nāk viens brīdinājums. Lietojumprogrammas, kas aptaujā ar select(), nevar novērot deskriptorus virs FD_SETSIZE, kas parastos būvējumos ir 1024, tāpēc virs tā pacelti griesti var radīt kļūmes, kas izskatās nesaistītas. systemd izpildes uzziņa satur to pašu brīdinājumu pakalpojumiem, ko tā palaiž.

Turiet restartu tālu no tuneļa pieejamības

Starpniekservera restarts nomet tā aktīvās sesijas, un tas ir atsevišķs notikums no VPN krituma. Sakārtojiet izmaiņas tā, lai tunelis paliktu augšā, kamēr starpniekserveris ciklē, un brīdiniet ikvienu, kura ilgā sesija to šķērso.

Atritināšana ir iepriekšējais unit fails plus vēl viens restarts, un šis fails paliek vietā, līdz jaunā vērtība pārdzīvo darba dienu. Pēc tam aizveriet cilpu ar pieprasījumu, kas sākotnēji neizdevās: viena jauna SSH sesija caur starpniekserveri, viena pārsūtīšana, kas ir pietiekami gara, lai būtu svarīga, un deskriptoru skaits, kas atgriežas tukšā stāvokļa līmenī.

Saistītie raksti