Dość często podczas rozwiązywania problemów i strojenia rzeczy zastanawiam się nad następującymi ustawieniami jądra Linux:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Inne niż fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, i net.ipv4.tcp_wmem
, że wydaje się być ważne gałki zadzierać podczas strojenia pudełko na wysokich poziomach współbieżności.
Moje pytanie: Jak mogę sprawdzić, ile elementów znajduje się w każdej z tych kolejek? Zwykle ludzie po prostu ustawiają je na bardzo wysokim poziomie, ale chciałbym rejestrować te rozmiary kolejek, aby pomóc przewidzieć przyszłe awarie i wychwycić problemy, zanim pojawią się w zauważalny sposób dla użytkownika.
linux
kernel
networking
tcp
Colin Hostert
źródło
źródło
Odpowiedzi:
Ja też się nad tym zastanawiałem i motywowało mnie twoje pytanie!
Zbadałem, jak blisko mogłem podejść do każdej z wymienionych kolejek, podając informacje dotyczące każdej z nich. Czekam na komentarze / opinie, wszelkie ulepszenia w monitorowaniu ułatwiają zarządzanie!
Pokaże bieżącą globalną liczbę połączeń w kolejce, możesz podzielić to na port i umieścić to w instrukcjach exec w snmpd.conf, jeśli chcesz sondować je z aplikacji monitorującej.
Od:
Pokażą Ci, jak często widzisz żądania z kolejki:
Od:
http://linux.die.net/man/5/proc
Ten plik (tylko do odczytu) podaje liczbę aktualnie otwartych plików. Zawiera trzy liczby: liczbę przydzielonych uchwytów plików, liczbę wolnych uchwytów plików i maksymalną liczbę uchwytów plików.
Jeśli możesz zbudować listę wykluczeń usług (netstat -an | grep LISTEN), możesz wywnioskować, ile połączeń jest używanych do efemerycznych działań:
Powinien także monitorować (z SNMP):
Interesujące może być również zebranie statystyk dotyczących wszystkich stanów widocznych w tym drzewie (ustanowione / time_wait / fin_wait / etc):
Będziesz musiał śledzić / śledzić swój system dla żądań setsockopt. Nie sądzę, żeby statystyki tych żądań były śledzone inaczej. To nie jest tak naprawdę wartość, która zmienia się w moim rozumieniu. Wdrożona aplikacja prawdopodobnie poprosi o standardową kwotę. Myślę, że możesz „profilować” swoją aplikację za pomocą strace i odpowiednio skonfigurować tę wartość. (omawiać?)
Aby sprawdzić, jak blisko jesteś limitu, musiałbyś patrzeć na średnią i maksimum z pól tx_queue i rx_queue z (regularnie):
Aby śledzić związane z tym błędy:
Powinien również monitorować globalną pulę „buforów” (przez SNMP):
źródło
Myślę, że możesz uzyskać te dane za pomocą SystemTap. Oto instrukcja obsługi Redhat (pdf) . Istnieje również przewodnik dla początkujących (pdf) .
Narzędzie wygląda na tyle wszechstronnie, że pozwala ci uzyskać te dane, w szczególności
probe::netdev.rx
wygląda na coś, co da ci informacje o przychodzących wpisach, teraz „tylko” musisz znaleźć albo rozmiar netto kolejki w buforze, albo coś, co liczy rzeczy wychodząc z kolejki…źródło