大津です。 > なので,本当にメモリリークが発生していていずれはヒープが > 枯渇するのか,それともフル GC が先延ばしにされているだけ > なのかを見極める必要があるのではないかと思います.
そうですよねぇ。 ちょっと調べたら socket.io の heartbeat を捕まえることができたので、1つ の端末でクライアントから返ってきたタイミングの memoryUsage の変化を5分 程度見てみました。コードはこれです。 https://gist.github.com/2836908 heartbeat interval を極端に短く 0.1 秒にして node-v0.6.18 と 0.7.10-pre (master) での比較です。GC のタイミングだけ見たいので値が減った時のみ出力 しています。頭はカウンターなのでだいたい0.1秒刻みのカウンターです。 (socket.io 0.9.6 は master でも動くんですね。驚きでした。) これみると極端なメモリーリークはなさそうですが、heap確保に伴ってメモリ利 用量は増えていますね。でも確保ができなくなった限界時の挙動で差が出るかも しれないのでなんとも言えないです。V8 3.6 では 1G 限界でしたっけ? 確か今 はリミット外されているようなことを聞いた覚えがあります。 一度これでエージングしてみたらいかがでしょうか? > node -e 'console.log(process.versions)' > { node: '0.6.18', > v8: '3.6.6.25', > ares: '1.7.5-DEV', > uv: '0.6', > openssl: '1.0.1' } > unixjp:~/tmp/socketio> node test.js > info - socket.io started > client connected > 93 { rss: 11591680, heapTotal: 5027296, heapUsed: 3502640 } 'delta:' { rss: > 4096, heapTotal: 524288, heapUsed: -434016 } > 194 { rss: 12124160, heapTotal: 5170176, heapUsed: 3547104 } 'delta:' { rss: > 4096, heapTotal: 142880, heapUsed: -416068 } > 311 { rss: 12214272, heapTotal: 5170176, heapUsed: 3571988 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -481880 } > 429 { rss: 12230656, heapTotal: 5170176, heapUsed: 3598660 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -483576 } > 547 { rss: 12242944, heapTotal: 5170176, heapUsed: 3625764 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -483580 } > 664 { rss: 12259328, heapTotal: 5170176, heapUsed: 3654864 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -483748 } > 782 { rss: 12271616, heapTotal: 5300736, heapUsed: 3681024 } 'delta:' { rss: > 0, heapTotal: 130560, heapUsed: -484112 } > 900 { rss: 12353536, heapTotal: 5300736, heapUsed: 3707880 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -483788 } > 1018 { rss: 12365824, heapTotal: 5300736, heapUsed: 3734372 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -484048 } > 1136 { rss: 12378112, heapTotal: 5300736, heapUsed: 3760760 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -484036 } > 1251 { rss: 12398592, heapTotal: 5300736, heapUsed: 3797192 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -481168 } > 1369 { rss: 12414976, heapTotal: 6471712, heapUsed: 3826752 } 'delta:' { rss: > 0, heapTotal: 1170976, heapUsed: -481056 } > 1610 { rss: 13021184, heapTotal: 6471712, heapUsed: 3877292 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -990048 } > 1847 { rss: 13565952, heapTotal: 6471712, heapUsed: 3930112 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -971504 } > 2084 { rss: 13590528, heapTotal: 6594112, heapUsed: 3980724 } 'delta:' { rss: > 0, heapTotal: 122400, heapUsed: -972468 } > 2322 { rss: 13680640, heapTotal: 6594112, heapUsed: 4035644 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -972676 } > 2559 { rss: 13705216, heapTotal: 6594112, heapUsed: 4088056 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -972204 } > 2796 { rss: 13799424, heapTotal: 6724672, heapUsed: 4138332 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -972556 } > 3033 { rss: 13824000, heapTotal: 6847072, heapUsed: 4190640 } 'delta:' { rss: > 0, heapTotal: 122400, heapUsed: -972548 } > ~/tmp/github/node/node -e 'console.log(process.versions)' > { http_parser: '1.0', > node: '0.7.10-pre', > v8: '3.11.1', > ares: '1.7.5-DEV', > uv: '0.6', > zlib: '1.2.3', > openssl: '1.0.0f' } > unixjp:~/tmp/socketio> ~/tmp/github/node/node test.js > info - socket.io started > client connected > 165 { rss: 12722176, heapTotal: 8232576, heapUsed: 4473320 } 'delta:' { rss: > 12288, heapTotal: 1048576, heapUsed: -870816 } > 333 { rss: 14213120, heapTotal: 10263936, heapUsed: 4812396 } 'delta:' { rss: > 4096, heapTotal: 0, heapUsed: -794844 } > 511 { rss: 14606336, heapTotal: 10263936, heapUsed: 5091004 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -855820 } > 693 { rss: 14774272, heapTotal: 10263936, heapUsed: 5267516 } 'delta:' { rss: > 0, heapTotal: 0, heapUsed: -853648 } > 875 { rss: 14598144, heapTotal: 10263936, heapUsed: 4374072 } 'delta:' { rss: > -348160, heapTotal: 0, heapUsed: -1928132 } > 1071 { rss: 14602240, heapTotal: 10263936, heapUsed: 4629124 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -901220 } > 1250 { rss: 14606336, heapTotal: 10263936, heapUsed: 4806356 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -838748 } > 1432 { rss: 14606336, heapTotal: 10263936, heapUsed: 4976116 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -850560 } > 1613 { rss: 14651392, heapTotal: 12361088, heapUsed: 5148352 } 'delta:' { > rss: 36864, heapTotal: 2097152, heapUsed: -852704 } > 1994 { rss: 15818752, heapTotal: 12361088, heapUsed: 5512352 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -1784196 } > 2362 { rss: 17039360, heapTotal: 12361088, heapUsed: 5875796 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -1703584 } > 2624 { rss: 17338368, heapTotal: 12361088, heapUsed: 7339076 } 'delta:' { > rss: -4096, heapTotal: 0, heapUsed: 14996 } > 2733 { rss: 17395712, heapTotal: 12361088, heapUsed: 6235204 } 'delta:' { > rss: 0, heapTotal: 0, heapUsed: -1707464 } > 3104 { rss: 17776640, heapTotal: 13376768, heapUsed: 6611072 } 'delta:' { > rss: 0, heapTotal: 1015680, heapUsed: -1707284 }
