这是脚本,它附带 mod_evasive:
#!/usr/bin/perl
#test.pl: small script to test mod_dosevasive's effectiveness
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "MY_IP:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
如果我在我的电脑上运行此脚本,将“MY_IP”替换为我的 VPS(openVZ、3 个 CPU 核心 2.53Ghz、1Gb RAM)的 IP,服务器中的 CPU 负载会快速增加。如果我同时运行 3 或 4 个脚本实例,CPU 负载将达到 100%。一旦脚本停止,CPU 使用率就会回到 5-10%。
这是正常的吗??CSF 已安装,并且会阻止连接数超过 300 的 IP,但似乎不会阻止此脚本。如果我检查netstat -n | grep MY_PC_IP
,即使在运行脚本时,我也从未看到超过 30 或 40 个连接。
如果您针对您的网站运行该脚本,CPU 使用率是否会增加?我的服务器或 Apache 出了什么问题?
答案1
100% 的 CPU 负载怎么会成为问题?您的脚本没有超时,因此显然它会完全加载目标服务器。100% 的 CPU 使用率并不意味着服务器正在死机,只是表示它正在运行。服务器是否真的变得无响应或崩溃了?