Скрипт Perl странное поведение / Восстановление памяти
Мой скрипт делает следующее
- Считывает огромный текстовый файл и создает из него хеш (около 24 миллионов простых пар значений ключей. Занимает около 5 минут и потребляет 92% компьютерной памяти 4 ГБ)
- Запускает симуляцию, используя информацию из хэша (занимает около 30 минут)
- Печатает результаты в конце симуляции (в файл и стандартный вывод)
Затем он ждет более 10 минут после последнего оператора печати и завершается. Ожидание в конце не происходит каждый раз. Во время ожидания top
Команда показывает то же 92% -ое использование памяти, но без использования процессора. Почему это иногда ждет после того, как это сделано? Если я нажму CtrlC, он сразу выйдет без каких-либо изменений в результате (результатах). Как мне отладить это или это ожидаемое поведение, так как хэш огромен?
РЕДАКТИРОВАТЬ
Можно ли восстановить память на лету, удалив ненужные пары ключ-значение из хеша?
1 ответ
Я предполагаю, что вы знаете функцию 'delete' (поэтому удалили ссылку на perldoc -f delete:)
Для отладки памяти вы можете использовать valgrind. Также этот совет может быть полезен: есть ли в Perl v5.10.1 утечки памяти или как интерпретировать valgrind. Рекомендуется использовать:
use Perl:: Destruct:: Level level => 1;