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