| Memory leaks |
[Dec. 18th, 2009|09:04 pm] |
Здравствуйте!
Вот такая проблема. Есть некий сетевой сервис, который должен работать долго, анализируя данные. Использую Sniffer::HTTP, который кормлю eth-пакетами, и он разбирает TCP-поток и request-ы и response-ы. Но проблема в том, что где-то в модуле, похоже, есть утечка памяти - когда сессия удаляется, то ли ее буферы не очищаются, то ли еще референсы на данные сесси хранятся где-то внутри модуля.
С наскоку определить где это там не получилось, а времени разобраться в чужом коде нет. Попытался использовать Devel::Size и Deve::Size::Fast, чтобы понять, какие стуктуры растут, но он или валит в кору приложение, или оно перестает работать в pcap-части, то есть не снифает ничего :)
По совету автора модуля попытался использовать Devel::Cycle, и не могу понять его вывод - на что нужно обращать внимание? Он показывает кросс-референсы, получается, любое наличие кросс-референсов на сущности, которые не лежат внутри уничтожаемого объекта это проблема, и нужно разрывать их перед удалением объекта? Их там просто n показывает, n>5 :)
Или посоветуйте, пожалуйста, другие библиотеки для TCP session reconstruction. С Net::libNIDS что-то тоже не так, или у меня руки кривые, но не осилил. Самому писать не предлагать, я так понимаю, это достаточно нетривиальная задача, как показывает опыт snort и wireshark. Можно, конечно, взять сторонние инструменты и анализировать уже готовые файлы, но это будет не так красиво, как хотелось бы. |
|
|
| Поможите с алгоритмом |
[Dec. 18th, 2009|11:28 am] |
Нид хелп, такая задача: Есть строка, к примеру "1 2 3" (кол-во элементов 2..N, предположительно не больше 4-5) через permute получаем все варианты порядка, нужно еще все варианты склейки, например, для примера: 12 3 1 23 123
сделать чтоб работало - не проблема, а чтоб быстро все варианты делало - идей нету |
|
|
| HTML::Template |
[Dec. 15th, 2009|03:58 pm] |
|
Есть ли возможность вставлять в template-файл глобальные переменные ( например из $ENV ) ? |
|
|
| iterator class по мотивам hop |
[Dec. 14th, 2009|08:28 pm] |
package Iterator;
# this allows "value: $i" syntax // kind of blackjack
use overload
q("") => sub { $_[0]->{value} },
q(0+) => sub { $_[0]->{value} },
fallback => 1;
sub new {
my ($class, $iter) = @_;
local *IT;
my $self = {
iter => $iter,
value => undef,
empty => 0,
};
# this allows <$i> syntax
tie *IT, $class, $self;
my $bless = bless($self, $class);
# this allows $$i->kick() syntax // blackjack!
*IT = \$bless;
# this allows $i->() syntax // more blackjack!
*IT = sub { $self->kick };
return *IT;
}
sub TIEHANDLE {
my ($class, $iter) = @_;
bless($iter, $class);
}
sub value { shift->{value} }
sub empty { shift->{empty} }
sub READLINE { shift->kick }
sub kick {
my ($self) = @_;
# even more blackjack and hookers!
local $_ = $self;
$self->{value} = $self->{iter}->();
}
1;
( moar... ) |
|
|
| navigation |
| [ |
viewing |
| |
most recent entries |
] |
| |
|
|