windows進程監控內存及數據可視化

一、windows監控進程

  1. 目的:在windows下監控某一個進程5天的內存使用,查看是否有內存泄露

  2. 實現:考慮過各種工具,最後選擇批處理實現

  3. 代碼:
    代碼實現監控redis進程,每隔1分鐘將tasklist查到的內存使用情況存入redis.txt文件中

    @echo off
    
    rem 這段用來將腳本放入後臺運行
    if "%1"=="hide" goto CmdBegin
    start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
    :CmdBegin
    
    rem 這段用來從tasklist中查找到redis-server.exe這行,然後提取第5列,分隔符是空格,最後將日期和時間及查到的內存數輸出到redis.txt文件中
    :top
    for /f "tokens=5 delims= " %%a in ('tasklist /nh ^|findstr /i redis-server.exe') do echo %date% %time% %%a >> redis.txt
    
    rem 使用ping來實現每隔60s
    ping -n 60 127.0.0.1>nul
    goto top
    
  4. 得到的數據

    2019/05/23 週四 11:27:44.44 381,064 
    2019/05/23 週四 11:28:43.98 401,224 
    2019/05/23 週四 11:29:43.53 413,752 
    2019/05/23 週四 11:30:43.06 378,804 
    ...
    

二、數據圖表展示

  1. 數據展示
    將獲得的數據展示出來,使用python的panda庫清洗和格式化數據,最終用matplotlib來展示數據

    import numpy as np
    from pandas import Series,DataFrame
    import pandas as pd
    import matplotlib.pyplot as plt
    # 設置顯示樣式
    plt.style.use("ggplot")
    # 設置中文編碼
    plt.rcParams["font.sans-serif"] = "KaiTi"
    # 讀取txt文件,header=None表示沒有表頭,header=0表示第一行是表頭,encoding編碼,sep是分隔符 r'\s+'表示空白符
    data=pd.read_table("collector.txt",header=None, encoding='gbk',sep=r'\s+')
    # 刪除索引爲1的列,drop默認刪除行,axis = 1修改爲刪除列
    data=data.drop(1, axis = 1)
    # 將索引爲0和2的兩列連接一起
    data['日期時間']=data[[0,2]].apply(lambda x:' '.join(x), axis=1)
    # 刪除索引爲0(日期)和索引爲2(時間)的兩列
    data=data.drop(0, axis = 1)
    data=data.drop(2, axis = 1)
    # 將日期時間格式化
    data['日期時間']=pd.to_datetime(data['日期時間'], errors='coerce')
    # 對數字進行格式化,刪除中間的,號
    data[3]=data[[3]].apply(lambda x: x.str.replace(',', ''),axis=1)
    # 將數字格式化,遇到不能轉的,有三種選項,raise 報錯(默認) ignore 忽視 coerce 轉成NAN非數字 NAT非時間
    data[3]=pd.to_numeric(data[3], errors='coerce')
    # 將KB轉成MB
    data[3]=data[[3]].apply(lambda x: x/1024, axis=1)
    plt.plot(data['日期時間'], data[3])
    plt.title('redis進程內存使用')
    plt.xlabel('時間')
    plt.ylabel('內存(M)')
    plt.show()
    

    注:數據中有一段數據並沒有提取到內存數,只有K,查找原因中…

  2. 最終結果
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章