私は1日に約10万回の訪問があるサイトを運営していますが、最近、平均負荷が屋根にぶつかることがあります(250以上)。通常は約0.5〜1.5なので、(d)dos攻撃を想定しました。 Apacheプロセスの数は最大1,000に達します。ただし、サーバーへの接続数は変更されず(約600)、クライアントの最大接続数は最大20です。これはたまにしか発生せず、Apacheを再起動すると自動的に整理されます。 Apacheがスレッドの負荷を生成し、負荷の平均を250に送信することを決定するのはなぜですか?
これはtopの結果です:
Normal top:
top - 15:07:16 up 1 day, 1:28, 3 users, load average: 1.44, 2.55, 21.83
Tasks: 307 total, 3 running, 304 sleeping, 0 stopped, 0 zombie
Cpu(s): 30.2%us, 3.2%sy, 0.0%ni, 64.9%id, 1.5%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 2074128k total, 1836852k used, 237276k free, 21732k buffers
Swap: 2096472k total, 56440k used, 2040032k free, 278048k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16776 Apache 16 0 38752 23m 3124 S 20.4 1.2 0:01.32 httpd
16252 Apache 15 0 37760 20m 3240 S 5.6 1.0 0:00.46 httpd
16333 Apache 15 0 36152 21m 3136 S 5.0 1.1 0:01.16 httpd
17426 Apache 15 0 35732 20m 3056 S 3.2 1.0 0:00.16 httpd
17418 Apache 16 0 38536 22m 3020 S 2.8 1.1 0:00.14 httpd
16161 Apache 16 0 36800 21m 3148 S 2.0 1.1 0:00.63 httpd
15988 Apache 15 0 29284 12m 3112 S 1.8 0.6 0:00.20 httpd
17441 mysql 16 0 66656 19m 1988 R 1.4 1.0 0:00.07 mysqld
17442 mysql 16 0 66656 19m 1988 R 1.2 1.0 0:00.06 mysqld
12265 Apache 15 0 35916 21m 3148 S 0.8 1.0 0:01.49 httpd
15987 Apache 15 0 37616 20m 3224 S 0.6 1.0 0:00.46 httpd
13564 root 15 0 2552 1196 804 R 0.4 0.1 0:00.83 top
17011 Apache 15 0 26668 11m 3016 S 0.4 0.6 0:00.05 httpd
409 root 10 -5 0 0 0 S 0.2 0.0 0:21.83 scsi_eh_0
3920 mysql 15 0 66656 19m 1988 S 0.2 1.0 0:26.90 mysqld
9357 Apache 18 0 40896 23m 3228 S 0.2 1.2 0:03.36 httpd
11971 Apache 18 0 39888 23m 3868 S 0.2 1.1 0:01.55 httpd
Abnormal top:
top - 09:12:12 up 3 days, 19:33, 1 user, load average: 58.75, 69.17, 58.05
Tasks: 568 total, 2 running, 563 sleeping, 0 stopped, 3 zombie
Cpu(s): 5.6%us, 2.3%sy, 0.0%ni, 11.7%id, 79.9%wa, 0.1%hi, 0.4%si, 0.0%st
Mem: 2074128k total, 2004008k used, 70120k free, 9008k buffers
Swap: 2096472k total, 1009264k used, 1087208k free, 128268k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14534 mysql 16 0 79764 24m 1824 R 6.0 1.2 0:00.20 mysqld
13903 mysql 16 0 79764 24m 1824 S 2.4 1.2 0:00.13 mysqld
13906 mysql 16 0 79764 24m 1824 S 2.4 1.2 0:00.08 mysqld
14068 mysql 16 0 79764 24m 1824 S 1.8 1.2 0:00.10 mysqld
13862 Apache 15 0 35532 15m 1892 D 0.9 0.8 0:00.44 httpd
14316 Apache 16 0 26012 6672 1852 S 0.9 0.3 0:00.14 httpd
14787 Apache 16 0 27992 8332 1820 D 0.9 0.4 0:00.06 httpd
10588 Apache 18 0 39480 13m 1912 D 0.6 0.7 0:01.42 httpd
12457 Apache 16 0 39332 12m 2328 D 0.6 0.6 0:00.42 httpd
13564 root 16 0 2684 1180 648 S 0.6 0.1 5:18.00 top
13819 Apache 15 0 26688 7352 2276 S 0.6 0.4 0:00.56 httpd
13853 mysql 16 0 79764 24m 1824 S 0.6 1.2 0:00.09 mysqld
14335 Apache 16 0 28544 8964 1872 S 0.6 0.4 0:00.30 httpd
442 root 10 -5 0 0 0 D 0.3 0.0 0:53.61 kjournald
6337 Apache 15 0 39420 17m 2648 S 0.3 0.9 0:03.46 httpd
9976 Apache 18 0 38924 7708 2316 S 0.3 0.4 0:01.44 httpd
9990 Apache 15 0 36432 16m 2556 S 0.3 0.8 0:02.23 httpd
これは、ServerLimit設定およびhttpd.conf内の他の設定の値です。
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
ServerLimitを100程度にダイヤルダウンし、MaxRequestPerChildを約1000に減らして、子がより速く刈り取るようにします。