5월 연휴 기간 동안 서비스팀은 Yitao방 웹사이트의 서버 환경을 PHP5.3에서 PHP5.6으로 업그레이드했으며, 성공적인 업그레이드 후 서버 CPU가 90% 이상으로 상승해 높은 수준을 유지하고 있습니다. 서버를 확인해 보니 여러 PHP-FPM 프로세스가 CPU 부하를 너무 높게 만들어 웹사이트에 정상적으로 접근할 수 없게 됩니다. 서버 환경과 PHP 버전을 여러 번 재설치하고, PHP를 HHVM으로 바꿔도 높은 CPU 부하 문제를 해결할 수 없습니다.
E-Taobang 서버 운영 프로세스(서비스 아키텍처 다이어그램): 사용자 클라이언트→ Baidu Cloud Acceleration Node(CDN/캐싱/안티-DDOS/CC 공격)→→ Alibaba Cloud Shield 노드(CCC/DDOS/WAF 공격 방지), ECS 소스 서버(CSS, JS, CDN 전환용 이미지)→ 도메인 이름 해석을 합니다. Alibaba Cloud Cloud Shield는 공격 정보가 없으므로 공격으로 완전히 배제할 수 있습니다.
nginx 로그, php-fpm 로그, 느린 로그를 살펴보면 이상 요인이 없고, netstat -n 명령어에서 여러 TIME_WAIT 정보가 나오는데, 이는 100.97.x.x의 IP 세그먼트(마지막 IP 세그먼트는 Alibaba Cloud SLB 도청 서비스의 IP 주소)에서 발생합니다.
더 이상 지체하지 않고, 구체적인 해결책에 대해 이야기해 보겠습니다. 이 해결책은 결국 이타오강(V 스테이션 파워) 전문 운영 및 유지보수팀이 처리했으며, 최종 결과는 SLB의 서비스 모니터링 설정으로 인한 CPU 부하가 너무 높다는 것이었습니다. 원래 SLB 서비스는 HTTP 프로토콜 포트 80을 수신하며, HTTP 프로토콜 건강 검사는 여러 헤드에서 정기적으로 HTTP 요청을 보내 HTTP 읽기 접근이 연속되어 php-fpm 때문에 CPU 부하가 오랜 시간 90% 이상에 도달하게 되며, 특정 CPU 부하 할당량은 ECS 구성에 따라 달라집니다. 건강 점검 서비스를 변경하면 CPU 사용률이 오프라인 상태가 됩니다.
이 상황이 발생한다면, SLB 서비스 리스닝의 건강 체크 구성을 HTTP 프로토콜 80에서 TCP 프로토콜 80 구성으로 다음과 같이 변경하세요:
|