Napraw błąd Matrix Synapse „Zbyt wiele otwartych plików” w systemied

Matrix Synapse może uruchomić się normalnie, a następnie przestać akceptować połączenia, zgłosić błąd „Zbyt wiele otwartych plików” lub zawiesić się pod obciążeniem. W przypadku instalacji systemd, pierwszą rzeczą, którą należy sprawdzić, jest limit deskryptorów plików dziedziczony przez działający proces Synapse. Zmiana ulimitpliku limitów powłoki lub edycja pliku PAM zazwyczaj nie zmienia limitu dla usługi uruchamianej przez systemd.

Poniższe kroki dotyczą hosta Linux, na którym Synapse działa jako usługa systemd. Jednostka może nosić nazwę matrix-synapse.service, matrix-synapse@.servicelub inną, charakterystyczną dla danego pakietu. Przed skopiowaniem poleceń należy potwierdzić prawdziwą jednostkę. Jeśli Synapse działa w Dockerze, Kubernetesie lub innym kontenerze, zapoznaj się z osobną sekcją poniżej.

Co oznacza „Zbyt wiele otwartych plików”?

Linux nakłada na każdy proces limit otwartych deskryptorów plików. Deskryptor może odnosić się do pliku, gniazda, potoku lub innego zasobu; połączenia sieciowe również zużywają deskryptory. Gdy proces osiągnie swój limit, próba otwarcia lub zaakceptowania innego deskryptora może się nie powieść z błędem EMFILE. Linux ma również oddzielny systemowy limit tablicy plików: jego wyczerpanie może spowodować ENFILE. Podniesienie limitu jednej usługi Synapse nie rozwiąże problemu braku zasobów w całym systemie.

Oficjalne FAQ administracyjne Synapse podaje, że wysoka aktywność połączeń i federacji może wykorzystywać wiele uchwytów plików, a wyczerpanie zasobów może spowodować, że serwer przestanie akceptować nowe połączenia TCP. W wytycznych wspomniano o zwiększeniu limitu do co najmniej 4096 w kontekście starszych wartości domyślnych, takich jak 1024 lub 256. Należy to traktować jako próg rozwiązywania problemów w opisanej sytuacji, a nie jako uniwersalne zalecenie dotyczące pojemności dla każdego serwera domowego. Zacznij od sprawdzenia efektywnego limitu i rzeczywistego wykorzystania.

Dokumentacja getrlimit i prlimit systemu Linux opisuje miękkie i twarde limity dla każdego procesu. Synapse również ma takie soft_file_limitustawienie; dokumentacja konfiguracji Synapse dokumentuje wartość domyślną równą zero, która nakazuje Synapse ustawienie miękkiego limitu na wartość twardego limitu, z którego może korzystać.

1. Potwierdź działanie jednostki i zdiagnozuj usterkę

Najpierw znajdź rzeczywistą nazwę usługi. W wielu instalacjach pakietów jest to matrix-synapse.service, ale nie zakładaj tej nazwy, jeśli Twoja instalacja korzysta z niestandardowej jednostki lub pracowników.

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

Sprawdź dokładny błąd, czas jego wystąpienia oraz czy wystąpił podczas skoku ruchu, aktywności federacji czy restartu. Następnie sprawdź limit, jaki systemd aktualnie zgłasza:

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

LimitNOFILEPokazuje skonfigurowany limit menedżera usług; nie jest to liczba aktualnie otwartych deskryptorów. Polecenie powłoki, takie jak [ ulimit -nbrakuje informacji o limicie], raportuje jedynie bieżący limit powłoki i nie stanowi dowodu na istnienie limitu usługi.

2. Podnieś limit usługi systemd za pomocą drop-in

Użyj drop-inu systemd, aby aktualizacje pakietów nie wymagały edycji pliku jednostki dostawcy. Poniższa wartość jest przykładowa i nie gwarantuje idealnego działania dla każdego serwera. Wybierz limit z marginesem przekraczającym obserwowane szczytowe obciążenie i sprawdź zgodność aplikacji i zależności przed ustawieniem nietypowo wysokiej wartości.

sudo systemctl edit matrix-synapse.service

Dodaj to w nowym oknie edytora:

[Service]
LimitNOFILE=65536

Zapisz i wyjdź, a następnie przeładuj systemd i uruchom ponownie Synapse w odpowiednim oknie konserwacyjnym:

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

Pojedyncza LimitNOFILEwartość określa zarówno miękki, jak i twardy limit dla usługi w systemie systemd. Podręcznik systemd również dopuszcza soft:hardparę. Miękki limit nie może przekraczać twardego limitu. Przed wybraniem bardzo wysokiej wartości należy zapoznać się z dokumentacją systemd.exec , która wskazuje na problemy ze zgodnością programów korzystających ze starego select(2)interfejsu z deskryptorami powyżej 1023. Nie należy zakładać, że każda biblioteka lub wtyczka w systemie obsługuje dowolny limit.

3. Sprawdź własne ustawienia i usługi robocze Synapse

Jeśli konfiguracja Synapse wyraźnie ustawia soft_file_limitniską wartość, ustawienia aplikacji mogą utrzymywać limit miękki poniżej limitu systemd. Przeszukaj aktywne pliki konfiguracyjne i dołączoną konfigurację pod kątem tego klucza. Usuń niepotrzebne nadpisanie lub ustaw je celowo; udokumentowana wartość domyślna zero powoduje, że Synapse podnosi limit miękki do dostępnego limitu twardego.

W przypadku wdrożenia wieloprocesowego każdy pracownik jest osobnym procesem i może zostać uruchomiony przez osobną jednostkę lub instancję szablonu. Podniesienie limitu usługi głównej nie oznacza automatycznie, że każdy pracownik ma zamierzony limit. Sprawdź rzeczywiste nazwy jednostek roboczych za pomocą systemctl list-units, a następnie zastosuj i zweryfikuj odpowiedni drop-in dla każdej usługi, która go potrzebuje.

Podobnie, ustawienia w /etc/security/limits.confpowłoce logowania i w powłoce logowania ulimitzazwyczaj nie regulują usługi systemowej uruchamianej bezpośrednio przez systemd. W tym celu należy zmienić limit zasobów jednostki i zweryfikować go w procesie, który systemd faktycznie uruchomił.

4. Jeśli Synapse działa w kontenerze

Nadpisanie systemd na poziomie hosta dla innej usługi nie zmienia automatycznie limitu deskryptorów plików kontenera. Skonfiguruj środowisko wykonawcze kontenera lub warstwę orkiestracji. W przypadku Docker Compose definicja usługi obsługuje obsługę poszczególnych kontenerów ulimits; przykład:

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

Liczba ta ma charakter poglądowy; należy ją dostosować do rozmiaru na podstawie wykorzystania i limitów hosta. Dokumentacja usługi Docker Compose dokumentuje to ulimitsustawienie. Od wersji Docker Engine 29, informacje o wydaniu Dockera opisują zmianę domyślnego limitu nofile związanego z containerd 2.1.5: kontenery mogą otrzymać 1024 zamiast poprzedniego domyślnego limitu 1 048 576. Jeśli problem pojawił się po aktualizacji silnika, należy sprawdzić obowiązujący limit kontenerów i jawnie ustawić wymagany limit ulimit w konfiguracji wdrożenia. Zobacz informacje o wydaniu Docker Engine 29 i dokumentacja uruchomienia Dockera .

5. Sprawdź limit uruchomionego procesu Synapse

Po ponownym uruchomieniu sprawdź limity na poziomie procesu, a nie tylko konfigurację systemd. Uzyskaj główny PID i sprawdź jego limity zgłaszane przez jądro:

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

Jeśli główny PID wynosi zero lub należy do wrappera, a nie Synapse, zidentyfikuj proces Synapse w grupie cgroup usługi i sprawdź ten PID. Liczba deskryptorów to migawka; powtórz ją podczas ładowania reprezentatywnego. Upewnij się, że „Maksymalna liczba otwartych plików” odzwierciedla zamierzone limity miękkie i twarde, liczba ta utrzymuje się znacznie poniżej limitu miękkiego, a dziennik nie zgłasza już błędu.

Jeśli liczba będzie rosła, aż osiągnie nowy limit, limit może jedynie opóźniać awarię. W FAQ Synapse zaznaczono, że zablokowane lub powolne żądania mogą mieć znaczenie podczas badania wyczerpania uchwytów plików. Przejrzyj logi i przetwarzanie żądań, porównaj liczbę deskryptorów w czasie i zbadaj ewentualny wyciek lub nieoczekiwanie trwałe połączenia, zamiast bezmyślnie zwiększać limit.

Kiedy podniesienie limitu na usługę nie wystarczy

Jeśli logi zgłaszają błąd wyczerpania tabeli plików w całym systemie, taki jak ENFILE, sprawdź użycie w całym hoście i innych usługach; LimitNOFILEzmiana w obrębie pojedynczej usługi nie zwiększy wydajności jądra w całym systemie. Unikaj zmiany globalnych limitów jądra bez potwierdzenia błędu i zrozumienia wpływu na cały host. Jeśli zgłoszony limit usługi pozostaje niski po dodaniu, uruchom program, systemctl cat matrix-synapse.serviceaby upewnić się, że dodanie jest załadowane, zweryfikuj nazwę jednostki, przeładuj systemd i ponownie uruchom właściwą jednostkę.

Szybka samokontrola

  • Czy zidentyfikowałeś dokładną jednostkę lub kontener Synapse, który rejestruje błąd?
  • Czy systemctl showpodaje przewidywany limit dla danej jednostki?
  • Czy /proc/<Synapse-PID>/limitspo ponownym uruchomieniu wyświetla zamierzone limity miękkie i twarde?
  • Czy liczba deskryptorów jest poniżej limitu miękkiego przy normalnym obciążeniu szczytowym?
  • Czy jednostki robocze i ustawienia kontenerów są sprawdzane osobno, jeśli ma to zastosowanie?
  • Czy błąd ustał, czy też wykorzystanie nadal rośnie, zmierzając w kierunku nowego limitu?

Jeśli wszystkie kontrole na poziomie procesu zakończą się powodzeniem, a błąd ustanie podczas reprezentatywnego ruchu, zmiana limitu systemd działa. Jeśli deskryptory nadal się kumulują lub system zgłasza globalny niedobór, należy kontynuować badanie źródła, zamiast traktować większy limit jako kompletne rozwiązanie.

Źródła

Zostaw komentarz

10 najlepszych narzędzi do pingowania w celu znajdowania urządzeń w sieci

10 najlepszych narzędzi do pingowania w celu znajdowania urządzeń w sieci

Porównaj 10 narzędzi do pingowania, które umożliwiają szybkie wykrywanie sieci LAN, skanowanie międzyplatformowe i zarządzanie adresami IP. Dowiedz się, co narzędzie pingujące może Ci powiedzieć, a czego nie.

6 najlepszych narzędzi do zarządzania siecią, umożliwiających śledzenie wydajności

6 najlepszych narzędzi do zarządzania siecią, umożliwiających śledzenie wydajności

Porównaj sześć narzędzi do zarządzania siecią służących do monitorowania wydajności, obejmujących zasięg SNMP, mapowanie, alerty, modele wdrażania i kompromisy kosztów.

Ping Monitor: 7 darmowych i otwartych narzędzi do monitorowania dostępności sieci

Ping Monitor: 7 darmowych i otwartych narzędzi do monitorowania dostępności sieci

Porównaj siedem darmowych i otwartych monitorów pingów — od kompletnych pakietów sieciowych po ukierunkowane sondy opóźnień — i wybierz odpowiedni monitor pod kątem dostępności, utraty pakietów i historii.

QoS w sieciach: czym jest jakość usług i jak działa

QoS w sieciach: czym jest jakość usług i jak działa

Dowiedz się, co oznacza QoS w sieciach, w jaki sposób oznaczenia DSCP i kolejki ruchu nadają priorytet aplikacjom głosowym, wideo i biznesowym oraz czego QoS nie jest w stanie naprawić.

Najlepsze oprogramowanie serwera SFTP do bezpiecznego przesyłania plików

Najlepsze oprogramowanie serwera SFTP do bezpiecznego przesyłania plików

Porównaj niezawodne oprogramowanie serwera SFTP dla systemów Windows i Linux, w tym OpenSSH, Bitvise, SolarWinds i SFTPGo. Znajdź rozwiązanie odpowiednie dla swoich potrzeb w zakresie bezpieczeństwa i transferu plików.

7 najlepszych narzędzi do zarządzania adresami IP dla zespołów sieciowych

7 najlepszych narzędzi do zarządzania adresami IP dla zespołów sieciowych

Porównaj siedem narzędzi do zarządzania adresami IP służących do wykrywania podsieci, koordynacji DNS i DHCP, inwentaryzacji sieci i otwartego oprogramowania IPAM.

6 najlepszych narzędzi do monitorowania serwerów Windows Server zapewniających lepszą dostępność i wydajność

6 najlepszych narzędzi do monitorowania serwerów Windows Server zapewniających lepszą dostępność i wydajność

Porównaj sześć narzędzi do monitorowania systemu Windows Server pod kątem zbierania danych systemu Windows, widoczności aplikacji, modelu wdrażania i licencjonowania, aby znaleźć odpowiednie rozwiązanie.

10 najlepszych narzędzi do skanowania sieci w celu wykrywania urządzeń i adresów IP

10 najlepszych narzędzi do skanowania sieci w celu wykrywania urządzeń i adresów IP

Porównaj narzędzia do skanowania sieciowego umożliwiające szybkie wykrywanie urządzeń, skanowanie adresów IP na wielu platformach oraz zarządzanie IPAM w przedsiębiorstwie. Znajdziesz tu wskazówki dotyczące dopasowania każdej opcji do swojej sieci.

Najlepsze praktyki monitorowania sieci: co śledzić i jakich narzędzi używać

Najlepsze praktyki monitorowania sieci: co śledzić i jakich narzędzi używać

Zbuduj praktyczny monitoring sieci z przejrzystym zakresem urządzeń, przydatnymi wskaźnikami wydajności, przydatnymi alertami oraz porównaniem SolarWinds NPM, PRTG i OpManager.

Jak używać Nmap do śledzenia trasy i odczytywania ścieżki sieciowej

Jak używać Nmap do śledzenia trasy i odczytywania ścieżki sieciowej

Użyj opcji --traceroute programu Nmap, aby mapować przeskoki do autoryzowanego hosta, zrozumieć dane wyjściowe dotyczące przeskoków i czasu RTT oraz rozwiązywać problemy z brakującymi odpowiedziami bez nadmiernego skanowania.