решено см. Редактировать 2
Здравствуйте,
Я пишу программу на Perl для автоматического обновления локальных (проприетарных) программ (для компании, в которой я работаю).
По сути, он работает через cron и, к сожалению, имеет утечку памяти (или что-то подобное). Проблема в том, что утечка происходит только тогда, когда я не смотрю (иначе при запуске через cron, а не через командную строку).
Мой код не содержит циклических (или других) ссылок, поэтому часто цитируемые инструменты мне не помогут (Devel::Cycle
, Devel::Peek
).
Как мне узнать, что использует столько памяти, что ядро убивает ее ?
Обычно SFTP-код на сервере (используя `` `sftp ...` ``), вызывает OpenSSL для проверки файла, а затем еще больше SFTP, если нужно больше файлов, и устанавливает их (снимает их).
Я видел задержки (~ 15 секунд) перед первым сеансом SFTP, но он никогда не использовал столько памяти, сколько мог быть уничтожен (в моем присутствии).
Если я не смогу разобраться, мне придется переписать на другом языке, и это займет драгоценное время.
Редактировать: Следующее сообщение распечатано ядром, что привело меня к мысли, что это утечка памяти:
[100023.123] Out of memory: kill process 9568 (update.pl) score 325406 or a child
[100023.123] Killed Process 9568 (update.pl)
Я не верю, что это проблема cron из-за останова (иногда на ~ 15 секунд) при запуске через командную строку. Кроме того, не используются никакие переменные среды (по крайней мере, из-за того, что я написал, может быть, из-за чего это делается?)
Редактировать 2: Я нашел проблему самостоятельно, с помощью комментария ниже, написанного mobrule (в ответ на этот вопрос). Оказывается, что скрипт вызывался из crontab пользователя (без полномочий root) только один раз в день и что (привилегии без полномочий root) вызывали особую ситуацию с бесконечным циклом.
Извините, ребята, я чувствую себя немного глупо, что не нашел этого раньше, но спасибо.
mobrule, если вы отправите свой комментарий в качестве ответа, я приму его, так как это приведет к обнаружению проблемы.
Окончание редактирования
Спасибо,
Brian
P.S. Я могу публиковать небольшие фрагменты кода, но не все из-за политики компании.