나는 어려운 상황에 직면해 있습니다. 100% CPU이지만 top이나 htop에서 단일 프로세스가 많이 사용되는 것을 볼 수 없습니다.
다음 명령을 실행합니다.
:~$ ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10
%CPU PID USER COMMAND
5.1 34 root [kswapd0]
2.4 1 root /sbin/init
2.3 1815 mysql /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
0.6 25583 super top
0.5 12964 mysite /usr/bin/php-cgi7.2
0.4 13313 mysite /usr/bin/php-cgi7.2
0.4 13311 mysite /usr/bin/php-cgi7.2
0.4 13310 mysite /usr/bin/php-cgi7.2
0.4 13309 mysite /usr/bin/php-cgi7.2
이것은 top 및 htop이 100% CPU를 표시하는 이유를 설명하지 않습니다.
top - 22:17:15 up 3:14, 2 users, load average: 104.14, 102.73, 87.49
Tasks: 392 total, 103 running, 251 sleeping, 1 stopped, 0 zombie
%Cpu(s): 25.7 us, 72.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 1.6 si, 0.0 st
KiB Mem : 2040972 total, 77924 free, 1666072 used, 296976 buff/cache
KiB Swap: 3906244 total, 1093324 free, 2812920 used. 187268 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
34 root 20 0 0 0 0 S 17.7 0.0 11:06.77 kswapd0
1815 mysql 20 0 1395428 24804 600 S 7.2 1.2 4:11.76 mysqld
1 root 20 0 225472 4396 2768 S 4.6 0.2 4:50.26 systemd
31359 root 20 0 189660 68472 2124 R 2.0 3.4 0:02.34 /usr/share/webm
12975 mysite 20 0 522728 16780 2500 R 1.0 0.8 0:08.91 php-cgi7.2
13278 mysite 20 0 522728 17000 5372 R 1.0 0.8 0:08.27 php-cgi7.2
13311 mysite 20 0 522728 16468 3092 R 1.0 0.8 0:08.07 php-cgi7.2
28715 super 20 0 32716 2112 1108 S 1.0 0.1 0:04.79 htop
7 root 20 0 0 0 0 R 0.7 0.0 0:23.60 ksoftirqd/0
12964 mysite 20 0 522728 17032 2504 R 0.7 0.8 0:09.36 php-cgi7.2
13008 mysite 20 0 522728 15728 2752 R 0.7 0.8 0:08.70 php-cgi7.2
13031 mysite 20 0 522728 18820 5808 R 0.7 0.9 0:08.72 php-cgi7.2
13039 mysite 20 0 522728 15856 2412 R 0.7 0.8 0:08.75 php-cgi7.2
13053 www-data 20 0 199312 6332 4336 R 0.7 0.3 0:00.46 apache2
13085 mysite 20 0 522728 16700 2440 R 0.7 0.8 0:08.60 php-cgi7.2
13094 www-data 20 0 199312 6896 4608 R 0.7 0.3 0:00.49 apache2
13125 mysite 20 0 522728 11152 2764 R 0.7 0.5 0:08.54 php-cgi7.2
13134 mysite 20 0 522728 19504 2780 R 0.7 1.0 0:08.58 php-cgi7.2
13161 mysite 20 0 522728 15324 2728 R 0.7 0.8 0:08.55 php-cgi7.2
13164 mysite 20 0 522728 15444 2480 R 0.7 0.8 0:08.54 php-cgi7.2
13174 mysite 20 0 522728 11712 2816 R 0.7 0.6 0:08.65 php-cgi7.2
13178 mysite 20 0 522728 12808 2768 R 0.7 0.6 0:08.57 php-cgi7.2
13185 mysite 20 0 522728 16080 2388 R 0.7 0.8 0:08.51 php-cgi7.2
13208 mysite 20 0 522728 13268 2424 R 0.7 0.7 0:08.38 php-cgi7.2
13210 mysite 20 0 522728 12744 2824 R 0.7 0.6 0:08.42 php-cgi7.2
13229 mysite 20 0 522728 15552 2704 R 0.7 0.8 0:08.46 php-cgi7.2
13230 mysite 20 0 522728 14944 2484 R 0.7 0.7 0:08.43 php-cgi7.2
13235 mysite 20 0 522728 15592 2468 R 0.7 0.8 0:08.42 php-cgi7.2
13236 mysite 20 0 522728 13832 2724 R 0.7 0.7 0:08.34 php-cgi7.2
13267 mysite 20 0 522728 16212 2488 R 0.7 0.8 0:08.36 php-cgi7.2
13275 mysite 20 0 522728 16228 3036 R 0.7 0.8 0:08.28 php-cgi7.2
13280 mysite 20 0 522728 15872 3140 R 0.7 0.8 0:08.23 php-cgi7.2
13284 mysite 20 0 522728 17144 5536 R 0.7 0.8 0:08.14 php-cgi7.2
13287 mysite 20 0 522728 15416 6132 R 0.7 0.8 0:08.31 php-cgi7.2
13288 mysite 20 0 522728 16024 3088 R 0.7 0.8 0:08.17 php-cgi7.2
13289 mysite 20 0 522728 14048 6344 R 0.7 0.7 0:08.23 php-cgi7.2
13291 mysite 20 0 522728 16468 2828 R 0.7 0.8 0:08.09 php-cgi7.2
13294 mysite 20 0 522728 15120 6196 R 0.7 0.7 0:08.16 php-cgi7.2
13296 mysite 20 0 522728 11564 3236 R 0.7 0.6 0:08.10 php-cgi7.2
13300 mysite 20 0 522728 17032 3104 R 0.7 0.8 0:08.15 php-cgi7.2
13303 mysite 20 0 522728 15636 3108 R 0.7 0.8 0:08.19 php-cgi7.2
13306 mysite 20 0 522728 17340 5720 R 0.7 0.8 0:08.12 php-cgi7.2
나는 이것을 시도했습니다: mySQL을 중지했고 CPU가 20%~30% 범위(주로 htop의 apache 프로세스)로 떨어졌습니다. Apache를 중지했는데 CPU가 0%~2% 범위로 떨어졌습니다. mySQL을 시작했는데 CPU가 0%~2% 범위에서 멈췄습니다. 아파치를 시작했는데 CPU가 즉시 100%에 도달했습니다.
서버가 100%임에도 불구하고 워크벤치를 사용하여 mySQL과 통신할 수 있습니다(가져오기가 0.08초가 아닌 2초 만에 완료되지만). 그러나 Apache는 전혀 쓸모가 없으며 시간 초과됩니다. 도움을 주셔서 감사합니다.
업데이트 #1
1%cpu를 초과하는 7개의 대형 프로세스가 있습니다(총 49.4%cpu).
303 mysql 15.00% /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
34 root 10.40% [kswapd0]
12926 root 10.10% [/usr/share/webm] <defunct>
13082 root 5.80% /usr/share/webmin/authentic-theme/stats.cgi
10154 root 2.90% /usr/share/webmin/virtual-server/collectinfo.pl
1 root 2.50% /sbin/init
32750 super 1.10% htop
예를 들어 100개의 프로세스가 있습니다(전체 CPU의 40%).
mysite 0.40% /usr/bin/php-cgi7.2
6개의 작은 프로세스 <1%cpu(총 1.6%cpu)가 있습니다.
<0.0%cpu(??% CPU total)와 같은 152개의 작은 프로세스가 있습니다.
www-data 0.0% /usr/sbin/apache2 -k start
134개의 작은 프로세스 <0.0%cpu(총 %cpu)가 있습니다.
나머지 프로세스의 총 개수가 91%이므로 152개와 134개의 작은 프로세스의 총 개수는 약 9%가 되어야 합니다.
업데이트 #2 왜 152개의 Apache 프로세스가 실행되고 있습니까? 이것은 내 Apache mpm_prefork.conf 파일입니다. MaxRequestWorkers 한도에 도달한 것 같나요?
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
내 서버가 공격을 받고 있나요? 아니면 정상인가요? 모든 것을 삭제하고 처음부터 설치하기 전에 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
업데이트 #3
나는 이것이 DoS 공격이라고 생각합니다. VPS 제어판(VPS 자체 외부)에 방화벽을 만들었고 개인 IP에서 들어오는 트래픽만 허용했습니다. CPU가 0.7%로 떨어졌습니다. 하루아침에 손님이 100배로 늘지는 않은 것 같아요! 내 VPS 제공업체는 현재 이 문제를 해결하기 위해 노력하고 있습니다. 업데이트하겠습니다.