我有一個應用程序,我一直試圖讓「內存泄漏免費」,我已經通過在Linux上使用Totalview的MemoryScape的堅實的測試,沒有發現泄漏。我已經將應用程序移植到Solaris(SPARC),並且有一個漏洞,我試圖找到...LIBUMEM說沒有內存泄漏,但Solaris上的PRSTAT顯示泄漏?
我已經在Solaris上使用了「LIBUMEM」,並且在我看來,它似乎也喜歡採用不漏...
這裏是我的啓動命令:
LD_PRELOAD=libumem.so UMEM_DEBUG=audit ./link_outbound config.ini
然後我立刻檢查在Solaris上了prstat,看看啓動內存使用情況是:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
9471 root 44M 25M sleep 59 0 0:00:00 1.1% link_outbou/3
然後,我開始送你消息的應用和......隨着時間的推移長大的prstat砂..
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
9471 root 48M 29M sleep 59 0 0:00:36 3.5% link_outbou/3
而就在我最終停止了它:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
9471 root 48M 48M sleep 59 0 0:01:05 5.3% link_outbou/3
現在最有趣的部分是當我使用libumem進行這個應用程序,它顯示48 MB的記憶,就像如下:
pgrep link
9471
# gcore 9471
gcore: core.9471 dumped
# mdb core.9471
Loading modules: [ libumem.so.1 libc.so.1 ld.so.1 ]
> ::findleaks
BYTES LEAKED VMEM_SEG CALLER
131072 7 ffffffff79f00000 MMAP
57344 1 ffffffff7d672000 MMAP
24576 1 ffffffff7acf0000 MMAP
458752 1 ffffffff7ac80000 MMAP
24576 1 ffffffff7a320000 MMAP
131072 1 ffffffff7a300000 MMAP
24576 1 ffffffff79f20000 MMAP
------------------------------------------------------------------------
Total 7 oversized leaks, 851968 bytes
CACHE LEAKED BUFCTL CALLER
----------------------------------------------------------------------
Total 0 buffers, 0 bytes
>
的「7個超大漏水,851968個字節」如果我通過應用程序或10000個發送郵件10封郵件永遠不會改變......它始終是「7 oversi zed泄漏,851968字節「。這是否意味着應用程序不會根據「libumem」泄漏?
令人沮喪的是,在Linux上內存保持不變,從不改變......但在Solaris上,我看到這種緩慢但穩定的增長。
任何想法這是什麼意思?我正確使用libumem嗎?什麼可能導致PRSTAT在這裏顯示記憶力增長?
對此的任何幫助將不勝感激....感謝百萬。
我想這將是有益的:HTTP://theunixshell.blogspot.com/2013/11/finding-memory-leaks-on-solaris-is-no.html – Vijay