這篇文章主要介紹“l(fā)inux虛擬內(nèi)存,內(nèi)存泄露和檢測舉例分析”,在日常操作中,相信很多人在linux虛擬內(nèi)存,內(nèi)存泄露和檢測舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux虛擬內(nèi)存,內(nèi)存泄露和檢測舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
站在用戶的角度思考問題,與客戶深入溝通,找到滑縣網(wǎng)站設(shè)計與滑縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋滑縣地區(qū)。
內(nèi)存泄露
所謂的內(nèi)存泄露,指的是不再使用的內(nèi)存,沒能得到釋放,并且之后也沒有機會釋放。
內(nèi)存占用過多,指的是大量申請內(nèi)存,但是沒有及時的釋放內(nèi)存,但是對于c++這類沒有垃圾回收器的語言來說,相當(dāng)于內(nèi)存泄露。
內(nèi)存泄露的檢測分為靜態(tài)檢測和動態(tài)檢測,即編譯時檢測和運行時檢測。
靜態(tài)檢測,如pclint,pgrelief等代碼靜態(tài)檢查工具,可以在編譯時就提前檢測到可能有問題的代碼。
動態(tài)檢測,如下:
內(nèi)存泄露的常用檢測工具(運行時檢測)
C/C++1. Valgrind: Debugging and profiling Linux programs, aiming at programs written in C and C++ 2. ccmalloc: Linux和Solaris下對C和C++程序的簡單的使用內(nèi)存泄漏和malloc調(diào)試庫 3. LeakTracer: Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內(nèi)存泄漏 4. Electric Fence: Linux分發(fā)版中由Bruce Perens編寫的malloc()調(diào)試庫 5. Leaky: Linux下檢測內(nèi)存泄漏的程序 6. Dmalloc: Debug Malloc Library 7. MEMWATCH: 由Johan Lindh編寫,是一個開放源代碼C語言內(nèi)存錯誤檢測工具,主要是通過gcc的precessor來進行 8. KCachegrind: A visualization tool for the profiling data generated by Cachegrind and Calltree Java1. Memory Analyzer: 是一款開源的JAVA內(nèi)存分析軟件,查找內(nèi)存泄漏,能容易找到大塊內(nèi)存并驗證誰在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件 2. JProbe: 分析Java的內(nèi)存泄漏 3. JProfiler: 一個全功能的Java剖析工具,專用于分析J2SE和J2EE應(yīng)用程序。它把CPU、執(zhí)行緒和內(nèi)存的剖析組合在一個強大的應(yīng)用中,GUI可以找到效能瓶頸、抓出內(nèi)存泄漏、并解決執(zhí)行緒的問題 4. JRockit: 用來診斷Java內(nèi)存泄漏并指出根本原因,專門針對Intel平臺并得到優(yōu)化,能在Intel硬件上獲得最高的性能 5. YourKit .NET & Java Profiling: 業(yè)界領(lǐng)先的Java和.NET程序性能分析工具 6. AutomatedQA: AutomatedQA的獲獎產(chǎn)品performance profiling和memory debugging工具集的下一代替換產(chǎn)品,支持Microsoft, Borland, Intel, Compaq 和 GNU編譯器??梢詾?NET和Windows程序生成全面細(xì)致的報告,從而幫助您輕松隔離并排除代碼中含有的性能問題和內(nèi)存/資源泄露問題。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位應(yīng)用程序 7. Compuware DevPartner Java Edition: 包含Java內(nèi)存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應(yīng)用等幾大功能模塊
Valgrind的使用-編譯安裝(建議去官網(wǎng)下載最新版)
wget http://valgrind.org/downloads/valgrind-3.4.1.tar.bz2或者官網(wǎng)https://www.valgrind.org/downloads/current.html下載最新版. tar xvf valgrind-3.4.1.tar.bz2 cd valgrind-3.4.1/./configure --prefix /home/zhenghan.zh/valgrind make make install
Valgrind的使用-運行時檢測
一段沒有錯誤的代碼
#include#include void fun() { int *p = (int*)malloc(10*sizeof(int)); p[9] = 0; free(p); } int main() { fun(); return 0; }
gcc -g -O0 1.c
valgrind --tool=memcheck --leak-check=full ./a.out
結(jié)果如下:
wanglc@wanglc-VirtualBox:~/cpp$ valgrind --tool=memcheck --leak-check=full ./a.out
==29920== Memcheck, a memory error detector
==29920== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==29920== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==29920== Command: ./a.out
==29920==
==29920==
==29920== HEAP SUMMARY:
==29920== in use at exit: 0 bytes in 0 blocks
==29920== total heap usage: 1 allocs, 1 frees, 40 bytes allocated
==29920==
==29920== All heap blocks were freed -- no leaks are possible
==29920==
==29920== For lists of detected and suppressed errors, rerun with: -s
==29920== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
一段內(nèi)存錯誤的代碼.
#include#include void fun() { int *p = (int*)malloc(10*sizeof(int)); p[10] = 0; } int main() { fun(); return 0; }
gcc -g -O0 1.c
valgrind --tool=memcheck --leak-check=full ./a.out
結(jié)果如下(未釋放和數(shù)組越界都被檢測出來了):
wanglc@wanglc-VirtualBox:~/cpp$ valgrind --tool=memcheck --leak-check=full ./a.out
==30261== Memcheck, a memory error detector
==30261== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==30261== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==30261== Command: ./a.out
==30261==
==30261== Invalid write of size 4
==30261== at 0x108668: fun (1.c:7)
==30261== by 0x10867E: main (1.c:12)
==30261== Address 0x522e068 is 0 bytes after a block of size 40 alloc'd
==30261== at 0x4C2FECB: malloc (vg_replace_malloc.c:307)
==30261== by 0x10865B: fun (1.c:6)
==30261== by 0x10867E: main (1.c:12)
==30261==
==30261==
==30261== HEAP SUMMARY:
==30261== in use at exit: 40 bytes in 1 blocks
==30261== total heap usage: 1 allocs, 0 frees, 40 bytes allocated
==30261==
==30261== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==30261== at 0x4C2FECB: malloc (vg_replace_malloc.c:307)
==30261== by 0x10865B: fun (1.c:6)
==30261== by 0x10867E: main (1.c:12)
==30261==
==30261== LEAK SUMMARY:
==30261== definitely lost: 40 bytes in 1 blocks
==30261== indirectly lost: 0 bytes in 0 blocks
==30261== possibly lost: 0 bytes in 0 blocks
==30261== still reachable: 0 bytes in 0 blocks
==30261== suppressed: 0 bytes in 0 blocks
==30261==
==30261== For lists of detected and suppressed errors, rerun with: -s
==30261== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
到此,關(guān)于“l(fā)inux虛擬內(nèi)存,內(nèi)存泄露和檢測舉例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站題目:linux虛擬內(nèi)存,內(nèi)存泄露和檢測舉例分析
網(wǎng)頁URL:http://weahome.cn/article/poosgh.html