网站打开很慢,php-cgi 占用 CPU,CPU 长期 100%,求解?

2014-08-24 23:36:34 +08:00
 reyals
top - 23:30:47 up 56 min, 1 user, load average: 3.06, 3.16, 3.59
Tasks: 76 total, 6 running, 70 sleeping, 0 stopped, 0 zombie
Cpu(s): 96.3%us, 3.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st
Mem: 1020384k total, 322148k used, 698236k free, 16096k buffers
Swap: 1044184k total, 0k used, 1044184k free, 72168k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
998 www 20 0 235m 36m 4344 R 19.6 3.6 8:44.12 php-cgi
999 www 20 0 235m 36m 4288 R 19.6 3.6 8:44.00 php-cgi
12407 www 20 0 229m 31m 3680 R 19.6 3.2 2:18.38 php-cgi
1001 www 20 0 233m 34m 4292 R 19.3 3.5 8:44.08 php-cgi
1002 www 20 0 231m 32m 4340 R 19.3 3.3 8:43.82 php-cgi

大部分时间是这样的状态

lnmp,wordpress跑个小博客,每天IP才5000K

追踪进程
ll /proc/998/fd/
lrwx------ 1 www www 64 Aug 24 23:32 0 -> socket:[8205]
l-wx------ 1 www www 64 Aug 24 23:32 1 -> pipe:[8210]
l-wx------ 1 www www 64 Aug 24 23:32 2 -> pipe:[8211]
lrwx------ 1 www www 64 Aug 24 23:32 3 -> socket:[147091]
lrwx------ 1 www www 64 Aug 24 23:32 4 -> socket:[147095]

服务器监控,很有规律的,每隔10来分钟,CPU就下来几分钟,然后又100%了
8722 次点击
所在节点    问与答
11 条回复
rainysia
2014-08-25 09:50:33 +08:00
才 5000K IP.

100%你还想肿么样
reyals
2014-08-25 10:17:15 +08:00
@rainysia 什么意思啊?之前9000ip都很正常的。突然就这样了。
ChiChou
2014-08-25 10:46:27 +08:00
你的网站很有可能被黑,挂了 PHP DDOS 木马。简单说就是基于 php 的发包函数,用你的 vps 和流量对外发动攻击。

如果你能管理 php.ini 的话,建议临时禁用 socket 系列函数,然后查看日志,基本上就可以定位到木马位置。
reyals
2014-08-25 10:49:13 +08:00
@ChiChou 先感谢,马上试试。
reyals
2014-08-25 10:50:15 +08:00
@reyals 请问主要查看php日志还是nginx?
jk2r
2014-08-25 11:19:27 +08:00
0. 还是得弄一个干净的php脚本(或者新的web),跑一个benchmark,看机器是不是不行。
1. 先看一下access_log,看有没有异常请求量很多的代码。再看一下,有没有哪些网页,request_time很长的,如果有跳到2。
2. 手工debug代码,二分法查什么地方卡了。
3. strace -vv 一下cpu多的进程都在干嘛,发log上来。
reyals
2014-08-25 11:28:02 +08:00
access_log确实很异常,大量的403和404

这些请求的网站都不是我的站。

219.148.108.132 - - [17/Aug/2014:09:31:59 +0800] "GET http://www.atmji.com/checkip.aspx HTTP/1.1" 404 564 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -
219.148.108.132 - - [17/Aug/2014:10:02:10 +0800] "GET http://www.qhdjrfw.com/checkip.aspx HTTP/1.1" 404 564 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -
219.148.108.132 - - [17/Aug/2014:10:35:39 +0800] "GET http://www.atmji.com/checkip.aspx HTTP/1.1" 404 564 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -
219.148.108.132 - - [17/Aug/2014:11:06:21 +0800] "GET http://www.atmji.com/checkip.aspx HTTP/1.1" 404 564 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -
219.148.108.132 - - [17/Aug/2014:11:38:00 +0800] "GET http://www.data321.com/checkip.aspx HTTP/1.1" 404 564 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" -
jk2r
2014-08-25 15:11:44 +08:00
404这个是抓站还是爬虫吧,从你日志看都是219.148.108.132。统计一下top10,不认识的,封了先看看情况。
reyals
2014-08-25 17:20:58 +08:00
@jk2r 封了一些IP,看看情况。

不停的请求,就能把CPU搞挂,有这种攻击方式吗?

CPU100%的时候,网络流量也不大啊,不到1Mb
jk2r
2014-08-25 19:26:17 +08:00
不停请求,你也可以理解为DOS呗。PHP跑程序,当然就慢了。

代码级,fastcgi缓存、php页面级缓存(wordpress Memcached插件),都能缓解。

程序员范儿,可以cron扫访问日志找到TOP N的垃圾请求,iptables封IP。当然也可以lua。

不是有意攻击的话,还是有很多解决方法的。

PS:你的blog有5000k,日均500w IP?
reyals
2014-08-25 21:56:49 +08:00
@jk2r 恩恩
逗比了,是5K每天。。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX