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

Стресс-тестирование для tcp_mem

Linux имеет tcp_mem установка объема памяти, которая будет выделяться TCP-соединениям для всех запущенных приложений. В соответствии с официальная документация:

tcp_mem - вектор из 3 INTEGER: min, pressure, max min: ниже этого количества страниц TCP не заботится о своем аппетите памяти.

давление: когда объем памяти, выделенной TCP, превышает это количество страниц, TCP регулирует потребление памяти и переходит в режим давления памяти, который выходит, когда потребление памяти падает ниже «min».

max: количество страниц, разрешенных для постановки в очередь всеми сокетами TCP.

Значения по умолчанию рассчитываются во время загрузки из объема доступной памяти.

Мы видим, что одно приложение в Prod нарушает этот порог, и его dmesg log содержит строку вроде: TCP: out of memory -- consider tuning tcp_mem.

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

Пока что пробовал:

Во всех случаях я вижу, что могу добраться до tcp_mem верхний предел, но не нарушать его. В то время как я вижу, что приложение Prod значительно превышает лимит (например, 6000 против 4400).

Итак, вопрос: что я могу попробовать воспроизвести нарушение tcp_mem ограничить локально?

Я думаю превышение tcp_mem лимит является следствием другой проблемы. Высокое потребление памяти для уровня TCP может быть вызвано потерей сегментов TCP. Пока не будет выполнена повторная передача потерянного сегмента, в стеке TCP будут храниться другие полученные данные. Только после того, как все недостающие данные будут получены, данные могут быть обработаны вашим приложением.

Итак, если вы хотите подражать tcp_mem проблема, вы можете отбросить случайные сегменты TCP-соединения. Но я не думаю, что это может вам помочь. Лучше попытайтесь устранить источник вашей проблемы. Проверить nstat вывод, особенно потерянные сегменты tcp и счетчики повторной передачи tcp. Захватывайте трафик и анализируйте его в wirehark.