У меня есть скрипт, который работает в фоновом режиме, написанный на PHP, который подключается к другим серверам несколько раз (один за другим).
Я специально работал над утечками памяти, чтобы правильно закрыть используемые ресурсы, и я реализовал вывод в реальном времени того, что использует скрипт, с помощью memory_get_usage()
функция из PHP.
Сценарий выполнялся около часа, а память показала что-то около 340 КБ (до 360 КБ максимум).
Но потом это прекратилось. Без каких-либо сообщений об ошибках или чего-либо еще.
Когда я посмотрел на dmesg
вот что я увидел:
Недостаточно памяти: убить процесс 3147 (php5), набрать 905 баллов или принести в жертву ребенка
Убитый процесс 3147 (php5) total-vm: 651064kB, anon-rss: 475032kB,
Файл-Новости: 48kB
(Для информации у меня есть 512Mb сервер Digital Ocean)
Со списком процессов до, включая сообщение с lowmem_reserve
Я начинаю думать, что скрипт содержит некоторую утечку памяти. Не могли бы вы подтвердить это? Но если это так, почему memory_get_usage
не увеличилось? это надежно? Есть ли лучший способ отследить потенциальные утечки памяти?
ОБНОВЛЕНИЕ 1: Вот текущее состояние моего сервера
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2283 root 20 0 67104 6724 900 S 0,0 1,3 0:05.97 fail2ban-server
4100 cyril 20 0 21416 4156 1672 S 0,0 0,8 0:00.16 bash
4094 root 20 0 81856 3976 3136 S 0,0 0,8 0:00.00 sshd
4192 root 20 0 20568 3384 1732 S 0,0 0,7 0:00.09 bash
2370 root 20 0 62032 2264 1196 S 0,0 0,4 0:00.13 console-kit-dae
4099 cyril 20 0 81856 1676 848 S 0,0 0,3 0:00.00 sshd
Задача ещё не решена.
Других решений пока нет …