過負荷状態でサーバーのパフォーマンスをテストするためのテスト設定を構築しようとしています。これを行うには、何千ものTCP接続を開きたいと思います。問題は、ホストがサーバー用とロードジェネレータ用にそれぞれ2つしかないことです。
これを行う方法はありますか?
答え1
いいですね。 2つのファイルが必要です。
最初のファイルは、netcatを使用して複数のリスニングポートを開くサーバーで実行する小さなスクリプトです。
2番目のファイルは、クライアントで実行される小さなスクリプトです。必ずserverIP
サーバーの物理IPに変更してください。
今覚えておいてください。これは私がとても早く整理したものです。ポートリストは完璧ではありません。一部のポートは予約されており、一部は使用されますが、ほとんどは有効なため、どちらもrootとして実行する必要があります。私のシステムで実行されており、2000のうち約20がすでに使用されています。したがって、調整することができますが、アイデアを得ることができます。ポート数を増やしたり、データを読み書きするなどの方法で負荷を増やすこともできますが、それが望むようです。
最初のファイルの名前は runoserver です。
#!/bin/bash
for port in `seq 50000 52000`;
do
netcat -l $port &
done
2 番目のファイル名は runonclient です。
#!/bin/bash
for port in `seq 50000 52000`;
do
netcat serverIP $port &
done
編集 - あなたのコメントの質問への回答
同じポートで複数の接続を同時に開くことはできません。誰もがポートのWebサーバーにどのようにアクセスするかを考えると、80
いくつかの魔法が関係しています。 Googleにアクセスしてポート80に接続すると、GoogleのWebページにアクセスできます。 Google の基本的な回答は次のとおりです。
I'm Google-
This was a valid request-
Continue all communication on port X-
Then your computer and Google's server opens port X for reading and writing.
Port X would be a non-reserved, not in use, high numbered port. ex: 25643
したがって、ポート80への接続は1秒もかからず、ロードバランシングやその他のTCP / IPマジックを介して1秒あたり数百万の要求を処理できます。これは多くの詳細と手順を省略した単純化された説明ですが、同時にポートに複数の接続を作成する方法をある程度説明することに注意してください。