使用TCmalloc的堆棧檢查

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   os   使用   ar   

使用TCMalloc的堆棧檢查

  • Author:Echo Chen(陳斌)

  • Email:[email protected]

  • Blog:Blog.csdn.net/chen19870707

  • Date:October 15th, 2014

     

    在前一篇譯文《TCMalloc:線程緩衝的Malloc》詳細講解了TCMalloc的工作原理和特點,今天翻譯《heap-checking using tcmalloc》,瞭解Tcmalloc堆棧檢查。

     

    一、自動的記憶體流失檢查

     

    這篇技術文檔描述了如何使用C++程式來檢查堆棧。這種能力對於自動的記憶體流失檢測非常有用。

     

    1.連結堆棧檢查器

     

    你可以對任何連結了tcmalloc的程式進行堆棧檢查,並且不需要重新編譯。

     

    為了抓住所有的記憶體流失,tcmalloc必須被連結到你的可執行程式中。堆棧檢查器可能誤解列在它後面的連結庫的一些記憶體。例如,它可能把這些庫的記憶體誤判為記憶體流失,而實際上並沒有。

     

    把tcmalloc連結到你的程式,即時你不想使用堆棧檢查器來檢查也是安全的。你的程式並不會啟動並執行有任何一點緩慢,因為你沒有用到任何一點堆棧檢查的特性。

     

    你可以通過LD_PRELOAD在那些不是你編譯的程式中運行堆棧檢查。

     

       1: $ LD_PRELOAD="/usr/lib/libtcmalloc.so" HEAPCHECK=normal 

     

    我們不建議這種使用。

     

    2.開啟堆棧檢查

     

    對可執行程式啟動記憶體檢查有兩種方法:

    • 對於整個程式的堆棧檢查,定義環境變數 HEAPCHECK為你需要的堆棧檢查的類型:普通的、嚴格的或者苛刻的。例如: 對/bin/ls的記憶體檢查:
       1: $ HEAPCHECK=normal /bin/ls
       2: % setenv HEAPCHECK normal; /bin/ls   # csh

     

    • 對程式的部分代碼進行堆棧檢查,你需要修改你的代碼。用HeapLeakChecker對象把要檢查的代碼部分包起來,在你需要檢查程式的末尾調用check.NoLeaks()。這將只對包含的代碼區內的代碼做記憶體檢查。設定本地環境變數HEAPCHECK 來開啟堆棧檢查。

    下面是第二種用法的一個例子。如果Foo泄漏任何記憶體,下面代碼就會終止。

       2: Foo();
       3: assert(checker.NoLeaks());

     

    當檢查器對象一分配,它就會建立一個堆棧資料檔案。當checker.NoLeaks()結束,它會建立另一個堆棧資料檔案,然後進行比較產生一個新的資料檔案。如果這個新的資料檔案顯示有記憶體增長,NoLeaks()將返回假並且把程式終止。關於如何使用pprof命令來擷取一個詳細的記憶體流失分析的提示資訊會被列印出來。

    注意:pthread處理但錢並不完整。如果在構造或者記憶體檢查的使其有phtread線程活躍,堆棧檢查將錯誤的把它當作記憶體流失,對於全域堆棧檢查的一個辦法是 確保除了主線程外的所有現場都推出了在程式結束的時候。

    3.關閉已知的記憶體流失

    有時候你的程式有一些你已經知道並且接受的記憶體流失,你希望當你檢查程式時,堆棧檢查器忽略它們,你可以通過合適的堆棧檢查對象來實現這個需求

     

       1: #include 
       2: ...
       3: void *mark = HeapLeakChecker::GetDisableChecksStart();
       4: <leaky code>
       5: HeapLeakChecker::DisableChecksToHereFrom(mark);

     

    -

    Echo Chen:Blog.csdn.net/chen19870707

    -

  • 使用TCmalloc的堆棧檢查

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.