nodejsの第三者倉庫は乱用できません.

1925 ワード

最近2つのプロジェクトをやっていますが、いずれもnodejsを使ってウェブサイトのキャプチャーとサービスをしています.
その結果、しばらく走った後、メモリが高止まりしています.ずっと気にしていませんでした.エクセルを導入して、node-xlsxライブラリを使いました.結果、1万本以上のデータを導入すると、メモリは1.5 Gを占めています.
原因を探して一週間探しましたが、まずasycに問題があると疑っています.でも考えてみても間違っています.純粋なjsの場合、メモリが漏れている可能性がありますか?
しょうがないです.メモリを使ってツールを調べます.  node-memwatch、メモリ漏れの疑いが報告されています.
{ start: Fri, 29 Jun 2014 14:12:13 GMT,
  end: Fri, 29 Jun 2014 14:12:33 GMT,
  growth: 67984,
  reason: 'heap growth over 5 consecutive GCs (20s) - 11.67 mb/hr' }
しかし、どこから来たのか分かりません.
探してみたら、このツールのwebkit-devtools-agentが見つかりました.ホームページのアドレス:https://github.com/c4milo/node-webkit-agentそしてそれを使って調べたら、半分のcpuがtrycatchとdomainに使われていました.突然、私はコールバック中のエラーを防ぐために、trycatchライブラリを使ってエラーとして捉えました.gcがリリースできないことを考慮して、変数が占有されているためです.それがやったのではないかと疑っています.
すべてのtrycatchライブラリと参照を削除し、再テストし、一万件以上のデータを導入し、メモリは100 Mぐらい維持し、問題は解決します.
えっと、第三者倉庫は勝手に使えません.穴があったら死人を陥れるところでした.プロジェクトを黄色くするところでした.
PS.一山のリピート、中のエラーでシステムが崩壊したらどうすればいいですか?考えずに、素直にプロモーション(Q)を使いましょう.
論理処理をするならどうすればいいですか?async-qはとても使いやすいです.
 元のasyncはバックグラウンド処理ロジックの中で、使うことを勧めません.エラーが発生したら、calbackを少なくしました.その後、システムがあなたの思った通りに働いていないことに気づきました.その後、何の反応も提示もありません.もし複数のcalbackがあったら?どこかで二回も呼んでいます.
長年の経験、nodejsの神器  express+q+async-qは、基本的に論理管理の需要を満たしています.
いまいましいasync-qのルーチンは少なすぎて、parallLimitに半日やられました.後で時間があれば、async-qのルーチンを全部書きます.