CLOSE-WAITを出現させたい【AWS】

EC2アイキャッチ画像

リソースのテストを行うため、CLOSE-WAITを大量に出現させる必要があったので、サンプル的にCLOSE-WAIT を出現させるコードを作ってみました。

・サーバー間のソケット通信でCLOSE-WAITを大量発生させたい。

前提条件

こちらのソースコードはサーバー間疎通が必要なため、CLOSE-WAITを発生させたいサーバーと
繋ぎ先のサーバー2台が必要です。

サーバー間疎通イメージ

・javaはすでにインストール済み
・接続先EC2のSGを修正しポート80からのアクセスを許可済み

ソースコードの作成

CLOSE-WAITを起こしたいサーバーにログインし、下記コマンドでjavaファイルを作成します。
※実行するディレクトリはどこでも構いません。

vi CloseWaitTest.java

CloseWaitTest.javaの中身

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class CloseWaitTest {
    public static void main(String[] args) {
        String host = "サーバーのIPアドレス";
        int port = 80;

        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(host, port));

            socket.setKeepAlive(true);

            if (socket.isConnected()) {
                System.out.println("TCP KeepAliveを有効");
            } else {
                System.out.println("TCP KeepAlive有効化失敗");
            }
            while (true) {
                System.out.println("スレッドスリープ");
                Thread.sleep(10000);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

作成しましたら、コンパイルを行います。

javac CloseWaitTest.java

javaの実行

java CloseWaitTest

1~2分ほど置いて、新規ターミナルを開き、下記コマンドを実行すればCLOSE_WAITが発生されているのを確認できます。

netstat -nat
CLOSE-WAIt実行テスト

辞める時はCtrl + Cでプロセスを強制終了してください。

実行結果ログ

以上です。何かの参考になれば幸いです。