Как зарегистрировать память и использование CPU приложения?

Подобный вопросу, Как зарегистрировать загрузку ЦП?, я хотел бы зарегистрировать память процесса.

Процесс, который я хочу зарегистрировать, уничтожается на удаленном сервере, и я хочу узнать загрузку ЦП и использование памяти непосредственно перед тем, как это было уничтожено.

[обновление]

И аккуратный небольшой сценарий 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
16
задан 13 April 2017 в 05:24

3 ответа

Можно создать остроту в оболочке:

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().

16
ответ дан 23 November 2019 в 02:34

Этот простой сценарий 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 или когда процесс уничтожается.

2
ответ дан 23 November 2019 в 02:34

Если Вы точно после 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
3
ответ дан 23 November 2019 в 02:34

Другие вопросы по тегам:

Похожие вопросы: