Подобный вопросу, Как зарегистрировать загрузку ЦП?, я хотел бы зарегистрировать память процесса.
Процесс, который я хочу зарегистрировать, уничтожается на удаленном сервере, и я хочу узнать загрузку ЦП и использование памяти непосредственно перед тем, как это было уничтожено.
[обновление]
И аккуратный небольшой сценарий Python Stefano Palazzo и
Выходные значения строки Michał, которые меньше, чем в top
для ЦП и Мадам. У Вас есть идея почему?
выходная вершина:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2312 schXX 20 0 1241m 328m 58m S 100 0.3 11:56.68 MATLAB
произведите сценарий Python Stefano Palazzo:
python memlogger.py 2312
%CPU %MEM
76.00 0.20
76.00 0.20
Можно создать остроту в оболочке:
logpid() { while sleep 1; do ps -p $1 -o pcpu= -o pmem= ; done; }
зарегистрировать процесс с pid=123 просто:
logpid 123
или видеть и записать журнал в файл:
logpid $$ | tee /tmp/pid.log
Если Вы хотите, чтобы другие данные были зарегистрированы, изменить -o {this}
опции. Посмотрите man ps
раздел "STANDARD FORMAT SPECIFIERS" для доступных параметров для использования. Если Вы хотите другое разрешение времени, изменение sleep {this}
в функции logpid()
.
Этот простой сценарий Python должен сделать то, что Вы хотите:
import time
import string
import sys
import commands
def get_cpumem(pid):
d = [i for i in commands.getoutput("ps aux").split("\n")
if i.split()[1] == str(pid)]
return (float(d[0].split()[2]), float(d[0].split()[3])) if d else None
if __name__ == '__main__':
if not len(sys.argv) == 2 or not all(i in string.digits for i in sys.argv[1]):
print("usage: %s PID" % sys.argv[0])
exit(2)
print("%CPU\t%MEM")
try:
while True:
x,y = get_cpumem(sys.argv[1])
if not x:
print("no such process")
exit(1)
print("%.2f\t%.2f" % (x,y))
time.sleep(0.5)
except KeyboardInterrupt:
print
exit(0)
Сначала необходимо узнать идентификатор процесса программы, которую Вы хотите контролировать, затем можно запустить скрипт с PID как аргумент:
python log.py 3912
Это распечатает использование CPU и использование оперативной памяти в проценте два раза в секунду:
%CPU %MEM
0.90 0.40
1.43 0.40
8.21 0.40
...
Можно затем перенаправить его вывод в файл для импорта его в электронную таблицу позже (python log.py 9391 > firefox_log.txt
) и импортируйте данные в выбор электронной таблицы Tab
как Ваш разделитель.
Программа выходит при ударе Ctrl+C или когда процесс уничтожается.
Если Вы точно после top
статистика Вы могли работать top
в пакетном режиме, указывающем pid процесса, который Вы после. Взятие примера от этой страницы (http://www.dedoimedo.com/computers/linux-cool-hacks.html), если Вы ввели
top -b -d 10 -n 3 >> top-file
У Вас "было бы главное выполнение в пакетном режиме (-b). Это собирается обновиться каждые 10 секунд, как указано задержкой (-d) флаг, для общего количества 3 повторений (-n). Вывод будет отправлен в файл". Включая -p
можно указать pid
из процесса, который Вы после. Это, конечно, возвратит больше, чем просто CPU и врежется, но он будет содержать thos поля. В моем случае, например, я получил бы следующее при контроле использования pid 9189 top -b -d 10 -n 3 -p 9189 >> ~/top-file
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9189 pmj27 20 0 1617016 808112 27916 S 0.0 0.3 1:36.63 gedit