У меня есть приложение, которое я пытался получить «без утечек памяти», я прошел тщательное тестирование на Linux, используя TotalView MemoryScape, и утечек не обнаружено. Я перенес приложение в Solaris (SPARC), и я пытаюсь найти утечку ...
Я использовал "LIBUMEM" на Solaris, и мне кажется, что он не обнаруживает утечек ...
Вот моя команда запуска:
LD_PRELOAD=libumem.so UMEM_DEBUG=audit ./link_outbound config.ini
Затем я немедленно проверил PRSTAT в Solaris, чтобы увидеть, как использовалась память при запуске:
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 МБ памяти, как показано ниже:
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 байт» никогда не изменится, если я отправлю 10 сообщений через приложение или 10000 сообщений ... это всегда «7 негабаритных утечек, 851968 байт». Означает ли это, что приложение не подтекает по "libumem"?
Что так расстраивает, так это то, что в Linux память остается постоянной, никогда не меняется ... но в Solaris я вижу этот медленный, но устойчивый рост.
Есть идеи, что это значит? Я правильно использую libumem? Что может быть причиной того, что PRSTAT показывает рост памяти?
Любая помощь по этому вопросу будет принята с благодарностью .... спасибо миллион.