エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

tsifyでout of memoryが発生した時に対応したこと。解決編

元記事

suzaku-tec.hatenadiary.jp

調査方法

とりあえず、gulpの各タスクに、 process.memoryUsage() を埋め込んで、実行。
開始と終了時に計測するようにした。
終わりは、on('end', ・・・・) でイベント拾って出すようにした。

本当は、もっとうまいやり方があるのかも知れない。。。

原因

tsのビルドタスクが、3つくらい並列して実行しているところがあって、そこで一気にメモリを喰って発生していたみたい。。。

特に依存関係もないし、分割したら問題なく動いた。

ちなみに発生していた箇所のタスクの実装は、以下みたいな感じ。

gulp.task('A', [b, c, d], function () {
・・・・
});

他の流れにそって、並列実行するようにしたのがアカンかった。。。
というか、最初から並列実行するように作らんでもええやんけ!って、最初に作った人を呪ってしまった。
俺も同じことしそうだから、他人を責めるのは良くないね。

回避方法

run-sequence っていうnodeモジュールを使えば、順次実行制御できるようになる。
gulp内の機能にないのが、面倒くさいところではあるが。。。

感想

gulpは並列実行できるのは良いんだけど、並列でやりすぎてメモリが枯渇するのは、どうにかできないもんだろうか?

参考サイト

Gulp でタスクを並列/直列処理する - Qiita