程序员的资源宝库

网站首页 > gitee 正文

Psutil模块的应用(psd模块)

sanyeah 2024-04-01 11:24:00 gitee 5 ℃ 0 评论

关于psutil 模块

      用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如pstopfree等等。要获取这些系统信息,在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维不可或缺的必备模块。

1. 安装 psuil 

               pip install psutil

 2. 如何获取信息资源:

  2.1 统计CPU的用户/系统/空闲时间:

>>> psutil.cpu_times()
scputimes(user=51.38, nice=0.22, system=42.4, idle=17594.59, iowait=66.39, irq=0.43, softirq=23.28, steal=0.0, guest=0.0)

  user:正常进程在用户模式下执行所花费的时间;在Linux上,这还包括客户时间。
  nice:niced(优先级)进程在用户模式下执行所花费的时间;在Linux上,这也包括guest_nice time。
  idle:cpu空闲时间。
  system:运行在内核态的进程所消耗的cpu时间。
  iowait:等待I/O完成的时间。
  irq:用于服务硬件中断的时间

  sotirq:用于服务软件中断的时间
另外: psutil.cpu_times(percpu=True)  结果是以列表的形式返回

  2.2 实现类似与 top 命令的 CPU使用率,每秒刷新一次

>>> for i in range(10):
...     psutil.cpu_percent(interval=1, percpu=True)
...
[1.0]
[0.0]
[0.0]
percent 百分率
percpu=True 已列表的形式 打印
interval=1 间隔时间为1秒

3. 获取内存信息

>>> psutil.virtual_memory() #获取内存完整信息
svmem(total=498319360, available=332267520, percent=33.3, used=154488832, free=170827776, active=107458560, inactive=106196992, buffers=19234816, cached=153767936, shared=557056, slab=81408000)
也可以获取单一的内存:

>>> psutil.virtual_memory().total # 获取单个内存信息

  结果:498319360

  virtual memory 虚拟内存

  # 物理内存大小 = 物理已使用的内存 + 物理没使用的内存
  total = used + free  #内存总数

  # 可用内存大小 = 物理没使用的内存 + 缓冲 + 缓存
  available = free + buffers + cached

  # 内存使用率 = (物理内存大小 - 可用内存大小) / 物理内存大小 * 100

  percent = (total - available) / total * 100

  used: 已使用的内存数
  free : 空闲内存数

  buffers : 缓冲使用数

  cached : 缓存使用数

  使用间的转换 :

  memory = 1024 * 1024

  total = psutil.virtual_memory().total

 total_M = total / memory + 'M'

4. swap交换分区使用

>>> psutil.swap_memory()
sswap(total=2147479552, used=0, free=2147479552, percent=0.0, sin=0, sout=0)

  返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。而交换区大小是1073741824 = 1 GB

5. 磁盘空间:

   在系统的所有磁盘信息中,我们更加关注磁盘的利用率及IO信息,其中磁盘利用率使用psutil.disk_usage(usage 使用)方法获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取

>>> psutil.disk_partitions() # 查看磁盘分区
[sdiskpart(device='/dev/mapper/VolGroup-lv_root', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext4', opts='rw')]
>>> psutil.disk_usage('/') # 磁盘的使用情况
sdiskusage(total=18369396736, used=1746006016, free=15683448832, percent=10.0)
>>> psutil.disk_io_counters() # 磁盘的IO
sdiskio(read_count=16440, write_count=11513, read_bytes=293014528, write_bytes=69329920, read_time=201925, write_time=442674, read_merged_count=2765, write_merged_count=5397, busy_time=186237)

6. 进程获取:

通过psutil可以获取到所有进程的详细信息:

>>> psutil.pids() # 所有进程ID
[3865, 3864, 3863, 3856, 3855, 3853, 3776, ..., 45, 44, 1, 0]
>>> p = psutil.Process(3776) # 获取指定进程ID=3776,其实就是当前Python交互环境
>>> p.name() # 进程名称
'python3.6'
>>> p.exe() # 进程exe路径
'/Users/michael/anaconda3/bin/python3.6'
>>> p.cwd() # 进程工作目录
'/Users/michael'
>>> p.cmdline() # 进程启动的命令行
['python3']
>>> p.ppid() # 父进程ID
3765
>>> p.parent() # 父进程
<psutil.Process(pid=3765, name='bash') at 4503144040>
>>> p.children() # 子进程列表
[]
>>> p.status() # 进程状态
'running'
>>> p.username() # 进程用户名
'michael'
>>> p.create_time() # 进程创建时间
1511052731.120333
>>> p.terminal() # 进程终端
'/dev/ttys002'
>>> p.cpu_times() # 进程使用的CPU时间
pcputimes(user=0.081150144, system=0.053269812, children_user=0.0, children_system=0.0)
>>> p.memory_info() # 进程使用的内存
pmem(rss=8310784, vms=2481725440, pfaults=3207, pageins=18)
>>> p.open_files() # 进程打开的文件
[]
>>> p.connections() # 进程相关网络连接
[]
>>> p.num_threads() # 进程的线程数量
1
>>> p.threads() # 所有线程信息
[pthread(id=1, user_time=0.090318, system_time=0.062736)]
>>> p.environ() # 进程环境变量
{'SHELL': '/bin/bash', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...', 'PWD': '/Users/michael', 'LANG': 'zh_CN.UTF-8', ...}
>>> p.terminate() # 结束进程

 

***********************后续在更新

 

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表