저는 Debian 10 VPS에서 WordPress Multisite를 사용하여 약 450개의 간단한 웹사이트를 운영하고 있습니다. 다음은 리소스에 대한 일부 데이터입니다.
root@hr711523385:~# free -mh
total used free shared buff/cache available
Mem: 57Gi 9,2Gi 1,2Gi 246Mi 47Gi 47Gi
Swap: 16Gi 9,9Gi 7,0Gi
root@hr711523385:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 40 bits physical, 48 bits virtual
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 16
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Model name: Intel Core Processor (Broadwell, IBRS)
Stepping: 2
CPU MHz: 3000.000
BogoMIPS: 6000.00
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
L3 cache: 16384K
NUMA node0 CPU(s): 0-15
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ibrs ibpb tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat
root@hr711523385:~#
VPS를 관리하기 위해 Plesk 18.0.48을 사용하고 있습니다. 몇 주 동안 내 모든 웹 사이트가 극도로 느려지고 때로는 504 nginx 오류가 발생합니다. SSH 터미널을 열면 명령 입력, 파일 편집, 원격 파일 다운로드 등 모든 것이 느려집니다(238.00 KiB/s!!).
이것이 htop이 제공하는 것입니다: 리소스 문제가 보이나요? RAM과 CPU가 좋아 보입니다! 서버는 wordpress 네트워크를 실행하는 데에만 사용되므로 WP가 문제인 것 같지만 시작하는 방법을 찾을 수 없습니다. php-fm입니까? 아파치? mysqld? …문제의 원인은 누구입니까?
고쳐 쓰다
외부 시스템 관리자에게 더 자세히 알아보도록 요청했고 그는 Telegraf를 사용하여 나에게 다음을 보냈습니다. 그는 문제가 디스크 I/O(80 쓰기/초)라고 말했지만 여전히 그 이유를 모릅니다! 디스크 I/O가 너무 많아지는 원인을 어떻게 찾을 수 있나요? mysqld인 것 같은데 잘 모르겠습니다. (각 사이트마다 약 10개의 UPDATE 쿼리가 생성되며 조사가 진행 중입니다.)
답변1
“WordPress Multisite를 사용한 450개의 간단한 웹사이트”: 이 문제는 PHP-FPM 프로세스로 인해 시스템에 과부하가 발생했기 때문에 발생한 것으로 확신합니다. 근본 원인은 일반적으로 악성 봇이 특정 도메인을 공격하기 때문입니다.
- 도메인의 웹 서버 로그를 확인하여 어떤 도메인이 많은 요청을 받고 있는지 알아보세요.
- (루트로) 실행하여
ps aux | grep php-fpm
어떤 PHP-FPM 프로세스가 존재하는지, 어떤 사용자가 프로세스를 소유하고 있는지 확인하고, 어떤 도메인과 관련되어 있거나 실행하는지(또한 루트로) 출력에서 직접 가져옵니다. 프로세스의 프로세스 ID는strace -p <pid>
어디에 있고 관찰합니다.<pid>
수행할 작업(출력에서 도메인에 대한 참조를 찾을 수 있음)입니다. - 루트로 실행
watch "ps aux | sort -nrk 3,3 | head -n 20"
하고 로드된 프로세스 20개를 관찰하여 어떤 프로세스가 가장 많은 CPU를 소비하는지 알아보세요.
504 결과는 응답하지 않는 PHP 프로세스로 인해 발생하는 것이 거의 확실합니다. 장기 실행 스크립트가 끝없는 루프에 갇혀 있거나 PHP-FPM의 max_children이 너무 낮게 설정되어 새 하위 프로세스를 생성할 수 없어 Nginx가 웹 사이트에서 응답을 얻을 수 없습니다.