Консольные команды для оценки времени работы циклов и потребляемой ими ОЗУ.
Список циклов MajorDoMo, их время запуска и общее время работы (фильтруем php-процессы).
ps -eo lstart,etime,cmd | awk '/php/ && !/awk|sh/'
Как видно, циклы были запущены 18 ноября 2018 года и с тех пор непрерывно работают уже 184 дня и 4 часа.
Аналогично можно оценить работу веб-сервера Apache (120 дней и 16 часов).
ps -eo lstart,etime,cmd | awk '/sql/ && !/awk|sh/'
Или базы данных MySQL (391 день и 22 часа, совпадает с аптаймом сервера).
ps -eo lstart,etime,cmd | awk '/sql/ && !/awk|sh/'
При этом время работы самого сервера определяется традиционной командой uptime
, что в моем случае составляет на текущую дату 391 день.
Как известно, с потреблением оперативной памяти в Linux не все так прозрачно. Помимо ипользования свободной ОЗУ в качестве кеша и буфера имеются другие особенности работы ядра с памятью, которые приводят к тому, что такие общепринятые утилиты как ps
, top
, htop
не могут отобразить фактическое потребление процессами памяти. Подробнее про нюансы можно прочесть здесь.
Принимая во внимание вышеуказанные положения, определимся для себя, что под потреблением ОЗУ процессом для наших прикладных задач будем подразумевать значение RSS.
RSS - резидентная память (Resident Set Size). Суммарный объем всех страничных кадров (page frame) процесса в оперативной памяти.
VSZ - виртуальная память (Virtual Memory Size). Суммарный объем всех страниц (page) процесса (в том числе и выгруженных).
Оценка потребления ОЗУ для циклов MajorDoMo.
Снова фильтруем php-процессы, сортируем вывод по RSS, для сравнения также отображаем VSZ (второй столбец), в конце выводим общую статистику.
ps -eo rss,vsz,cmd --sort -rss | awk '/php/ && !/awk|sh/ && !/sudo -u/' | awk '{ rs=$1/1024; vs=$2/1024; allram+=rs;allps+=1; printf("%7.2f MB ",rs); printf("%7.2f MB ",vs); } { for ( x=3 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } END {print "All PHP Memory Usage (RSS, MB): "allram; print "Process Count: "(allps); print "Average Proccess Size (MB): "allram/(allps)}'
Для веб-сервера Apache.
ps -eo rss,vsz,cmd --sort -rss | awk '/apache/ && !/awk|sh/' | awk '{ rs=$1/1024; vs=$2/1024; allram+=rs;allps+=1; printf("%7.2f MB ",rs); printf("%7.2f MB ",vs); } { for ( x=3 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } END {print "All Apache Memory Usage (RSS, MB): "allram; print "Process Count: "(allps); print "Average Proccess Size (MB): "allram/(allps)}'
Для базы данных MySQL.
ps -eo rss,vsz,cmd --sort -rss | awk '/sql/ && !/awk|sh/ && !/sudo -u/' | awk '{ rs=$1/1024; vs=$2/1024; allram+=rs;allps+=1; printf("%7.2f MB ",rs); printf("%7.2f MB ",vs); } { for ( x=3 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } END {print "All MySQL Memory Usage (RSS, MB): "allram; print "Process Count: "(allps); print "Average Proccess Size (MB): "allram/(allps)}'
И на последок классика жанра - Помогите! Linux съел мою память!
P.S. Скриншоты приведены для системы с PHP версии 5. На PHP версии 7 отображаемое потребление ОЗУ будет больше, что является вполне штатной ситуацией.