python3,windows下的程序監控指令碼
阿新 • • 發佈:2018-12-15
1 安裝psutil,pip install psutil、
2 檢視程序id,可通過工作管理員檢視
3 cmd下進入指令碼所在路徑
4 執行指令碼(python monitor.py 30658)
5 指令碼所在路徑下,生成監控日誌檔案
指令碼如下:
#coding=utf-8 import sys import psutil import datetime import time def monitor(pid): ''' print psutil.pids() #列出所有的程序id p=psutil.Process(10072) #例項化一個程序 print psutil.pid_exists(10072) #print str(p.pid()) #輸出程序id print p.name() # 輸出程序名 print p.status() #輸出程序狀態 print p.memory_info() #輸出程序記憶體詳細資訊 print p.memory_info().rss #輸出程序記憶體實際使用資訊 print p.memory_info().vms #輸出程序虛擬記憶體使用資訊 print p.connections() #輸出程序socket的namedutples列表,包括fs,family,laddr等資訊 print p.cpu_percent() #輸出程序的CPU佔用率 print p.open_files() #輸出程序的開啟檔案數 print p.num_handles() #輸出程序的控制代碼數 print p.num_threads() #輸出程序的執行緒數 print p.io_counters() #輸出程序的io讀寫資訊 ''' #設定監控時間 預設3天 CYCLE_TIME = datetime.timedelta(weeks=0,days=3,hours=00,minutes=0,seconds=5,microseconds=0,milliseconds=0) #60*60*24 start_time = datetime.datetime.today() #判斷程序是否存在 if(psutil.pid_exists(pid)): p = psutil.Process(pid) #例項化一個程序 pName = p.name()#程序名 #設定日誌名 logName = pName+"_"+str(pid)+"_stress_monitoring_record.log" #log檔案 logfile = open(logName,"a") else: print ("pid is not exists please enter true pid!!!") return wTime = 30#等待時間 while(True): #判定監控時間 if ((datetime.datetime.today()-start_time)>CYCLE_TIME): break recTime = time.strftime('%Y-%m-%d\t%H:%M:%S',time.localtime(time.time()))#datetime.datetime.today() #記錄時間 #判斷程序是否存在 if(psutil.pid_exists(pid)): vmm = p.memory_info().vms #虛存 單位位元組 mm = p.memory_info().rss #實際使用記憶體 單位位元組 pCpu = p.cpu_percent(interval=1) #CPU百分比 nFiles = len(p.open_files()) #開啟檔案數 這個不太準感覺,暫不記錄 nThreads = p.num_threads() #執行緒數 nHandles = p.num_handles() #控制代碼數 #記錄程序詳細資訊 monitor_content = str(recTime) + "\t" + str(vmm) + "\t" + str(mm) + "\t" + str(pCpu) + "\t" + str(nThreads) + "\t" + str(nHandles)+"\n" else: monitor_content = str(datetime.datetime.today())+"\t"+str(pid)+" is not running!!!!!!!!!\n" break print (monitor_content) logfile.flush() logfile.write(monitor_content)#寫入log檔案 time.sleep(wTime)#迴圈等待 logfile.close() if __name__ == "__main__": #主函式 if len(sys.argv) < 2: print("usage: python monitor.py 程序id"); sys.exit() pid_str = sys.argv[1] pid = int(pid_str) monitor(pid) pass