Помимо того, что отправил Paul, можно погуглить для большинства флагов трассировки и получить описание их. Даже много недокументированных - там. Большинство флагов трассировки, которые документируются, что необходимо будет использовать весь часто, будет доступно в Книгах OnLine.
Я никогда не встречался с этой проблемой. Однако необходимо, вероятно, увеличить ширину хеш-таблицы для сокращения ее глубины. Используя "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, позволяет Вам настраивать те параметры из глобальной конфигурации, и на сторону (клиент или сервер).
Я надеюсь, что это помогает!
Мы настраиваем некоторые из этих параметров регулярно. Наш стандарт для высокой пропускной способности, низкая задержка торговые платформы:
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
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
если Вы действительно не знаете то, что Вы делаете. Те, которые выделяют эти советы обычно, не делают. Их вуду является часто неправым или несоответствующим для Вашей среды и не решит Вашу проблему. Это могло бы даже сделать это хуже.