- 论坛徽章:
- 0
|
一台apache2.2,做了最简单的图片虚拟主机(一下简称为 A)。
前面搭建两台squid 2.6做反向代理(简称为 S1,S2),
两台squid前面是LB设备,
平时很正常,每台squid的连接数大概2500个,后端的A机器apache进程数大概30~50,连接数大概100左右(全是ESTABLISHED)。S1,S2两机器的cpu,io,load average值都非常小,网站图片访问速度正常。
但象抽经一样,在某些会发现全站图片访问巨慢或者根本打不开,于是进行系统检查,发现A机器的load average就会飙升到900(平时大概只有0.8~1.2左右),CPU和IO负担无变化,apache进程数量开多少跑到多少。(我这里最大开了1000,会在几十秒内跑满)
S1,S2两机器的连接数,每台飙升到大于12000,但CPU和io和load average无变化,在S1,S2两机器上wget A机器上的文件,显示是A机器的80 port连接等待
此时A机器的流出流量会增加一倍(平时30Mbsp),S1和S2的流出流量减少1倍(平时100Mbps)。
重启A机器的apache和和S1,S2上的SQuid均不能消除现象,这种现象有时候会持续几分钟,有时候会持续几个小时,然后突然他自己就好了,一切恢复平静。
A机器和S1/S2机器上没有其他额外服务(A机器上有nfsd,但流量很小)。
经过多次测试,发现在其中任意一台squid重启后,后面的A机器的load average会突然飙升到900,连接到1000,apache不能响应请求,前台页面无法访问,但cpu和io负担都很低,奇怪的时候有时候通过重启A机器的apache能解决问题,有时候却又不行。怀疑是squid搞死apache。在squid重启后mem cache里的东西都丢失需要到A机器重启获取,这到是可以理解,但是问题是平时squid根本不会被重启,为什么也会导致后面的A机器负担突然升高,apache跑满呢?
squid 2.6的编译参数:
./configure '--prefix=/usr/local/squid' '--enable-referer-log' '--enable-useragent-log' '--enable-x-accelerator-vary' '--with-maxfd=131072'
squid的配置应该是没有问题的。
曾经怀疑是线路问题,换了线,问题依旧。
怀疑是攻击行为,但我前面有抗ddos的设备,没有发现任何攻击倾向。
怀疑是apache的问题,重新编译安装过不同版本的apache,问题依旧。
查看squid的cache.log文件,发现很多下面的数据
2007/12/02 23:40:47| Failed to select source for 'http://www1.cw988.cn/f4.exe'
2007/12/02 23:40:47| always_direct = 0
2007/12/02 23:40:47| never_direct = 0
2007/12/02 23:40:47| timedout = 0
2007/12/02 23:40:47| Failed to select source for 'http://www1.cw988.cn/f9.exe'
2007/12/02 23:40:47| always_direct = 0
2007/12/02 23:40:47| never_direct = 0
2007/12/02 23:40:47| timedout = 0
我的squid没有对www1.cw988.cn进行加速,而且cw988.cn也没有指向我的任何服务器,并且squid已经取消了正向代理,不能进行正常代理的。
我的两台squid是做load banlance的,在正常情况下,我测试停掉一台的时候,只有一台squid也能顶的住我全站的图片,但当我启动测试的那一台的时候,就开始抽经了。。。。
现在这种现象发生的非常频繁,人简直要疯了,谁能救命? |
|