【Python运维脚本】查看各个进程读写的磁盘IO

#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.6
#Author: [email protected]
# Monitoring per-process disk I/O activity

import sys
import os
import time
import signal
import re

class DiskIO:
   def __init__(self, pname=None, pid=None, reads=0, writes=0):
       self.pname = pname
       self.pid = pid
       self.reads = 0
       self.writes = 0

def main():
   argc = len(sys.argv)
   if argc != 1:
       print "usage: please run this script like [./diskio.py]"
       sys.exit(0)
   if os.getuid() != 0:
       print "Error: This script must be run as root"
       sys.exit(0)
   signal.signal(signal.SIGINT, signal_handler)
   os.system(‘echo 1 > /proc/sys/vm/block_dump‘)
   print "TASK              PID       READ      WRITE"
   while True:
       os.system(‘dmesg -c > /tmp/diskio.log‘)
       l = []
       f = open(‘/tmp/diskio.log‘, ‘r‘)
       line = f.readline()
       while line:
           m = re.match(               ‘^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)‘, line)
           if m != None:
               if not l:
                   l.append(DiskIO(m.group(1), m.group(2)))
                   line = f.readline()
                   continue
               found = False
               for item in l:
                   if item.pid == m.group(2):
                       found = True
                       if m.group(3) == "READ":
                           item.reads = item.reads + 1
                       elif m.group(3) == "WRITE":
                           item.writes = item.writes + 1
               if not found:
                   l.append(DiskIO(m.group(1), m.group(2)))
           line = f.readline()
       time.sleep(1)
       for item in l:
           print "%-10s %10s %10d %10d" %                (item.pname, item.pid, item.reads, item.writes)
def signal_handler(signal, frame):
   os.system(‘echo 0 > /proc/sys/vm/block_dump‘)
   sys.exit(0)
if __name__=="__main__":
   main()

输出结果:

[[email protected] python]# ./diskio.py
TASK              PID       READ      WRITE
dmesg            3018          0          0
dmesg            3170          0          0
dmesg            3172          0          0
jbd2/sda6-8        330          0          3
dmesg            3174          0          0
dmesg            3177          0          0
dmesg            3179          0          0
jbd2/sda3-8       1040          0          4
jbd2/sda3-8       1040          0          0
dmesg            3181          0          0
dmesg            3183          0          0
jbd2/sda6-8        330          0          2
时间: 2024-10-16 12:55:28

【Python运维脚本】查看各个进程读写的磁盘IO的相关文章

Python运维脚本整理

python检测指定端口状态 import socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sk.settimeout(1) for ip in range(0,254): try: sk.connect(("192.168.1."+str(ip),443)) print("192.168.1.%d server open \n"%ip) except Exception: print(&qu

<zz>【Python运维】简单的Python运维脚本

from http://www.cnblogs.com/yixianclove/p/5824747.html 背景 最近在Windows 10上使用Linux子系统,发现它有一个非常坑爹的特点:Linux子系统是没有开机关机状态的,每次进入Bash shell就自动载入,退出后Linux子系统的所有进程都会被关闭,如果你撞了Mysql之类的服务要想随时运行的话就要保持Bash shell的随时开启,更坑的是这些服务并不会随之进入Bash shell而自动启动, 我只好写一个Python脚本用于管

【Python运维脚本】Python监控内存(swap)的使用率

#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] #Python监控内存(swap)的使用率 ''' 1.实现原理:通过SNMP协议获取系统信息,再进行相应的计算和格式化,最后输出结果 2.特别注意:被监控的机器上需要支持snmp.yum install -y net-snmp*安装 ''' #!/usr/bin/python import os def getAllit

【Python运维脚本】Python监控磁盘

#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v3.3 #Author: [email protected] #Python监控磁盘 """ 1.实现原理:通过SNMP协议获取系统信息,再进行相应的计算和格式化,最后输出结果 2.特别注意:被监控的机器上需要支持snmp.yum install -y net-snmp*安装 """ #!/usr/bin/python import

【Python运维脚本】生成随机密码

需求:生成指定长度的随机密码,其中密码中应该包含数字和英文字母 实现: #!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] import random, string#导入random和string模块 def GenPassword(length): #随机出数字的个数 numOfNum = random.randint(1,length-1) numOfLetter =

【Python运维脚本】Python监控网卡流量

#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected]126.com #Python监控网卡流量 """ 1.实现原理:通过SNMP协议获取系统信息,再进行相应的计算和格式化,最后输出结果 2.特别注意:被监控的机器上需要支持snmp.yum install -y net-snmp*安装 """ #!/usr/bin/pytho

【Python运维脚本】Python监控系统负载

#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected]126.com #Python监控系统负载 """ 1.实现原理:通过SNMP协议获取系统信息,再进行相应的计算和格式化,最后输出结果 2.特别注意:被监控的机器上需要支持snmp.yum install -y net-snmp*安装 """ #!/usr/bin/pytho

【Python运维脚本】Python监控CPU情况

#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected]126.com #Python监控CPU情况 """ 1.实现原理:通过SNMP协议获取系统信息,再进行相应的计算和格式化,最后输出结果 2.特别注意:被监控的机器上需要支持snmp.yum install -y net-snmp*安装 """ #!/usr/bin/pyth

Linux运维 第三阶段(8) 磁盘IO性能监控 iostat

Linux下的iostat命令 #iostat -d -k -t 2 -d:显示系统中的设备 -k:表示以每秒kb的形式显示 -t:打印出时间信息 2:表示每2秒统计一次 每次输出都会打印时间信息, 接下来显示磁盘IO情况列表. Device: 显示磁盘名称tps: 表示每秒钟输出到物理磁盘的传输次数.一次传输就是一个对物理磁盘的 I/O 请求.多个逻辑请求可被并为对磁盘的一个单一 I/O 请求.传输具有中等的大小.kB_read/s: 每秒从磁盘读取的数据量,单位为KB.kB_wrtn/s: