備忘録:Javascript実行メモリが足りなくなる問題
2020年3月7日Vue, トピックス
node.jsとか使っている環境でたまに聞く問題。メモリーリークが発生して動作しなくなるというもの。たまたま、困ったお客さんから依頼され相談されたので調べてみることに。今回はVueのアプリケーションでした。普段Vueとか使うこと無いのであまり詳しくないんだがとりあえず対処できるか試行錯誤してみました。原因はvueの問題ではなく内部で呼び出しているnodeのissueです。
console.logでメモリ割付状況を表示しサーバ側のメモリー状況を調べると、確かに供給可能なのに割当をしてくれない状況が確認できた。npxコマンドで割当を変更する処理を行い対処ができた。どうやら、この問題はOSの環境とnode関連のバージョンがちょっと古いと問題がでるみたいだ。
対処方法
基本的にクライアント端末OSはメモリ制限はないはず。メモリに余力がある範囲で超過することなく動作するように設計しているはずです。しかしブラウザにおいては200MBの制限(ブラウザウィンドウ単位)があるので制限は結局の所ある。この設定を変更するための設定をサーバ側の方では指定することで拡張が行なえます。下記は4096MBに拡張する設定ですが、よほどウィンドウ(タブ)開いているかJavascriptバリバリのコンテンツを沢山見なければ下記の値の1/4も設定すれば十分な気がします。なお、修正はweb appのドキュメントルートにあるpackage.jsonを編集します。環境変数でNODEのオプション設定する方法もありますがプロジェクト単位で割り付けるならpackage.jsonを編集するのが良いと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ vi package.json <<修正する前>> { "name": "vueapp", "version": "0.x.x", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, <<修正後>> { "name": "vueapp", "version": "0.x.x", "private": true, "scripts": { "serve" : "npx --max_old_space_size=4096 vue-cli-service serve",// change the line for memory leak. "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, ※修正後は普通に 「yarn serve」で起動してください。 |
タグ: javascript, memory leak, node, vue, yarn