2017-12-01 7 views
1

私のアプリケーションでxlsx-chartノードモジュールを使用しています。このモジュールは、メモリを使用してデータポイントからExcelチャートを生成します。私はあまりにも多くのデータを持っているとき、時々指し、このような私のノードのjsのアプリのクラッシュ:まずNodejs V8 GCがExcel生成ファイルのクラッシュ前に通知する

<--- Last few GCs ---> 

[6420:000000CD560122F0] 77691 ms: Mark-sweep 2047.4 (2086.4) -> 2047.4 (2086.4) MB, 1235.2/0.1 ms allocation failure GC in old space 
requested 
[6420:000000CD560122F0] 79246 ms: Mark-sweep 2047.4 (2086.4) -> 2047.4 (2086.4) MB, 1141.2/0.0 ms last resort 
[6420:000000CD560122F0] 80808 ms: Mark-sweep 2047.4 (2086.4) -> 2047.4 (2086.4) MB, 1561.1/0.0 ms last resort 


<--- JS stacktrace ---> 

==== JS stack trace ========================================= 

Security context: 000001D77B79BBE9 <JS Object> 
    2: /* anonymous */ [C:\XXXX\base64.js:~7] [pc=000001A01E7EC475](this=000000BA 
08CE36B1 <an Object with map 0000038E23FBE9A9>,input=0000017D18202201 <Very long string[50266376]>,utf8=000001D77B782241 <undefined>) 
    3: arguments adaptor frame: 1->2 
    4: generate [C:\XXXXX 

私はtryおよびcatchブロック内でExcelファイルを機能させる呼び出し場所を置くしようとしていたように、ヒープエラーが発生した場合に私はちょうどユーザーに正しいメッセージを送信し、私のサーバーを再起動します。しかし、GCはtry catchのエラーとは独立しているように見えます。

私の主な質問は、CGクラッシュの前にユーザーにどのように応答を送ることができ、クラッシュが発生した場合に自動的にサーバーを再起動する方法です。

おかげ

答えて

2

はあなたのnode.jsプロセスが使用できる最大メモリが増加します--max-old-space-sizeを使用することができます。

また、クラッシュした場合にPM2ツールを使用してアプリケーションを再起動できます。


しかし

私はあなたのファイルを生成している限度であるかを調べるために、あなたをrecommand。また、node.jsが生成するファイルに応じて最大サイズを上げることもできます。またはExcelの生成をやり直す。あなたのnode.jsは決してこのエラーを受け取るべきではありません。

+0

ありがとうございました。私はxlsx-chart moduoleを使用しているので、どのように予測できるか分かりませんでしたが、私は自分のデータサイズにアクセスできますが、書きたいデータの実際のサイズに変換する方法はわかりませんExcelファイルでもう1つのことは、--max_old_space_sizeは良いオプションですが、それでも最大値に達すると--max_old_space_sizeはクラッシュします。私はちょうどクラッシュする前にそのプロセスを終了し、ユーザーにExcelファイルが生成されるには大きすぎるという答えを送りたいだけです。 – Sam

+0

私が見ることができるのは、それをベンチマークすることだけです。 node.jsプロセスがExcelを処理せずにどれだけ使用しているかを見てください。それから、Excel創造物を呼んで、どれくらいの時間がかかるかを見てください。次に、複数の異なる世代を試してみましょう。あなたが計算したいものと、メモリの結果として得られるものについての考えが得られます。 –

+0

@Samモジュールプロセスには[memoryUsage](https://nodejs.org/api/process.html#process_process_memoryusage)というメソッドがあり、それを使用することができます。生成に優れ、エラーを投げる。しかし、それは非常に予測不可能です。 –

関連する問題