home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/Apache MINA/Echo Server, Client 習作

Java/Apache MINA/Echo Server, Client 習作

Java / Apache MINA / Echo Server, Client 習作
id: 800 所有者: msakamoto-sf    作成日: 2010-10-04 17:23:47
カテゴリ: Java 

Apache MINA で Echo Server/Client を作ってみた。

通常、習作のechoサーバ/クライアントと言えばせいぜいが数文字のテキストデータをやりとりする程度。
今回の "act8" は可変長パケットっぽいデータ形式にラップして、1MBのランダムデータを複数クライアントから延々と送受信し続ける状況を想定している。

目的としては、実際に1MBを越えるデータを送受信するアプリケーションをMINAで組んだ場合、ByteBufferを使うことでヒープオーバーフローやOutOfMemoryが発生するか検証すること。


実際にServer側で

-server -Xms200m -Xmx200m -Xloggc:gc.log

でgcログを出力し、gcviewerで確認した結果が以下のスクリーンショット。クライアント側は10個の接続、1MBのパケットを100ms間隔で送受信している。

青い線がヒープ消費量、灰色の縦線がGC発生とGCにかかった時間を示す。

画像/2010/10/04/172220/WS000220.jpg

なんとかオーバーフローやOutOfMemoryが発生せずに動き続けているが、10秒強の間隔でフルGCが発生している。

画像/2010/10/04/172303/WS000221.jpg


但し上記例だと、クライアント側が1秒間に送信するデータの合計は

1MB * 10(1000/100ms) * 10 = 100MB

で、800Mbpsになる。実験はloopbackデバイスを使っているとはいえ、現実的には100Mbpsのネットワークカードを使う事になるので、明らかに送信過剰といえる。

そこで、実際の100Mbpsに即したパケットサイズに調整してみる。間隔もクライアント側でビジネスロジックを処理する事を考慮し、200ms位を目安にしてみる。

10クライアント x 200ms(interval) x 262144bytes = 104,857,600 bits/s (100Mbps)

実際はこれにTCP/IPのヘッダーが付く為、100Mbpsを少し上回る計算になる。

クライアント側を上記セッティングで、サーバー側のヒープMAXを200MB、上記と同じ条件にして実行したのが下記gcviewerになる。

画像/2010/10/04/210546/WS000222.jpg

フルGCは発動せず、かなり安定したヒープ使用量とGC状況になった。


検証環境

Windows XP SP3
Pentium4 2.8GHz (HT)
2GB RAM
Java 1.6.12
Apache MINA 1.1.7


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-10-04 21:08:05
md5:5c7e99fdbf4c126012c451e39ed7e6a1
sha1:97192ccb3c76e55554943f2a316fd62ce7772c08
コメント
コメントを投稿するにはログインして下さい。