Назад | Перейти на главную страницу

анализировать производительность TCP, интерпретируя «netstat -s»

Я казнил netstat -s на моем выделенном сервере под управлением debian. Я хотел бы интерпретировать результаты, потому что у меня проблемы с подключением к TCP. Я не знаю, как читать эти результаты. Кто-нибудь может помочь?

Контекст: это общедоступный tcp-сервер с клиентами со всего мира, большинство из которых используют сети 3G / UMTS. Розетки открываются в среднем на 1 час. Некоторые TCP-ссылки останавливаются на 10-60 секунд, каждые 10 минут или около того. Я запускаю пользовательскую программу Java, которая является сервером TCP.

Вот результат netstat -s. Есть ли очевидные проблемы с подключением?

    Ip:
        33780786 total packets received
        0 forwarded
        0 incoming packets discarded
        33780059 incoming packets delivered
        33577363 requests sent out
        1 outgoing packets dropped
        1442 reassemblies required
        715 packets reassembled ok
    Icmp:
        4675 ICMP messages received
        98 input ICMP message failed.
        ICMP input histogram:
            destination unreachable: 2901
            timeout in transit: 152
            echo requests: 1334
            echo replies: 226
        2109 ICMP messages sent
        0 ICMP messages failed
        ICMP output histogram:
            destination unreachable: 550
            echo request: 225
            echo replies: 1334
    IcmpMsg:
            InType0: 226
            InType3: 2901
            InType8: 1334
            InType11: 152
            OutType0: 1334
            OutType3: 550
            OutType8: 225
    Tcp:
        8752 active connections openings
        287296 passive connection openings
        58164 failed connection attempts
        74065 connection resets received
        30 connections established
        32997886 segments received
        32357425 segments send out
        438184 segments retransmited
        587 bad segments received.
        75868 resets sent
    Udp:
        777245 packets received
        550 packets to unknown port received.
        0 packet receive errors
        779944 packets sent
    TcpExt:
        28674 invalid SYN cookies received
        56570 resets received for embryonic SYN_RECV sockets
        998 packets pruned from receive queue because of socket buffer overrun
        9 ICMP packets dropped because they were out-of-window
        27402 packets rejects in established connections because of timestamp
        1266543 delayed acks sent
        1399 delayed acks further delayed because of locked socket
        Quick ack mode was activated 143367 times
        1556 times the listen queue of a socket overflowed
        1556 SYNs to LISTEN sockets dropped
        25884635 packets directly queued to recvmsg prequeue.
        785180902 bytes directly in process context from backlog
        1800599695 bytes directly received in process context from prequeue
        2879633 packet headers predicted
        7627605 packets header predicted and directly queued to user
        3218508 acknowledgments not containing data payload received
        14774120 predicted acknowledgments
        52 times recovered from packet loss due to fast retransmit
        24519 times recovered from packet loss by selective acknowledgements
        4 bad SACK blocks received
        Detected reordering 146 times using FACK
        Detected reordering 77 times using SACK
        Detected reordering 2239 times using time stamp
        3548 congestion windows fully recovered without slow start
        15840 congestion windows partially recovered using Hoe heuristic
        8832 congestion windows recovered without slow start by DSACK
        127403 congestion windows recovered without slow start after partial ack
        12080 TCP data loss events
        TCPLostRetransmit: 3
        179 timeouts after reno fast retransmit
        21328 timeouts after SACK recovery
        1481 timeouts in loss state
        32373 fast retransmits
        5349 forward retransmits
        26402 retransmits in slow start
        230593 other TCP timeouts
        4 classic Reno fast retransmits failed
        2367 SACK retransmits failed
        563 times receiver scheduled too late for direct processing
        243774 packets collapsed in receive queue due to low socket buffer
        151068 DSACKs sent for old packets
        45306 DSACKs sent for out of order packets
        238987 DSACKs received
        14 DSACKs for out of order packets received
        27627 connections reset due to unexpected data
        4045 connections reset due to early user close
        4992 connections aborted due to timeout
    IpExt:
1 outgoing packets dropped

Потери пакетов почти нет, что хорошо, но у нас нет данных о задержках. С первого взгляда я бы сказал, что вы используете неправильные инструменты для работы.

Присутствует ли база данных? Существуют ли какие-то циклические функции, которые замедляют работу системы примерно на 10-минутной отметке? Машина работает только с этим tcp-сервером или обслуживает другие ресурсы?

Netstat не является подходящей метрикой для того, что вы хотите делать. Чтобы убедиться, что ваше веб-приложение работает так, как задумано, вам нужна инфраструктура, включающая следующие

  • Подключается к вашему приложению для обеспечения правильных показателей. Вы разработчик, так что вы можете это сделать, и это значительно упростит вашу работу. Под хуками я имею в виду средства для получения диагностических данных и данных о производительности, закодированных непосредственно в вашем приложении.
  • Инфраструктура построения графиков / мониторинга. Кактусы и Nagios это пример, с которым я знаком, но есть и другие.
  • План. Чего ты хочешь добиться? Какой уровень обслуживания вы хотите предоставить своим пользователям? Внедряйте диагностику и показатели производительности по мере разработки приложения, и если вы получите ветер, это может превратиться во что-то большое, сделайте его масштабируемым. * Действительно * масштабируемый.

Вот несколько советов, которые помогут вам разобраться в проблеме:

  • Как ваша принимающая программа обрабатывает соединения из сети? Он многопоточный? Как он обращается с клиентами? Достигнут ли таймаут?
  • Как вы тестировали серверный код? Вы запускали его на своем локальном компьютере и опробовали, сколько подключений к нему можно получить? Вы проверяли эффект от длительных занятий?
  • Попробуйте запустить «netstat -p» или «lsof -i TCP» и посмотрите, что происходит. Как выглядит очередь отправки? Запустите "ps auxwww", каково состояние серверной программы?