Accept 惊群现象测试perl脚本

$uname -a
Linux debian-11-34 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 GNU/Linux
 
经过测试Debina 8.0 已经解决了Aceept thundering herd 
 
 
# 1) run this script with either "accept" or "select-accept" as the argument
# (the script listens to 127.0.0.1:12345)
# 2) telnet localhost 12345
# 3) if you see "accept failed", there is the thundering herd problem
#
#
use strict;
use warnings;
use IO::Socket::INET;

my $mode = $ARGV[0] || '';
if ($mode !~ /^(accept|select-accept)$/) {
    die "Usage: $0 <accept|select-accept>\n";
}
my $listener = IO::Socket::INET->new(
                                     Listen => 5,
                                     LocalPort => 12345,
                                     LocalAddr => '127.0.0.1',
                                     Proto => 'tcp',
                                     ReuseAddr => 1,
                                     ) or die "failed to listen to port 127.0.0.1:12345:$!";

if ($mode eq 'select-accept') {
    $listener->blocking(0)
    or die "failed to set listening socket to non-blocking mode:$!";
}
my $pid = fork;
die "fork failed:$!"
unless defined $pid;
while (1) {
    if ($mode eq 'select-accept') {
        while (1) {
            my $rfds = '';
            vec($rfds, fileno($listener), 1) = 1;
            if (select($rfds, undef, undef, undef) >= 1) {
                last;
            }
        }
    }
    my $conn = $listener->accept;
    if ($conn) {
        warn "connected!";
        $conn->close;
    } else {
        warn "accept failed:$!";
    }
}

posted on 2015-06-05 17:40  深入浅出eBPF  阅读(386)  评论(0编辑  收藏  举报

导航