psutil查询指定程序pid的cpu、内存使用

参考:https://zhuanlan.zhihu.com/p/56478855
https://www.cnblogs.com/luchenhui/p/10974745.html

psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统.

查具体某个程序的pid

通过pids和正则匹配,可以通过name或command信息去赛选在这里插入图片描述

import psutil

pids = psutil.pids()
print(len(pids))
for pid in pids:
  p = psutil.Process(pid)
  if "python ***.py" in p.cmdline():
       操作,得到具体的pid
  if 'python' in p.name():
      print("pid-%d,pname-%s" % (pid, p.name()),p.cmdline())

cpu、内存使用

监控cpu信息

import psutil psutil.cpu_times() #获取cpu(逻辑cpu的平均)占用时间的详细信息
psutil.cpu_times(percpu=True) #获取每个cpu占用时间的详细信息
psutil.cpt_times().user #获取用户进程占用cpu的时间(user+sys+idle+wait=total)

监控内存信息

import psutil psutil.virtual_memory() #获取内存信息
psutil.virtual_memory().total #获取内存总量 psutil.swap_memory()
#获取swap信息 psutil.swqp_memory() #获取swap总量

每分钟打印

import psutil
##cpu
psutil.cpu_times()
##内存
mem = psutil.virtual_memory()
import psutil
import time

pids = psutil.pids()
print(len(pids))


try:

    for pid in pids:
        p = psutil.Process(pid)
        command = p.cmdline()

        print(pid,command)
        if "/usr/bin/python3" in command and "upload_aid" in command:
            interval = 10 # polling seconds
            with open("process_monitor_" + p.name() + '_' + str(pid) + ".csv", "a+") as f:
                f.write("time,cpu%,mem%\n")
                while True:

                    current_time = time.strftime('%Y%m%d-%H%M%S',time.localtime(time.time()))
                    cpu_percent = p.cpu_percent()
                    mem_percent = p.memory_percent()
                    line = current_time + ',' + str(cpu_percent) + ',' + str(mem_percent)
                    print (line)
                    f.write(line + "\n")
                    time.sleep(interval)
                    
                    
except Exception as e:
    print(e)
    pass

猜你喜欢

转载自blog.csdn.net/weixin_42357472/article/details/121285740