[英]Problems with Apache servers and A LOT of httpd processes
我們的Apache服務器有問題。 它真的很慢並且cpu使用率非常高(有時顯示100%的常數)。
它在ubuntu系統上。
可能導致這種情況的任何想法?
“top”顯示了這一點(可能還有更多的httpd進程不適合終端窗口):
top - 11:33:19 up 1:07, 2 users, load average: 37.79, 35.90, 29.14
Tasks: 86 total, 10 running, 76 sleeping, 0 stopped, 0 zombieCpu(s): 90.6%us, 9.4%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 786432k total, 379584k used, 406848k free, 0k buffersSwap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5507 nobody 16 0 54540 19m 5204 S 4 2.6 0:03.70 httpd 5653 nobody 17 0 59996 24m 4808 R 4 3.2 0:01.98 httpd
3277 nobody 15 0 201m 51m 6724 R 2 6.7 2:14.30 mysqld 5260 nobody 15 0 53740 18m 4972 S 2 2.4 0:06.53 httpd
5333 nobody 15 0 54536 19m 5152 S 2 2.5 0:06.50 httpd 3923 nobody 15 0 52644 18m 6372 S 1 2.4 0:16.80 httpd
5519 nobody 15 0 51252 15m 4792 S 1 2.0 0:03.02 httpd 4048 nobody 15 0 52808 17m 5040 R 1 2.3 0:13.86 httpd
5240 nobody 15 0 53980 18m 4916 S 1 2.4 0:08.42 httpd
5249 nobody 15 0 52908 17m 5188 S 1 2.3 0:08.23 httpd 5385 nobody 15 0 52568 16m 4824 S 1 2.2 0:04.19 httpd
5395 nobody 16 0 52536 16m 4804 S 1 2.1 0:03.90 httpd 5422 nobody 16 0 51408 15m 4888 S 1 2.1 0:03.49 httpd
5503 nobody 15 0 52536 16m 4800 S 1 2.1 0:02.67 httpd 3646 nobody 15 0 52572 16m 5012 S 1 2.2 0:25.42 httpd
3948 nobody 15 0 52844 17m 5008 R 1 2.3 0:17.15 httpd 5283 nobody 15 0 54000 18m 4944 S 1 2.4 0:07.05 httpd
5300 nobody 15 0 54748 19m 5276 S 1 2.6 0:06.20 httpd 5304 nobody 15 0 52876 17m 4904 S 1 2.2 0:06.45 httpd
5305 nobody 15 0 52812 17m 4884 S 1 2.2 0:06.02 httpd 5400 nobody 16 0 52060 16m 4800 R 1 2.1 0:04.10 httpd
5423 nobody 15 0 54764 19m 5196 S 1 2.6 0:04.37 httpd 5433 nobody 15 0 52168 16m 4844 R 1 2.1 0:03.38 httpd
5497 nobody 15 0 52572 16m 4820 S 1 2.2 0:02.83 httpd 5498 nobody 15 0 53076 17m 4864 S 1 2.3 0:03.14 httpd
5502 nobody 15 0 51260 15m 4804 S 1 2.0 0:02.70 httpd 5505 nobody 15 0 54920 19m 4976 S 1 2.5 0:02.68 httpd
5546 nobody 15 0 52584 16m 4664 S 1 2.2 0:02.48 httpd 5550 nobody 15 0 51244 15m 4796 S 1 2.0 0:02.42 httpd
5652 nobody 15 0 51976 17m 5912 S 1 2.3 0:01.24 httpd 5659 nobody 15 0 55012 19m 4980 S 1 2.6 0:01.25 httpd
5707 nobody 15 0 51416 15m 4880 S 1 2.1 0:00.09 httpd 5710 nobody 15 0 51240 15m 4792 S 1 2.0 0:00.14 httpd
5399 nobody 15 0 52568 16m 4856 S 1 2.2 0:03.86 httpd 5435 nobody 15 0 52596 16m 4864 S 1 2.2 0:02.96 httpd
5467 nobody 15 0 52316 16m 4856 R 1 2.1 0:02.93 httpd 5501 nobody 15 0 52956 17m 4844 S 1 2.2 0:02.79 httpd
5525 nobody 15 0 54508 19m 4916 S 1 2.5 0:03.41 httpd 5547 nobody 15 0 52604 18m 5708 S 1 2.3 0:02.77 httpd
5590 root 15 0 19208 1360 1044 R 1 0.2 0:00.39 top 5627 nobody 15 0 55648 20m 5164 S 1 2.6 0:02.56 httpd
5629 nobody 15 0 51248 15m 4792 S 1 2.0 0:01.62 httpd 5647 nobody 15 0 52956 17m 4884 S 1 2.2 0:01.16 httpd
5656 nobody 15 0 52588 17m 4884 S 1 2.2 0:00.94 httpd 5665 nobody 15 0 51244 15m 4792 S 1 2.0 0:01.36 httpd
5709 nobody 15 0 51928 15m 4628 S 1 2.1 0:00.02 httpd 5711 nobody 16 0 51148 15m 4600 S 1 2.0 0:00.02 httpd
Apache需要派生進程來處理每個連接的客戶端。 在這里閱讀更多相關信息。
結果是你有很多進程,因為你有很多連接。 如果您的服務器運行緩慢,那么這里有幾個選項:
所有這些選項都有成本,時間或金錢。 不幸的是,這就是它的方式:)
在我看來,最快的勝利可能是選項2和3.但它意味着在安裝或者有備份服務器工作時的停機時間。
根據我的經驗,數十個httpd進程是DOS攻擊。 在安裝mod_evasive之后,顯示通過top的幾十個httpd進程幾乎被淘汰,我的mysql CPU負載從較長時間利用率的平均100%+ / 99%下降到較重查詢操作期間預期的20%負載。
要在RHEL(CentOS / Fedora / Redhat)系統上安裝mod_evasive,請執行以下操作:
yum install -y mod_evasive
重啟Apache
/sbin/service httpd restart
要么
systemctl restart httpd
和中提琴。
即使DOS攻擊不是你的問題,在攻擊發生之前減輕攻擊也是明智之舉。
# cat /proc/version Linux version 3.10.0-514.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Dec 6 23:06:41 UTC 2016
Httpd版本:
# httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Nov 14 2016 18:04:44
# sudo apachectl -t -D DUMP_MODULES |grep mpm [Thu Jan 12 16:06:11.778080 2017] [so:warn] [pid 23727] AH01574: module wsgi_module is already loaded, skipping mpm_prefork_module (shared)
這意味着安裝並啟用了mpm_prefork_module
。 您可以將其更改為文件00-mpm.conf
的event
, worker
或prefork(default)
00-mpm.conf
,該文件路徑為/etc/httpd/conf.modules.d
。
Apache MPM的參考是Apache MPM Common Directives
添加個人配置# ps aux|grep httpd
root 16576 0.0 0.0 232232 504 ? Ss 13:40 0:01 /usr/sbin/httpd -DFOREGROUND
apache 24296 10.9 4.8 542936 91500 ? S 16:29 0:16 /usr/sbin/httpd -DFOREGROUND
apache 24310 10.6 4.7 542804 89752 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND
apache 24343 11.2 6.5 542804 123944 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND
apache 24344 11.1 6.5 542804 124084 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND
apache 24345 11.6 6.7 542804 126616 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND
apache 24347 11.0 6.6 542804 125764 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND
apache 24377 12.0 6.7 542804 126396 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND
apache 24378 12.4 6.7 542804 126448 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND
apache 24408 12.3 6.6 542804 126032 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND
apache 24450 18.6 5.4 511560 102520 ? R 16:30 0:10 /usr/sbin/httpd -DFOREGROUND
apache 24458 19.4 4.7 498476 89548 ? S 16:30 0:08 /usr/sbin/httpd -DFOREGROUND
apache 24466 21.4 4.5 495424 86416 ? R 16:31 0:07 /usr/sbin/httpd -DFOREGROUND
apache 24484 0.5 0.3 236456 5760 ? S 16:31 0:00 /usr/sbin/httpd -DFOREGROUND
root 24496 0.0 0.0 112652 964 pts/0 S+ 16:31 0:00 grep --color=auto httpd
在上述參考文獻中閱讀此配置的詳細信息。
# sudo systemctl restart httpd.service
# systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-01-12 13:40:12 CST; 2h 48min ago Docs: man:httpd(8) man:apachectl(8) Main PID: 16576 (httpd) Status: "Total requests: 3625; Current requests/sec: -70.2; Current traffic: 0 B/sec" Memory: 869.7M CGroup: /system.slice/httpd.service ├─16576 /usr/sbin/httpd -DFOREGROUND ├─24122 /usr/sbin/httpd -DFOREGROUND ├─24125 /usr/sbin/httpd -DFOREGROUND ├─24154 /usr/sbin/httpd -DFOREGROUND ├─24157 /usr/sbin/httpd -DFOREGROUND ├─24211 /usr/sbin/httpd -DFOREGROUND ├─24219 /usr/sbin/httpd -DFOREGROUND └─24236 /usr/sbin/httpd -DFOREGROUND Jan 12 13:40:12 192-168-1-68.node systemd[1]: Starting The Apache HTTP Server... Jan 12 13:40:12 192-168-1-68.node httpd[16576]: [Thu Jan 12 13:40:12.614941 2017] [so:warn] [pid 16576] AH01574: module wsgi_module is already loaded, skipping Jan 12 13:40:12 192-168-1-68.node systemd[1]: Started The Apache HTTP Server.
要么
# ps aux|grep httpd root 16576 0.0 0.0 232232 504 ? Ss 13:40 0:01 /usr/sbin/httpd -DFOREGROUND apache 24296 10.9 4.8 542936 91500 ? S 16:29 0:16 /usr/sbin/httpd -DFOREGROUND apache 24310 10.6 4.7 542804 89752 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND apache 24343 11.2 6.5 542804 123944 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND apache 24344 11.1 6.5 542804 124084 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND apache 24345 11.6 6.7 542804 126616 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND apache 24347 11.0 6.6 542804 125764 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND apache 24377 12.0 6.7 542804 126396 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND apache 24378 12.4 6.7 542804 126448 ? S 16:29 0:15 /usr/sbin/httpd -DFOREGROUND apache 24408 12.3 6.6 542804 126032 ? S 16:29 0:14 /usr/sbin/httpd -DFOREGROUND apache 24450 18.6 5.4 511560 102520 ? R 16:30 0:10 /usr/sbin/httpd -DFOREGROUND apache 24458 19.4 4.7 498476 89548 ? S 16:30 0:08 /usr/sbin/httpd -DFOREGROUND apache 24466 21.4 4.5 495424 86416 ? R 16:31 0:07 /usr/sbin/httpd -DFOREGROUND apache 24484 0.5 0.3 236456 5760 ? S 16:31 0:00 /usr/sbin/httpd -DFOREGROUND root 24496 0.0 0.0 112652 964 pts/0 S+ 16:31 0:00 grep --color=auto httpd
我的apache服務器每秒收到2個請求。 之前,httpd進程的數量增加,直到系統停止。 設置MPM Prefork后,它工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.