Remediază eroarea „Prea multe fișiere deschise” a sinapsei Matrix pe systemd

Matrix Synapse poate porni normal și apoi poate înceta să mai accepte conexiuni, poate înregistra mesajul „Prea multe fișiere deschise” sau poate apărea blocat sub sarcină. Într-o instalare systemd, primul lucru de verificat este limita descriptorului de fișiere moștenită de procesul Synapse care rulează. Modificarea unui fișier cu limite al shell-ului ulimitsau editarea unui fișier cu limite PAM nu modifică de obicei limita pentru un serviciu pe care îl pornește systemd.

Pașii de mai jos se aplică unei gazde Linux unde Synapse rulează ca serviciu systemd. Unitatea poate fi denumită matrix-synapse.service, matrix-synapse@.service, sau ceva specific pachetului. Confirmați unitatea reală înainte de a copia comenzile. Dacă Synapse rulează în Docker, Kubernetes sau alt container, consultați secțiunea separată de mai jos.

Ce înseamnă „Prea multe fișiere deschise”?

Linux impune fiecărui proces o limită privind descriptorii de fișiere deschise. Un descriptor se poate referi la un fișier, socket, pipe sau altă resursă; prin urmare, conexiunile de rețea consumă și descriptori. Când un proces atinge limita sa soft, o încercare de a deschide sau accepta un alt descriptor poate eșua cu EMFILE. Linux are, de asemenea, o limită separată pentru tabelul de fișiere la nivel de sistem: epuizarea acesteia poate produce ENFILE. Creșterea limitei unui serviciu Synapse nu va rezolva o lipsă la nivel de sistem.

Întrebările frecvente oficiale privind administrarea Synapse menționează că o activitate intensă de conectare și federare poate utiliza mai multe handle-uri de fișiere și că epuizarea poate face ca serverul să nu mai accepte noi conexiuni TCP. Ghidul menționează creșterea limitei la cel puțin 4.096 în contextul setărilor implicite mai vechi, cum ar fi 1.024 sau 256. Tratați acest lucru ca un prag de depanare pentru situația descrisă, nu ca o recomandare universală de capacitate pentru fiecare server de acasă. Începeți prin a verifica limita efectivă și utilizarea reală.

Documentația getrlimit și prlimit din Linux descrie limitele soft și hard per proces. Synapse are și o soft_file_limitsetare; referința de configurare Synapse documentează o valoare implicită de zero, care îi spune lui Synapse să seteze limita soft la limita hard pe care o poate utiliza.

1. Confirmați unitatea și diagnosticați defecțiunea

Găsiți mai întâi numele propriu-zis al serviciului. În multe instalări de pachete, acesta este matrix-synapse.service, dar nu presupuneți acest nume dacă instalarea dvs. utilizează o unitate personalizată sau workers.

systemctl list-units --type=service --all | grep -i synapse
systemctl status matrix-synapse.service --no-pager
journalctl -u matrix-synapse.service --since "30 minutes ago" --no-pager

Căutați eroarea exactă, ora la care a început și dacă apare în timpul unui vârf de trafic, al activității de federare sau al unei reporniri. Apoi, inspectați limita raportată în prezent de systemd:

systemctl show matrix-synapse.service -p LimitNOFILE -p MainPID

LimitNOFILEarată limita configurată de managerul de servicii; nu este un număr de descriptori deschiși în prezent. O comandă shell, cum ar fi ulimit -nraportează doar limita shell-ului curent și nu este o dovadă a limitei serviciului.

2. Creșteți limita serviciilor systemd cu un drop-in

Folosește o funcție drop-in systemd, astfel încât actualizările pachetului să nu necesite editarea fișierului unit al furnizorului. Următoarea valoare este un exemplu, nu este garantată ca fiind ideală pentru fiecare server. Alege o limită cu spațiu peste utilizarea maximă observată și verifică compatibilitatea aplicației și a dependențelor înainte de a seta o valoare neobișnuit de mare.

sudo systemctl edit matrix-synapse.service

Adaugă asta sub noul meniu drop-in al editorului:

[Service]
LimitNOFILE=65536

Salvați și ieșiți, apoi reîncărcați systemd și reporniți Synapse într-o fereastră de mentenanță corespunzătoare:

sudo systemctl daemon-reload
sudo systemctl restart matrix-synapse.service
systemctl show matrix-synapse.service -p LimitNOFILE

O singură LimitNOFILEvaloare setează atât limita soft, cât și limita hard pentru serviciul din systemd. Manualul systemd permite, de asemenea, o soft:hardpereche. Limita soft nu poate depăși limita hard. Înainte de a alege o valoare foarte mare, consultați documentația systemd.exec , care menționează problemele de compatibilitate pentru programele care utilizează vechea select(2)interfață cu descriptori peste 1.023. Nu presupuneți că fiecare bibliotecă sau plugin din implementarea dvs. acceptă o limită arbitrară.

3. Verificați setările proprii ale Synapse și serviciile pentru lucrători

Dacă configurația Synapse este setată explicit soft_file_limitla un număr mic, este posibil ca setarea aplicației să mențină limita soft sub plafonul systemd. Căutați în fișierele de configurare active și în configurația inclusă cheia respectivă. Fie eliminați o suprascriere inutilă, fie setați-o în mod deliberat; valoarea implicită documentată de zero solicită Synapse să își ridice limita soft la limita hard disponibilă.

Pentru o implementare multi-proces, fiecare lucrător este un proces separat și poate fi pornit de o unitate separată sau o instanță șablon. Creșterea limitei serviciului principal nu dovedește automat că fiecare lucrător are limita dorită. Inspectați numele unităților lucrătoare reale cu systemctl list-units, apoi aplicați și verificați opțiunea drop-in corespunzătoare pentru fiecare serviciu care o necesită.

În mod similar, setările din /etc/security/limits.confși dintr-un shell de autentificare ulimitnu guvernează, în general, un serviciu de sistem lansat direct de systemd. Pentru această configurare, modificați limita de resurse a unității și verificați-o în procesul pe care systemd l-a pornit efectiv.

4. Dacă Synapse rulează într-un container

O suprascriere systemd la nivel de gazdă pentru un serviciu diferit nu modifică automat limita de descriptori de fișiere a unui container. Configurați nivelul de execuție sau de orchestrare al containerului. Pentru Docker Compose, definiția serviciului acceptă per container ulimits; un exemplu este:

services:
  synapse:
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

Numărul este ilustrativ; dimensionați-l în funcție de utilizare și de limitele gazdei. Referința serviciului Compose din Docker documentează ulimitssetarea. Începând cu Docker Engine 29, notele de lansare ale Docker descriu o modificare a limitei implicite nofile asociate cu containerd 2.1.5: containerele pot primi 1.024 în loc de valoarea implicită anterioară de 1.048.576. Dacă problema a apărut după o actualizare a motorului, verificați limita efectivă a containerului și setați explicit ulimit-ul necesar în configurația de implementare. Consultați notele de lansare ale Docker Engine 29 și referința de rulare a dockerului .

5. Verificați limita procesului Synapse care rulează

După repornire, verificați limita la nivel de proces, nu doar configurația systemd. Obțineți PID-ul principal și inspectați limitele raportate de kernel:

PID=$(systemctl show --property=MainPID --value matrix-synapse.service)
grep "Max open files" "/proc/$PID/limits"
find "/proc/$PID/fd" -mindepth 1 -maxdepth 1 | wc -l

Dacă PID-ul principal este zero sau aparține unui wrapper și nu Synapse, identificați procesul Synapse în grupul de control al serviciului și inspectați acel PID în schimb. Numărul de descriptori este o instantanee; repetați-o în timpul încărcării reprezentative. Confirmați că „Max open files” reflectă limitele soft și hard intenționate, că numărul rămâne confortabil sub limita soft și că jurnalul nu mai raportează eroarea.

Dacă numărul continuă să crească până când atinge noul plafon, este posibil ca limita să nu facă decât să amâne eșecul. Întrebările frecvente despre Synapse menționează că solicitările blocate sau lente pot fi relevante atunci când se investighează epuizarea fișierelor. Examinați jurnalele și procesarea solicitărilor înconjurătoare, comparați numărul descriptorilor în timp și investigați o posibilă scurgere de informații sau conexiuni persistente în mod neașteptat, în loc să continuați să creșteți limita orbește.

Când creșterea limitei per serviciu nu este suficientă

Dacă jurnalele raportează o eroare de epuizare a tabelei de fișiere la nivel de sistem, cum ar fi ENFILE, inspectați utilizarea la nivel de gazdă și alte servicii; o LimitNOFILEmodificare per serviciu nu va crește capacitatea kernelului la nivel de sistem. Evitați modificarea limitelor globale ale kernelului fără a confirma eroarea și a înțelege impactul la nivel de gazdă. Dacă limita raportată de serviciu rămâne scăzută după o instalare drop-in, executați systemctl cat matrix-synapse.servicepentru a confirma că instalarea drop-in-ului este încărcată, verificați numele unității, reîncărcați systemd și reporniți unitatea corectă.

Autoverificare rapidă

  • Ai identificat unitatea sau containerul exact Synapse care înregistrează eroarea?
  • Raportează systemctl showlimita prevăzută pentru acea unitate?
  • Afișează /proc/<Synapse-PID>/limitslimitele soft și hard intenționate după repornire?
  • Este numărul descriptorilor sub limita soft în condiții de sarcină maximă normală?
  • Sunt unitățile de lucru și setările containerului verificate separat, acolo unde este cazul?
  • Eroarea s-a oprit sau utilizarea continuă să crească spre noul plafon?

Dacă toate verificările la nivel de proces trec cu succes și eroarea s-a oprit în timpul traficului reprezentativ, modificarea limitei systemd funcționează. Dacă descriptorii continuă să se acumuleze sau sistemul raportează o lipsă globală, continuați să investigați sursa, în loc să tratați o limită mai mare ca fiind soluția completă.

Surse

Lasă un comentariu

10 cele mai bune instrumente Ping Sweep pentru găsirea dispozitivelor în rețeaua dvs.

10 cele mai bune instrumente Ping Sweep pentru găsirea dispozitivelor în rețeaua dvs.

Comparați 10 instrumente de scanare ping pentru descoperirea rapidă a rețelelor LAN, scanarea multi-platformă și gestionarea adreselor IP. Aflați ce vă poate spune o scanare (sweep).

6 Cele mai bune instrumente de gestionare a rețelei pentru urmărirea performanței

6 Cele mai bune instrumente de gestionare a rețelei pentru urmărirea performanței

Comparați șase instrumente de gestionare a rețelei pentru monitorizarea performanței, inclusiv acoperirea SNMP, maparea, alertele, modelele de implementare și compromisurile de costuri.

QoS în rețele: Ce face calitatea serviciilor și cum funcționează

QoS în rețele: Ce face calitatea serviciilor și cum funcționează

Aflați ce înseamnă QoS în rețele, cum marcajele DSCP și cozile de trafic prioritizează aplicațiile vocale, video și de business și ce nu poate remedia QoS.

Cel mai bun software de server SFTP pentru transferuri securizate de fișiere

Cel mai bun software de server SFTP pentru transferuri securizate de fișiere

Compară software-ul de server SFTP fiabil pentru Windows și Linux, inclusiv OpenSSH, Bitvise, SolarWinds și SFTPGo. Găsește soluția potrivită pentru nevoile tale de securitate și transfer de fișiere.

Cele mai bune practici de monitorizare a rețelei: Ce să urmăriți și ce instrumente să utilizați

Cele mai bune practici de monitorizare a rețelei: Ce să urmăriți și ce instrumente să utilizați

Construiți o monitorizare practică a rețelei cu o acoperire clară a dispozitivelor, indicatori de performanță utili, alerte acționabile și o comparație între SolarWinds NPM, PRTG și OpManager.

Cele mai bune 7 instrumente de gestionare a adreselor IP pentru echipele de rețea

Cele mai bune 7 instrumente de gestionare a adreselor IP pentru echipele de rețea

Comparați șapte instrumente de gestionare a adreselor IP pentru descoperirea subrețelelor, coordonarea DNS și DHCP, inventarul rețelei și IPAM open-source.

10 cele mai bune instrumente de scanare a rețelei pentru descoperirea dispozitivelor și a adreselor IP

10 cele mai bune instrumente de scanare a rețelei pentru descoperirea dispozitivelor și a adreselor IP

Comparați instrumentele de scanare a rețelei pentru descoperirea rapidă a dispozitivelor, scanări IP pe mai multe platforme și IPAM pentru întreprinderi, cu îndrumări privind potrivirea fiecărei opțiuni la rețeaua dvs.

Cum se utilizează Nmap pentru Traceroute și citirea căii de rețea

Cum se utilizează Nmap pentru Traceroute și citirea căii de rețea

Folosește opțiunea --traceroute din Nmap pentru a mapa salturi la o gazdă autorizată, a înțelege ieșirea saltului și a RTT-ului și a depana răspunsurile lipsă fără a suprascana.

6 Cele mai bune instrumente de monitorizare a serverelor Windows pentru o disponibilitate și o performanță mai bune

6 Cele mai bune instrumente de monitorizare a serverelor Windows pentru o disponibilitate și o performanță mai bune

Comparați șase instrumente de monitorizare Windows Server în funcție de colectarea datelor Windows, vizibilitatea aplicațiilor, modelul de implementare și licențierea pentru a găsi instrumentul potrivit.

6 instrumente de monitorizare a rețelei Linux pentru dispozitive, gazde și trafic

6 instrumente de monitorizare a rețelei Linux pentru dispozitive, gazde și trafic

Comparați șase instrumente de monitorizare a rețelei Linux pentru descoperirea dispozitivelor SNMP, grafice de interfață, metrici gazdă, verificări de servicii și fluxuri de trafic.