Рубрики
Без рубрики

Регистрация в настоящее время работает с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Я просматривал немного своего старого кода и заметил этот старый скрипт, где я создал журнал всех беговых процессов каждые 5 минут. Я полагаю, что я изначально написал код, чтобы помочь мне диагностировать мошеннические процессы, которые ели память или очаровывают ЦП. Я использовал Psutil Project Чтобы получить необходимую информацию, поэтому, если вы хотите следовать вам, вам нужно будет загрузить и установить его также.

Вот код:

import os
import psutil
import time
    
#----------------------------------------------------------------------
def create_process_logs(log_dir):
    """
    Create a log of all the currently running processes
    """
    if not os.path.exists(log_dir):
        try:
            os.mkdir(log_dir)
        except:
            pass
    
 
    separator = "-" * 80
    col_format = "%7s %7s %12s %12s %30s"
    data_format = "%7.4f %7.2f %12s %12s %30s"
    while 1:
        procs = psutil.get_process_list()
        procs = sorted(procs, key=lambda proc: proc.name)
         
        log_path = os.path.join(log_dir, "procLog%i.log" % int(time.time()))
        f = open(log_path, 'w')
        f.write(separator + "\n")
        f.write(time.ctime() + "\n")
        f.write(col_format % ("%CPU", "%MEM", "VMS", "RSS", "NAME"))
        f.write("\n")
         
        for proc in procs:
            cpu_percent = proc.get_cpu_percent()
            mem_percent = proc.get_memory_percent()
            rss, vms = proc.get_memory_info()
            rss = str(rss)
            vms = str(vms)
            name = proc.name
            f.write(data_format % (cpu_percent, mem_percent, vms, rss, name))
            f.write("\n\n")
        f.close()
        print "Finished log update!"
        time.sleep(300)
        print "writing new log data!"
                
if __name__ == "__main__":
    log_dir = r"c:\users\USERNAME\documents"
    create_process_logs(log_dir)

Давайте немного сломаемся. Здесь мы проходим в каталоге журнала, проверьте, существует ли он и создать его, если это не так. Затем мы настроили несколько переменных, которые содержат форматирование для файла журнала. Затем мы начинаем бесконечную петлю, которая использует Psutil Чтобы получить все текущие эксплуатационные процессы. Мы также сортируем процессы по имени. Далее мы открываем уникально названный файл журнала и выписываем каждый процесс CPU и использование памяти вместе с его виртуальными машинами, RSS и именем исполняемого файла. Затем мы закрываем файл и подожди 5 минут, прежде чем делать все это снова.

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