<div>Добрый день.</div><div> </div><div>Вести с полей... )</div><div> </div><div>Почему меня так потянуло именно на Socket не понятно, перепроверив всё ещё по 10 раз, я заметил, что огромный объем памяти выделяется не на получении данных, а на их обработке. Сначала я грешил на Encode с перекодировкой из cp1251 в utf8, но оказалось, что конструкция</div><div>$data = pack 'U0C*', unpack 'C*', $data; устанавливающая "правильный флаг utf8" выделяет в 40!!!!!!!!!! раз больше памяти, чем данная ей строка. Причем utf8::decode - делающее туже самую операцию не выделяет столько памяти. Проблема решена заменой pack unpack на utf8::decode и utf8::encode но сама логика осталась загадкой. Я кстати всегда думал, что через какое-то время когда память уже не используется процесс её отпускает - а оказывается думал я неверно.</div><div> </div><div>Тест показал, что на строку в 30Mb - требуется 1.2Gb памяти.</div><div> </div><div>Можете глянуть на своей системе вот такой примерчик(при условии что у вас есть свободные 1.2Gb - либо измените длину строки):</div><div>========= code ==================</div><div> </div><div>#!/usr/bin/perl<br /> <br />use utf8;<br />use strict;<br />use warnings; <br /><br />use POSIX;<br />use constant PAGESIZE => POSIX::sysconf(POSIX::_SC_PAGESIZE);<br /> <br />my @check = (0..9, "A".."Z", "a".."z");<br /><br />my $data = "";<br />$data .= $check[ rand(length @check) ] while (length $data < 30000000);<br /><br />print "Memory: ".get_memory()."\n";<br />#$data = utf8::decode($data);<br />$data = pack 'U0C*', unpack 'C*', $data;<br />print "Memory: ".get_memory()."\n"; <br /><br /><br />sub get_memory {<br />    open my $fh, "/proc/$$/statm" || return;<br />    my $mem = (split( /\s+/, <$fh> ))[1] * PAGESIZE();<br />    close $fh;<br />    return $mem;<br />}<br /><br />1;</div><div> </div><div> </div><div>======== code end ================</div><div> </div><div> </div><div>09.01.2013, 21:23, "Ivan Petrov" <i.petro.77.00@gmail.com>:</div><blockquote><blockquote> use open ':perlio'; моей системе не известны...<br /> Поставил perl 5.10.1 утечка все ровно сохранилась, :perlio так же не<br /> работает</blockquote><p>Perl 5.10 это 2007-й год<br />в чем смысл сейчас ставить компилятор Perl более чем пятилетней<br />давности? на дворе 2013 год<br />-- <br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/">http://moscow.pm.org</a></p></blockquote><div> </div><div> </div><div>-- <br /> С Уважением, Login|off Nick или STork.</div>