node.jsメモリ漏れ分析二

2418 ワード

概要
開発中、メモリの一部が漏れている状況に遭遇しました.本論文では主にいくつかのメモリ漏れの問題を説明し、内部漏れ分析に関する方法を簡単に分析します.
メモリ漏れ分析
1.heappdumpモジュールを使用する
モジュール紹介:https://github.com/bnoordhuis/node-heapdump
このモジュールは主に現在のメモリをキャプチャするスナップショット情報であり、すべての文字、オブジェクト、関数が占有するメモリの状況を含む.
2.分析原理
heappdumpによってキャプチャされたのは現在のメモリの状況です.もしメモリが漏れている場合、中間要求の時点でメモリスナップショットをキャプチャし、最後の要求の中でスナップショットをキャプチャすると、両者の違いを分析すれば、メモリ漏れの問題が見られます.
キャプチャ方法は、参照できます.
var times = 1;
var heapdump = require('heapdump');

/* server start */
global.app = HTTP.createServer(function(req, res) {
    var d = D.create();
    /* error catch */
    d.on('error', function(err) {
        console.error('error, server error', err.message, err.stack);
        serverError(res, req, err);
        d.dispose();
    });

    d.run(function() {
        ROUTER.router(res, req);
    });
    if(times == 1000 || times == 500){
        heapdump.writeSnapshot('/data/danhuang/' + Date.now() + '.heapsnapshot');
        }
    times++;
})
3.chromeツール分析
メモリスクリーンにキャプチャした後、chromeのprofile機能を使って、ロードの2つの対応するheaddumpファイルを使います.ロードが成功したらprofileのcomplarsion機能を使います.過程は以下の通りです.
4.比較分析の最適化
次に二つの切り取りメモリのスナップショットの関数とオブジェクトのコントラストを通して、どの関数が漏洩しているかを明確に確認して修復します.
メモリ漏れの結論
した圧力測定時に漏れがあり、主に二つの部分に含まれています.
  • log 4 jsのfile.jsは、配列無限保存オブジェクト
  • を使用する.
  • settimeout実行によりメモリが暴騰し、settimeout
  • を使用しないようにする.
  • protobufはnode_を使用していません.modulesモジュール方法は、各build
  • をもたらす.
    私のブログはもうすぐ騰訊雲+コミュニティに同期します.https://cloud.tencent.com/developer/support-plan?invite_code=2 mwuyk 7 ird 0 ks