2012年7月4日水曜日

Node.jsで手動GCをかける

どうも、オレ@残業中です。

今日はNodeアプリケーションで任意のタイミングでGCをかける方法をめもめも。
nodejs_jpグループ内で、メモリリークに質問してたら@shigekiさんに教わりました。
※その時の質問はコチラ(https://groups.google.com/forum/#!topic/nodejs_jp/WcbaEZndexE)
※@shigekiさんのサンプルソースはコチラ(https://gist.github.com/2840165)

Nodeを起動するときに

$ node --nouse_idle_notification and --expose_gc app.jp
のようにして起動させます。


GCをかける時は、プログラム内に

global.gc();
を追加します。


参考サイトはこちら
MANUALLY RUN GC IN NODE.JS - DEV JAR
V8エンジンのGCはこれからも改良されていき、またV8がNodeに反映されるまでも少しタイムラグがあるみたいですが、
これから少しずつ改良されていくことに期待です。


以上でぇえぇぇぇす。

2012年7月3日火曜日

Node.jsをv0.8.1にしたらexpressがv3.0.0 beta4になって動かなくなった

どうも、オレ@お昼休みです。
Nodeが一気にv0.6.19からv0.8.1になったという知らせを受けて早速バージョンアップしました。

$ nave install stable

何かが動かなくなるだろうな、と思いながらテスト用に作ってあるexpress+socket.io製app.jsを起動しようとすると案の定動きませんでした。
「動きません」というか起動はするのですが、socket.ioを使ったwebsocket接続ができませんでした。
接続してもうんともすんとも言わない状況です。

expressのhello-worldサンプルのがるGitを見ると、どうもexpressの使い方が以前と変わってるみたい。
→createServer()が必要なくなったぽい。

なので、サンプルに習ってこう書き換えます。(部分抜粋)

$ vim app.js

---------------------------------
var express = require('express');
// これはもう使わない
// var app = module.exports = express.createServer();
var app = express();

var io = require('socket.io');

// 使わない
// app.listen(3000, function() {
//    console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
//});

var socket = io.listen(app.listen(3000));
これでバッチリ



以上でぇぇえぇぇす。