2013-12-13 1 views
0

встречает беспокойную ошибку об использовании памяти, так что я хочу использовать DTrace, чтобы проверить таНос и бесплатно на Solaris 10.Как использовать Dtrace для проверки malloc на Solaris 10?

Я использую следующую команду,

dtrace -l | grep malloc 

Выход:

7000  fbt    unix      prom_malloc entry 
7001  fbt    unix      prom_malloc return 
7141  fbt   genunix      cacl_malloc entry 
7142  fbt   genunix      cacl_malloc return 
12319  fbt   genunix     rmallocmap_wait entry 
12320  fbt   genunix     rmallocmap_wait return 
13078  fbt   genunix      rmalloc_wait entry 
13079  fbt   genunix      rmalloc_wait return 
13526  fbt   genunix      rmallocmap entry 
13527  fbt   genunix      rmallocmap return 
16846  fbt   genunix       rmalloc entry 
16847  fbt   genunix       rmalloc return 
25931  fbt    tmpfs      tmp_memalloc entry 
25932  fbt    tmpfs      tmp_memalloc return 

Кажется, нет malloc.

Я проверил Solaris Internal и нашел malloc-вызовы sbrk. Поэтому я использую следующую команду:

dtrace -l | grep sbrk 

Но ничего не найдено.

Так как я могу использовать Dtrace для проверки malloc на Solaris 10?

+1

Я думаю, этот инструмент будет полезен для вас : http: //theunixshell.blogspot.com/2013/11/finding-memory-leaks-on-solaris-is-no.html – Vijay

+0

@Vijay: Большое спасибо за ваши комментарии, и это очень крутой инструмент! –

+0

@Vijay: Готовы ли вы открыть исходный код вашего инструмента? –

ответ

3

Существуют различные инструменты, которые уже реализуют логику, необходимую для определения утечек памяти под Solaris,

  • libumem & MDB (UMEM_DEBUG=default UMEM_LOGGING=transaction LD_PRELOAD=libumem.so.1 затем mdb's ::findleaks)
  • DBX (check -leaks)

В случае, если вы все еще хотите пойти по пути dtrace, вам нужно проследить процесс, который, как вы подозреваете, утечка памяти с помощью поставщика pid. Вы искали ядро ​​с помощью dtrace -l и ничего не обнаружили, но это ожидается, так как ядро ​​не реализует malloc или brk, это пользовательские функции, расположенные в стандартной библиотеке C.

Этот сценарий будет отслеживать каждые malloc и free вызовов по программе:

dtrace -qn ' 
pid$target:libc:malloc:entry { 
     self->size=arg0; 
} 
pid$target:libc:malloc:return /self->size/ { 
     printf("malloc(%d)=%p\n",self->size,arg1); 
     self->size=0; 
} 
pid$target:libc:free:entry { 
     printf("free(%p)\n",arg0); 
} 
' -c program_to_trace 

Для большего количества примеров в глубине, посмотрите на http://ewaldertl.blogspot.fr/2010/09/debugging-memory-leaks-with-dtrace-and.html и http://www.joyent.com/blog/bruning-questions-debugging

 Смежные вопросы

  • Нет связанных вопросов^_^