Как я могу узнать текущее использование памяти для всех запущенных процессов по отдельности? Желательно в байтах, чтобы их можно было точно суммировать. Могу ли я объединить сводки для дочерних процессов в процесс, который их породил? (например, все потоки apache вместе).
Иногда моему серверу не хватает памяти и он перестает отвечать. Я хочу узнать, что занимает всю память. К сожалению, скорее всего, это не будет единый процесс. Некоторые программы порождают сотни процессов, каждый из которых использует очень мало памяти, но в сумме.
Это поможет вам сделать часть пути:
ps axfo %mem,size,rss,vsz,pid,args
Кстати, Apache, скорее всего, предварительно форкован, а не многопоточен.
Я представляю смем, который вводит понятие Пропорциональный размер набора:
Поскольку большие части физической памяти обычно разделяются между несколькими приложениями, стандартный показатель использования памяти, известный как размер резидентного набора (RSS), значительно переоценивает использование памяти. Вместо этого PSS измеряет «справедливую долю» каждого приложения в каждой общей области, чтобы дать реалистичную оценку.
В качестве альтернативы вы можете просто поискать журналы oomkiller, они расскажут, какая программа была убита из-за того, что сломала спину верблюда в распределении памяти.
ps aux
Есть столбец RSS, который показывает использование памяти без подкачки в килобайтах. Мне пришлось проанализировать вывод этой команды и самому сложить его, чтобы узнать общее количество для каждого имени команды.
Вы не говорите, какой Unix вы используете. Если это Solaris, вы можете использовать команду prstat, у которой есть несколько полезных опций, например:
prstat -s rss -a # sorted by RAM usage, per user metrics