nataraj: (Default)
[personal profile] nataraj
Заметка скорее для себя, чем...

Если быть более точным, то не ловим, а убеждаемся что они есть, и по возможности локализуем.
Значит есть такой модуль Memory::Usage , он по факту лазиет в /proc и запоминает информацию о памяти потребляемой процессом. Его после инициальизации дергаешь время от времени. После чего получаешь от него сводку, че было с памятью.

Я делал это так:
use Memory::Usage;                                                                                                                                                                              
use IO::Socket::SSL;                                                                                                                                                                            
                                                                                                                                                                                                
my $mu = Memory::Usage->new();                                                                                                                                                                  
                                                                                                                                                                                                
foreach my $i(1..5)                                                                                                                                                                             
{                                                                                                                                                                                               
  print $i,"\n";                                                                                                                                                                                
  $mu->record($i);                                                                                                                                                                              
  foreach (1..100)                                                                                                                                                                              
  {                                                                                                                                                                                             
    # то что как мы предполагаем течет памятью                                                                                                                                                  
    my $cl = IO::Socket::SSL->new('ru.wikipedia.org:443');
    close $cl;
  }                                                                                                                                                                                             
}                                                                                                                                                                                               
                                                                                                                                                                                                
$mu->dump();


И получал вот такой вот вывод:

  time    vsz (  diff)    rss (  diff) shared (  diff)   code (  diff)   data (  diff)
     0  14460 ( 14460)  10576 ( 10576)   5012 (  5012)   1840 (  1840)   5660 (  5660) 1
    17  16788 (  2328)  14136 (  3560)   6416 (  1404)   1840 (     0)   7852 (  2192) 2
    34  17844 (  1056)  15244 (  1108)   6416 (     0)   1840 (     0)   8908 (  1056) 3
    50  18900 (  1056)  16356 (  1112)   6416 (     0)   1840 (     0)   9964 (  1056) 4
    67  20088 (  1188)  17464 (  1108)   6416 (     0)   1840 (     0)  11152 (  1188) 5


По которому видно, что расход памяти постоянно растет, несмотря на то что мы только и делаем, что открываем сокет и закрываем его.

Помимо этого модуля есть еще Test::LeakTrace который вроде как умеет следить за тем, какие скаляры появились в памяти пока исполнялся заданный участок кода, но я так и не разобрался как им пользоваться, мне в него попадает всякая внутренняя перловая кухня, из серии подключение новых package'ей и т.п. Может когда-то в будущем...

Date: 2018-02-27 11:03 am (UTC)
beldmit: (Программизм)
From: [personal profile] beldmit
Игорь, помнится, Devel::Arena использовал.

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 20th, 2026 09:38 pm
Powered by Dreamwidth Studios