Настройка параметров маршрутизации IP Linux — secret_interval и tcp_mem

Помимо того, что отправил Paul, можно погуглить для большинства флагов трассировки и получить описание их. Даже много недокументированных - там. Большинство флагов трассировки, которые документируются, что необходимо будет использовать весь часто, будет доступно в Книгах OnLine.

30
задан 26 January 2010 в 23:01
3 ответа

Я никогда не встречался с этой проблемой. Однако необходимо, вероятно, увеличить ширину хеш-таблицы для сокращения ее глубины. Используя "dmesg", Вы будете видеть, сколько записей Вы в настоящее время имеете:

$ dmesg | grep '^IP route'
IP route cache hash table entries: 32768 (order: 5, 131072 bytes)

Можно изменить это значение с параметром строки команды загрузки ядра rhash_entries. Сначала попробуйте, это вручную затем добавляет его к Вашему lilo.conf или grub.conf.

Например: kernel vmlinux rhash_entries=131072

Возможно, что у Вас есть очень ограниченная хеш-таблица, потому что Вы присвоили мало памяти своему HAProxy VM (размер хэша маршрута корректируется в зависимости от общей RAM).

Касающееся tcp_mem, будьте осторожны. Ваши начальные установки заставляют меня думать, что Вы работали с 1 ГБ RAM, 1/3, которых мог быть выделен сокетам TCP. Теперь Вы выделили 367872 * 4 096 байтов = 1,5 ГБ RAM к сокетам TCP. Необходимо быть очень осторожными для не исчерпывания памяти. Эмпирическое правило состоит в том, чтобы выделить 1/3 памяти к HAProxy и другой 1/3 к стеку TCP и последний 1/3 к остальной части системы.

Я подозреваю, что Ваш "из сообщения" памяти сокета прибывает из настроек по умолчанию в tcp_rmem и tcp_wmem. По умолчанию Вам выделили 64 КБ на выводе для каждого сокета и 87 КБ на входе. Это означает в общей сложности 300 КБ для проксированного соединения, только для буферов сокета. Добавьте к этому 16 или 32 КБ для HAProxy, и Вы видите, что с 1 ГБ RAM будете только поддерживать 3 000 соединений.

Путем изменения настроек по умолчанию tcp_rmem и tcp_wmem (средний параметрический усилитель), можно стать намного ниже на памяти. Я получаю хорошие результаты со значениями всего 4096 для буфера записи, и 7300 или 16060 в tcp_rmem (5 или 11 сегментов TCP). Можно изменить те настройки без перезапуска, однако они будут только относиться к новым соединениям.

Если Вы предпочитаете не касаться своего sysctls слишком много, последний HAProxy, 1.4-dev8, позволяет Вам настраивать те параметры из глобальной конфигурации, и на сторону (клиент или сервер).

Я надеюсь, что это помогает!

28
ответ дан 28 November 2019 в 19:59

Мы настраиваем некоторые из этих параметров регулярно. Наш стандарт для высокой пропускной способности, низкая задержка торговые платформы:

net.ipv4.tcp_rmem = 4096 16777216 33554432
net.ipv4.tcp_wmem = 4096 16777216 33554432
net.ipv4.tcp_mem = 4096 16777216 33554432
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.netdev_max_backlog = 30000
net.core.netdev_max_backlog = 30000
-4
ответ дан 28 November 2019 в 19:59
  • 1
    на Willy' s математика, которая означает, Ваше стандартное давление памяти # (среднее число) составляет 68 ГБ?! Времена три (rmem, wmem, мадам)?? –  Jeff Atwood 27 January 2010 в 01:00
  • 2
    Эти tunables являются неправильными и очень часто находятся в средах места размещения, затем вслепую вставляемых копией. У них не будет проблемы со всего несколькими параллельными сессиями, но даже с 100 сокетами TCP, you' ll выделяют 3,2 ГБ RAM. Пока задержка является низкой, Вы won' t замечают, что что-либо подозревает. Просто необходимо отключить удаленную машину во время передачи, чтобы видеть, что буферы вывода заполняются, или замораживают локальную задачу и видят, что входной буфер заполняется. Это безумно... –  Willy Tarreau 27 January 2010 в 07:37
  • 3
    Jeff, это не времена три. tcp_mem находится на страницах и определяет глобальный размер. tcp_rmem и tcp_wmem находятся в байтах и определяют размер на сокет. –  Willy Tarreau 27 January 2010 в 07:40

Out of socket memory error часто вводит в заблуждение. Большую часть времени, на интернет-серверах направления, это не указывает ни на какую проблему, связанную с исчерпыванием памяти. Как я объяснил в намного больших деталях в сообщении в блоге, наиболее распространенной причиной является количество сокетов висячей строки. Сокет висячей строки является сокетом, который не связан с дескриптором файла. При определенных обстоятельствах ядро выйдет Out of socket memory error даже при том, что Вы 2x или 4x далеко от предела (/proc/sys/net/ipv4/tcp_max_orphans). Это часто происходит в стоящих с Интернетом сервисах и совершенно нормально. Правильный план действий в этом случае должен настроиться tcp_max_orphans чтобы быть, по крайней мере, 4x количество висячих строк, Вы обычно видите со своим пиковым трафиком.

Не слушайте совет, который рекомендует настроиться tcp_mem или tcp_rmem или tcp_wmem если Вы действительно не знаете то, что Вы делаете. Те, которые выделяют эти советы обычно, не делают. Их вуду является часто неправым или несоответствующим для Вашей среды и не решит Вашу проблему. Это могло бы даже сделать это хуже.

8
ответ дан 28 November 2019 в 19:59

Теги

Похожие вопросы