大津さん
koexukaです。
度々の返信ありがとうございます。

ちなみにベンチマークするクライアントでは socket.io-client がちゃんと動作 
> していますでしょうか? (1000接続をどうシミュレートしたのか気になります。) 

肝心な部分が伝え漏れていました。申し訳ございません。

クライアントは2パターンでテストしています。
1)ブラウザ(Mac版Firefox/Safari、socket.io-client)
→複数タブ、ウィンドウで複数接続します。
2)Objective-Cによる実装
→@growthfieldさんのNNSocketIO(https://github.com/growthfield/NNSocketIO)を使っています。

サーバ側で出力されるデバッグログですが、ブラウザでもObjective-Cでも
[2012-05-30 18:25:53.065] [INFO] console - debug: 'emitting heartbeat for 
client' '644389363226675471'                                               
                 
[2012-05-30 18:25:53.066] [INFO] console - debug: 'websocket writing' '2::'
[2012-05-30 18:25:53.067] [INFO] console - debug: 'set heartbeat timeout 
for client' '644389363226675471'
[2012-05-30 18:25:53.068] [INFO] console - debug: 'got heartbeat packet'
[2012-05-30 18:25:53.069] [INFO] console - debug: 'cleared heartbeat 
timeout for client' '644389363226675471'
[2012-05-30 18:25:53.069] [INFO] console - debug: 'set heartbeat interval 
for client' '644389363226675471' 
のように出ており、クライアント側は特に問題がないかなと思っています。


ちなみに、ブラウザからsocket.io-clientを使って1接続のみで試してみた場合ですが、
やはり少しずつ(10KB〜30KB)、heartbeat interval秒ごとにNodeが使用するメモリが上昇していきます。


ですが、ベンチマークのとり方、プログラムソースの間違いやクライアント側に問題がないかどうか、
再度確かめてみます。


よろしくお願い致します。

2012年5月30日水曜日 16時32分44秒 UTC+9 shigeki:
>
> 大津です。 
>
> > ベンチマークではサーバに対し多数(0〜1000)接続 し、disconnectやconnect 
> > を繰り返し 
> > Nodeのメモリ使用量を監視していますが、 
> > 定期的に使用量がグッと下がる(恐らくGC)ことはありますが、長いスパンで見 
> > ると全体として増え続けています。 
> > ※どこかのタイミングで接続数を0(ゼロ)にしてしばらく経過すると、メモリ使 
> > 用量はNode起動時の状態に戻りますが、実運用ではあり得ない状態だと思います。 
> > 
> > この状態であれば、例えばメモリを2GB積んだサーバの場合、 
> > 2〜3日でメモリが枯渇してしまうのではないかと危惧しています。 
>
> ちょっと使用量が大きいですね。 
>
> ちなみにベンチマークするクライアントでは socket.io-client がちゃんと動作 
> していますでしょうか? (1000接続をどうシミュレートしたのか気になります。) 
>
> socket.io の heartbeat はサーバから送信する時に毎回 setTimeout() でタイ 
> マーを登録するので heartbeat が返ってこないとタイムアウト時間(default 60 
> 秒)までタイマーが登録されたままです。デバッグ出力に 
>
>     debug - got heartbeat packet 
>     debug - cleared heartbeat timeout for client XXXXXX 
>
> とか出力されていますか? 
>

メールによる返信