前言
由于C/C++程序可以動態(tài)申請內(nèi)存,動態(tài)申請的內(nèi)存位于程序的隊區(qū),如果程序比較復(fù)雜,程序員在編寫代碼的時候不小心,可能會存在申請了內(nèi)存沒有釋放的情況,程序長期運行,會導(dǎo)致系統(tǒng)中用戶程序可分配堆內(nèi)存越來越少的,最終程序OOM崩潰。
Linux系統(tǒng)內(nèi)存泄露檢查
系統(tǒng)內(nèi)存監(jiān)控
/proc/meminfo 文件保存了系統(tǒng)內(nèi)存使用情況,
MemTotal: 498364224 kB
MemFree: 341371712 kB
MemAvailable: 431430528 kB
Buffers: 3456 kB
Cached: 89801856 kB
SwapCached: 0 kB
Active: 36263872 kB
Inactive: 78312192 kB
Active(anon): 24965120 kB
Inactive(anon): 212352 kB
Active(file): 11298752 kB
Inactive(file): 78099840 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194240 kB
SwapFree: 4194240 kB
Dirty: 512 kB
Writeback: 0 kB
AnonPages: 24776320 kB
Mapped: 157504 kB
Shmem: 406720 kB
Slab: 11619072 kB
SReclaimable: 3734336 kB
SUnreclaim: 7884736 kB
KernelStack: 34128 kB
PageTables: 69632 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 240269120 kB
Committed_AS: 59814336 kB
VmallocTotal: 549755813888 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 25165824 kB
CmaFree: 25165824 kB
HugePages_Total: 12800
HugePages_Free: 12800
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
其中 MemAvailable 可以用來評估系統(tǒng)當前應(yīng)用程序可用的內(nèi)存,定時監(jiān)控該數(shù)據(jù)并顯示出來便可得到系統(tǒng)內(nèi)存使用曲線。
進程內(nèi)存監(jiān)控
系統(tǒng)可用內(nèi)存一直減少時,說明系統(tǒng)中正在運行的程序有內(nèi)存泄露,但還需要進一步確定是哪個程序在泄露。
/proc/{pid}/cmdline 里面記錄了某一個進程(進程號為pid)的啟動名稱,這個名稱就是進程的名字,因此遍歷/proc文件夾下的所有進程文件夾就能找到與進程名字對應(yīng)的進程PID。
/proc/{pid}/status 文件記錄了進程的詳細信息,其中 VmSize代表進程現(xiàn)在正在占用的內(nèi)存,VmRSS是程序現(xiàn)在使用的物理內(nèi)存,VmData:表示進程數(shù)據(jù)段的大小,Threads:表示當前進程中的線程個數(shù),/proc/{pid}/smaps也存有進程更加詳細的內(nèi)存信息,Rss:是實際分配的內(nèi)存,這部分物理內(nèi)存已經(jīng)分配,不需要缺頁中斷就可以使用的,Pss(proportional set size):是平攤計算后的實際物理使用內(nèi)存(有些內(nèi)存會和其他進程共享,例如mmap進來的)。以上數(shù)據(jù)對于進程內(nèi)存監(jiān)控和排查都具有重要意義文章來源:http://www.zghlxwxcb.cn/news/detail-436066.html
進程內(nèi)存泄露點定位
已有的內(nèi)存泄露檢查工具
常用的內(nèi)存泄露檢查工具
Linux官方網(wǎng)站推薦的內(nèi)存泄露檢查工具文章來源地址http://www.zghlxwxcb.cn/news/detail-436066.html
制作一個內(nèi)存泄露檢查工具
到了這里,關(guān)于Linux C/C++ 程序內(nèi)存泄露排查的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!