Память ussage для буферов сообщений TCP или именованных каналов?

У меня есть группа программ, которые я сегодня испытывал стресс. Я решительно поднял входную нагрузку на программу, и она работала сначала, но у меня была явная утечка памяти, всасывающая память. Единственная проблема заключается в том, что 1) Valgrind настаивает на том, что у меня нет никаких утечек, и 2) это происходит только при высокой скорости приема пакетов.

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

  1. Может ли очередь в памяти для хранения подлежащих передаче данных неограниченно увеличиваться для TCP / IP или именованных каналов?

  2. если очередь может и будет расти, будет ли она показываться, что моя программа (одно чтение из TCP и вывод на именованный канал) была памятью hog или память просто отображалась как системная память?

  3. есть ли команда, которую я могу использовать для проверки памяти, выделенной для этих очередей? Я запускаю Centos

Я действительно не думаю, что это причина моей утечки, но опять же я не могу догадаться, что еще мне нужно спросить!

One Solution collect form web for “Память ussage для буферов сообщений TCP или именованных каналов?”

  1. Вообще его довольно ограниченный. Хотя есть два места (по крайней мере), эти буферы могут существовать:
    1. В ядре. Определенно ограничен. Я уверен, что FIFO жестко закодирован, TCP можно установить в /proc/sys/kernel/tcp_wmem (и rmem) и (в пределах ограничений proc) с помощью SO_SNDBUF / SO_RCVBUF . Подробнее см. Справочную страницу tcp (7).
    2. В вашем приложении. Если вы не звоните напрямую и т. Д., Библиотека, которую вы используете, может иметь свои собственные буферы. Они могут быть бесконечными.
    3. ОК. На самом деле есть третье место в ОЗУ на вашем сетевом адаптере. Не может быть увеличен за пределы определенного (довольно малого) предела без пайки, поэтому я игнорирую это. О, и есть кольцевой буфер передачи, для вашего NIC для DMA. Опять же, фиксированный размер (ethtool для настройки, если вообще возможно).
  2. Ядро отображается как системная память. Те, что в вашем приложении будут отображаться как часть виртуального размера вашего приложения (и размер резидента и т. Д.),
  3. netstat -t покажет вам текущий размер очереди отправки и получения для каждого TCP-соединения. Для тех, которые хранятся в вашей библиотеке, проверьте его документацию.

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

  • Неожиданный вывод нетстата в условиях DNAT
  • Как отключить выгрузку контрольной суммы tcp на OSX 10.11.6?
  • configure allowed_tcp_congestion_control через конфигурационные файлы в ядре linux
  • Является ли это ядро ​​предупреждением о серьезной проблеме, которая нуждается в моем внимании?
  • Могу ли я запустить команду arbitary на удаленном сервере через tcpserver?
  • Определение того, какой процесс связан с портом
  • Как мне зарезервировать порты для моего приложения?
  • Параметры TCP SACK и масштабирование окна не изменяются на Ubuntu 16.04
  • Исключить интерфейс обратной связи или адрес из процессов, прослушивающих «любой» адрес
  • Как использовать lsof для идентификации входящих TCP-соединений?
  • Пользовательские разрешения TCP-порта
  • Interesting Posts

    Преобразование ext4 в btrfs: Если я случайно потеряю питание системы во время преобразования, я потеряю данные?

    Ключи модификатора в последовательности компоновки

    почему Linux загружается только на моем компьютере, когда я добавляю pci = noacpi в grub? Должен ли я заменить свой ноутбук? Это достаточно серьезно?

    Клавиатура не распознается после запуска

    Что означает «пакетный режим» для верхней команды?

    Транспонирование нескольких столбцов – это строка

    Утилита, полезная для работы с памятью, возвращает N первых отсортированных значений

    Загрузите linux с USB, но моя среда повреждена / повреждена, что делать?

    Конвертировать год-месяц-день в день недели в имени файла

    Переносимость ссылок файлового дескриптора

    Как записывать более одного каталога?

    Почему VirtualBox порождает так много процессов в Linux?

    добавочный и greppable архив на CentOS для хранения большого количества файлов журнала (logrotate on steroids)

    stunnel Нет сертификата, возвращенного неизвестным CA

    Удалять все, кроме нескольких строк, через несколько файлов

    Linux и Unix - лучшая ОС в мире.