Во время первомайского праздника сервисная команда обновила серверную среду сайта Yitaobang с PHP5.3 до PHP5.6, и после успешного обновления процессор сервера был увеличен более чем на 90%, что остаётся высоким. Проверьте сервер и обнаружили, что несколько процессов PHP-FPM вызывают слишком высокую нагрузку на процессор, из-за чего сайт нельзя посещать нормально. Многократная переустановка серверной среды и версии PHP, а также смена PHP на HHVM не решает проблему высокой нагрузки на процессор.
Процесс эксплуатации сервера E-Taobang (схема архитектуры сервиса): Пользовательский клиент → разрешение доменных имён → Baidu Cloud Acceleration Node (CDN/кэширование/анти-DDOS/CC атаки) → узел Alibaba Cloud Shield (анти-CC/DDOS/WAF атаки) → ECS-исходный сервер (CSS, JS и образы для CDN-диверсии), а Alibaba Cloud Shield не содержит информации об атаках, поэтому это можно полностью исключить как атаку.
Смотря на логи nginx, logs php-fpm и slow logs, аномальных факторов нет, и я вижу множество TIME_WAIT информации от команды netstat -n, которая вызвана IP-сегментом 100.97.x.x (последний IP сегмент — IP-адрес сервиса прослушивания Alibaba Cloud SLB).
Без лишних слов, давайте поговорим о конкретном решении, которое в итоге было реализовано профессиональной командой эксплуатации и обслуживания Yitao Gang (V Station Power), и в итоге нагрузка на процессор, вызванная настройками сервисного мониторинга SLB, была слишком высокой. Исходный сервис SLB слушает порт 80 протокола HTTP, и проверка состояния протокола HTTP регулярно отправляет http-запросы с нескольких голов, что приводит к непрерывному доступу к чтению HTTP, в результате чего php-fpm заставляет нагрузку на процессор превышать 90% на длительное время, а конкретная квота использования CPU зависит от конфигурации ECS. После смены сервиса проверки состояния загрузка процессора отключается.
Если такая ситуация повторится, измените конфигурацию проверки состояния SLB-сервиса с HTTP-протокола 80 на конфигурацию TCP-протокола 80 следующим образом:
|