Сколько процессов где создано за одну минуту? - PullRequest
0 голосов
/ 13 ноября 2018

Хотелось бы узнать, сколько процессов ядро ​​Linux создало за период времени.

Обычно в течение одной минуты.

Мой фон: если за минуту было создано слишком много процессов, значит что-то не так. Большая часть нашей унаследованной кодовой базы была перемещена из оболочки в python, но иногда все еще существуют некоторые сценарии оболочки, которые работают медленно, потому что в них много процессов.

Я хотел бы создать график из этого числа. Затем я хотел бы проверить, на каком хосте и почему создано так много процессов.

Я хочу реализовать это с помощью Python.

Ответы, как читать это из / proc или / sys, были бы хорошими.

Было бы неплохо, если бы решение работало для обтекания, которое происходит, если достигается pid_max.

Предел (максимальное количество пид) - /proc/sys/kernel/pid_max. В руководстве написано:

/proc/sys/kernel/pid_max (начиная с Linux 2.5.34)

В этом файле указывается значение, при котором PID оборачиваются вокруг (т.е. значение в этом файле на единицу больше максимального PID). По умолчанию значение для этого файла, 32768, приводит к тому же диапазону PID, что и для более ранние ядра

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вместо того, чтобы вручную просматривать / proc или / sys, пусть linux сделает это за вас:

import subprocess
from time import sleep

time = 0
ps = subprocess.Popen(["ps",'-A', '-o', 'pid'], stdout=subprocess.PIPE)
pids = [int(x) for x in ps.communicate()[0].split()[1:]]
new_pids_count = 0;

while time < 60:
    ps = subprocess.Popen(["ps",'-A', '-o', 'pid'], stdout=subprocess.PIPE)
    output = [int(x) for x in ps.communicate()[0].split()[1:]]
    for x in output:
        if x not in pids:
            new_pids_count += 1
            pids.append(x)
    time += 1
    sleep(1)

Изначально я получаю все запущенные PIDS, используя ps -A -i -pid, и помещаю их все всписок.
Я повторяю это каждую секунду, чтобы проверить новый процесс, сравнивая результаты повторного запуска и растущий список pids.

0 голосов
/ 26 ноября 2018

чек /proc/stat, есть processes поле, подсчитывает количество разветвлений с момента загрузки, doc :

$ grep processes /proc/stat
processes 81579558
0 голосов
/ 13 ноября 2018

Я использую это под Windows, но, возможно, вы можете попробовать это в качестве отправной точки

>>> import subprocess
>>> subprocess.Popen('tasklist')
<subprocess.Popen object at 0x00000268164C3CC0>
>>>
Name                           PID     Session name   No. of s  Utilisation
========================= ======== ================ =========== ============

это даст вам стол, который вы можете захватить с помощью

subprocess.Popen('tasklist').communicate()[0], просто посчитайте строки, и вы получите текущее количество процессов. Сделайте это снова через 1 минуту и ​​посмотрите, что изменилось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...