eth3:1, eth3:2, eth3:3
仮想マシンで 3 つの異なる仮想 IP アドレスを使用して作成しましたが、
現在、で実行されているnginxサーバーへの65,000を超える接続を作成しようとしています192.168.56.1
。
VM のリソースは限られているため、ポート範囲を
sysctl net.ipv4.ip_local_port_range="32768 33000"
次に、仮想 IP アドレスごとにリクエスト ( ) を nginx サーバー ( ) に 200 回600
送信するスレッドの作成を試みます。GET / HTTP/1.1
running at 192.168.56.1
しかし、私のプログラムはどこかで失敗します! IO::Socket が教えてくれaddress in use
ます。
nginx ログを確認したところ192.168.56.23 and 192.168.56.24
、nginx サーバーへのアクセスに 2 つの異なる IP アドレス ( ) しか使用されておらず、合計数はわずか 233 ( expected 200 x 3 = 600 access logs
) でした。
何が問題なのか知っている人はいますか?
#!/usr/bin/perl
use warnings;
use strict;
use threads;
use IO::Socket::INET;
$| = 1;
sub run
{
my ($ip, $id) = @_;
print ">> Sendto .. $ip ($id)\n";
my $socket = new IO::Socket::INET (
PeerHost => '192.168.56.1',
LocalHost => $ip,
PeerPort => '80',
Proto => 'tcp',
) or die $@;
print $socket "GET / HTTP/1.1\r\n\r\n";
sleep (100); # hold connection
$socket->close();
}
my @threads = ();
my @ips = qw/192.168.56.23 192.168.56.24 192.168.56.25/;
foreach my $ip (@ips)
{
for (1..200)
{
push @threads, threads->create (\&run, $ip, $_);
}
}
$_->join for @threads;