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

Как настроить Linux-сервер redhat / centos / amazon на 1 миллион открытых TCP-соединений?

Я читал следующую статью:

И интересно, есть ли что-нибудь еще, что мне нужно знать о настройке Linux для обработки 1 миллиона TCP-соединений? Пока что я сузил его до следующего:

Что еще мне нужно настроить? (это для большого 64-битного сервера EC2)

-редактировать-

Это не apache, это FYI-сервер с пользовательским кодом на основе libev. Он отлично масштабируется до 1 мил, меня беспокоит ядро ​​:)

У вас настроено большинство настроек, которые я бы установил (и должен был установить). Одна вещь, которую я обнаружил при таком масштабировании, заключалась в том, что в вашей среде всегда будет что-то особенное, о чем никто другой не упомянул. Чтобы поймать это, вам нужно убедиться, что вы смотрите и предупреждаете о:

  • ошибки через системный журнал
  • ошибки, которые ваша программа видит, например, сбои socket () и т. д.
  • доступность сетевого буфера (через SNMP или netstat cron)
  • ограничения таблицы ядра (опять же через SNMP или / proc файлы парсинга crons)
  • частый мониторинг (очень легкие опросы каждые 1-10 мс, мы используем OpenNMS, который делает это очень легко, потому что OpenNMS - это круто).

Еще одна вещь, с которой вы можете столкнуться, - это проблемы со значением HZ. В наших системах FreeBSD мы увеличили это значение. Я исследовал другой вопрос о linux и столкнулся со случаем, когда очереди сокетов очищаются в зависимости от значения HZ:

Соединения TIME_WAIT не очищаются по истечении периода ожидания

Что касается комментария, я не думаю, что FreeBSD будет лучше в этом, они оба нуждаются в огромной настройке для работы. Мы используем FreeBSD, потому что ящики напрямую подключаются к Интернету, а OpenBGPD в настоящее время является лучшей доступной реализацией BGP с открытым исходным кодом.

У меня возникли проблемы с настройкой параметров для каждого пользователя, я продолжал изменять количество файлов в limits.conf, но тогда он не позволял мне снова войти в систему, мне пришлось закрыть экземпляр ec2. С тех пор я обнаружил, что 1024 * 1024 - это максимум, который вы можете поместить в limits.conf, больше, и вы его пропустите:

echo "* soft nofile 1048576" >> /etc/security/limits.conf 
echo "* hard nofile 1048576" >> /etc/security/limits.conf   

Помимо этого и дополнений к sysctl, упомянутых в ссылках на блог mochiweb, есть ли что-нибудь еще, что мне нужно сделать?

Большое спасибо, ребята. Я действительно хочу посмотреть, смогу ли я подтолкнуть этот сервер к обработке 1мил соединений ...

Это зависит от характеристик сервера и типа контента, который он обслуживает. Это может быть вообще невозможно (одновременно, верно?), Если он обслуживает активный контент и медиа. База данных и небольшие веб-сайты подойдут. В конфигурации apache попробуйте запустить множество рабочих / дочерних потоков. В самом ящике просто проверьте, сможет ли Apache с этим справиться. Если apache может, но не коробка, возможно, кто-то еще может помочь с этим. Сожалею. Удачи.

Да, извините, что не прочитал его полностью.