У меня есть веб-сервер, на котором работают некоторые службы, например Apache
, Mysql
, Redis
и немного NodeJS
Программы. Во времена высокого трафика мой сервер, кажется, не поддерживает большую нагрузку. Когда это происходит, часто, когда я пытаюсь получить доступ к странице, я получаю следующее сообщение от mysql
:
Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)
Это сообщение появляется в прерывистой форме таким образом, что большую часть времени, если я обновляю страницу, это сообщение больше не появляется. Кроме того, я не думаю, что это проблема в моей конфигурации для mysql, потому что у меня все время получается следующий результат от mysqltuner.pl:
[OK] Highest usage of available connections: 74% (336/450)
Точно так же Redis Server показывает сообщение о проблеме с подключением к серверу:
Could not connect to Redis at 127.0.0.1:6379
Я слежу за своим сервером в то время, и я выяснил, что это примерно 2 ГБ ОЗУ (без использования каких-либо байтов SWAP для процесса Mysql, Redis или NodeJS. Проведя некоторое время в исследованиях (без Севера) , я читал об эфемерных портах. Я попытался настроить net.ipv4.ip_local_port_range
параметр для увеличения диапазона портов (отрегулируйте от 32768 61000
к 10000 65000
). Результаты были ужасными! Мой веб-сервер увеличивает время отклика в среднем со 180 ~ 200 мс до примерно 6000 мс, и средняя загрузка сервера тоже сильно возрастает (но сообщения об ошибках исчезают!).
Мои приложения NodeJS (все они) используют Socket.io и отвечают с другого порта на моем сервере. Я пытаюсь понять, как решить проблему. Это проблема доступности порта? Почему настройка параметра net.ipv4.ip_local_port_range замедляет работу сервера?
Конфигурация сервера:
Если ваш вопрос заключается в том, как лучше всего контролировать ваш сервер в периоды пиковой нагрузки, что трудно сделать в периоды пиковой нагрузки, я бы поискал какой-нибудь легкий инструмент, который поможет с мониторингом. Top, ps и df не всегда сокращайте это.
Я использовал собирать для захвата точек данных на моих разделах, памяти, процессорах, apache, mysql и других вещах. Он собирает данные и сохраняет эти точки данных, тогда вам понадобится какой-нибудь другой инструмент для извлечения данных, например некоторые веб-интерфейсы для отображения данных.
Затем для устранения неполадок, возможно, инструмент, который поразит ваш сервер и создаст сценарий с высокой загрузкой. Apache Benchmark (ab) или Siege - хорошие инструменты для этого.