校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > 基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控思路詳解

基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控思路詳解

熱門標(biāo)簽:承德地圖標(biāo)注公司 地圖標(biāo)注黃河的位置 靈圖uu電子寵物店地圖標(biāo)注 山東企業(yè)外呼系統(tǒng)公司 百度地圖標(biāo)注公司位置要多少錢 地圖標(biāo)注如何改成微信號(hào) 虛假地圖標(biāo)注 濮陽(yáng)好的聯(lián)通400電話申請(qǐng) 400電話號(hào)碼辦理多少錢

監(jiān)控Linux服務(wù)器的工具、組件和程序網(wǎng)上有很多,但是一臺(tái)服務(wù)器上會(huì)有很多進(jìn)程同時(shí)運(yùn)行,特別是做性能測(cè)試的時(shí)候,可能一臺(tái)服務(wù)器上部署多個(gè)服務(wù),如果只監(jiān)控整個(gè)服務(wù)器的CPU和內(nèi)存,當(dāng)某個(gè)服務(wù)出現(xiàn)性能問(wèn)題時(shí),并不能有效準(zhǔn)確的定位出(當(dāng)然通過(guò)其他工具也可以實(shí)現(xiàn)),因此,很有必要只監(jiān)控指定的進(jìn)程。需求明確了,于是動(dòng)手?jǐn)]了一個(gè)性能監(jiān)控腳本。

一、整體思路

1、為了方便的啟動(dòng)監(jiān)控和停止監(jiān)控,在想查看監(jiān)控結(jié)果的時(shí)候隨時(shí)查看監(jiān)控結(jié)果,用flask開啟了一個(gè)服務(wù),通過(guò)發(fā)送get請(qǐng)求可以隨時(shí)啟停監(jiān)控和查看監(jiān)控結(jié)果。
2、針對(duì)控制是否監(jiān)控cpu、內(nèi)存、IO,開啟多線程監(jiān)控。
3、為了減少對(duì)其他組件的依賴,將監(jiān)控結(jié)果寫到日志中。
4、為了方便查看監(jiān)控結(jié)果,直接將結(jié)果以html方式返回。

二、配置文件

config.py

IP = '127.0.0.1'
PORT = '5555'
LEVEL = 'INFO' # log level
BACKUP_COUNT = 9 # log backup counter
LOG_PATH = 'logs' # log path
INTERVAL = 1 # interval, run command interval.
SLEEPTIME = 3 # interval, when stopping monitor, polling to start monitor when satisfying condition.
ERROR_TIMES = 5 # times, number of running command. When equal, automatically stopped monitor.
IS_JVM_ALERT = True # Whether to alert when the frequency of Full GC is too high.
IS_MONITOR_SYSTEM = True # Whether to monitor system's CPU and Memory.
IS_MEM_ALERT = True # Whether to alert when memory is too low. Alert by sending email.
MIN_MEM = 2  # Minxium memory, uint: G
# 0: don't clear cache, 1: clear page caches, 2: clear dentries and inodes caches, 3: include 1 and 2;
# echo 1 >/proc/sys/vm/drop_caches
ECHO = 0
SMTP_SERVER = 'smtp.sina.com' # SMTP server
SENDER_NAME = '張三'  # sender name
SENDER_EMAIL = 'zhangsan@qq.com' # sender's email
PASSWORD = 'UjBWYVJFZE9RbFpIV1QwOVBUMDlQUT09' # email password, base64 encode.
RECEIVER_NAME = 'baidu_all' # receiver name
RECEIVER_EMAIL = ['zhangsan@qq.com', 'zhangsi@qq.com'] # receiver's email
DISK = 'device1' # Which disk your application runs
START_TIME = 'startTime.txt' # Store the time of start monitoring.
FGC_TIMES = 'FullGC.txt' # Store the time of every FullGC time.
# html
HTML = '<html><body>{}</body><html>'
ERROR = '<p style="color:red">{}</p>'
HEADER = '<div id="header"><h2 align="center">Performance Monitor (pid={})</h2></div>'
ANALYSIS = '<div id="container" style="width:730px; margin:0 auto">{}</div>'

IP和PORT:開啟服務(wù)的服務(wù)器IP和端口,必須和所監(jiān)控的服務(wù)在同一臺(tái)服務(wù)器上;
BACKUP_COUNT:默認(rèn)為9,即只保留最近9天監(jiān)控結(jié)果;
INTERVAL:兩次監(jiān)控的時(shí)間間隔,默認(rèn)為1s,主要用于cpu和內(nèi)存監(jiān)控,當(dāng)同時(shí)監(jiān)控多個(gè)端口或進(jìn)程時(shí),請(qǐng)將該值設(shè)小一點(diǎn);
ERROR_TIMES:命令執(zhí)行失敗次數(shù),當(dāng)大于該次數(shù)時(shí),則會(huì)自動(dòng)停止監(jiān)控;主要用于監(jiān)控指定的進(jìn)程,如果進(jìn)程被殺掉,則必須自動(dòng)停止監(jiān)控,且必須手動(dòng)觸發(fā)再次開始監(jiān)控;如果監(jiān)控指定的端口,當(dāng)端口的進(jìn)程被殺掉后,也會(huì)停止監(jiān)控,如果端口被重新啟動(dòng),則自動(dòng)開始監(jiān)控;
IS_JVM_ALERT:僅針對(duì)java應(yīng)用,如果頻繁FullGC,則郵件提醒;一般性能測(cè)試,F(xiàn)ullGC的頻率不得小于3600秒;
IS_MONITOR_SYSTEM :是否監(jiān)控系統(tǒng)總CPU使用率和剩余內(nèi)存;
IS_MEM_ALERT:當(dāng)系統(tǒng)剩余內(nèi)存過(guò)低時(shí),是否郵件提醒;
MIN_MEM:允許系統(tǒng)最小剩余內(nèi)存,單位為G;
ECHO:當(dāng)系統(tǒng)剩余內(nèi)存過(guò)低時(shí),是否釋放緩存;0為不釋放,1為釋放頁(yè)面緩存,2為釋放dentries和inodes緩存,3為釋放1和2;
DISK:磁盤號(hào),如果監(jiān)控IO,需要輸入磁盤號(hào),通過(guò)df -h 文件名查看當(dāng)前文件掛在哪個(gè)磁盤下;
START_TIME:記錄每次手動(dòng)觸發(fā)開始監(jiān)控的時(shí)間;
FGC_TIMES:記錄每次FullGC的時(shí)間,用于排查問(wèn)題;

三、接口和服務(wù)

server.py

server = Flask(__name__)
permon = PerMon()
# 開啟多線程
t = [threading.Thread(target=permon.write_cpu_mem, args=()),
 threading.Thread(target=permon.write_io, args=())]
for i in range(len(t)):
 t[i].start()
# 開始監(jiān)控
# http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600
@server.route('/runMonitor', methods=['get'])
def runMonitor():......
# 畫監(jiān)控結(jié)果圖
# http://127.0.0.1:5555/plotMonitor?type=pid&num=23121
@server.route('/plotMonitor', methods=['get'])
def plotMonitor():.......
server.run(port=cfg.PORT, debug=True, host=cfg.IP) # 開啟服務(wù)

通過(guò)在瀏覽器地址欄輸入對(duì)應(yīng)的url,即可啟停監(jiān)控和查看監(jiān)控結(jié)果

url傳參:

1、開始監(jiān)控

http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600
isRun:1為開始監(jiān)控,0為停止監(jiān)控;
type和num:type=pid時(shí),表明num為進(jìn)程號(hào),type=port,表明num為端口號(hào);可以同時(shí)監(jiān)控多個(gè)端口或進(jìn)程,多個(gè)端口或進(jìn)程用英文逗號(hào)隔開;
totalTime:為監(jiān)控總時(shí)間,單位為秒;如果不傳入totalTime,則默認(rèn)一直監(jiān)控;

2、查看監(jiān)控結(jié)果

http://127.0.0.1:
5555/plotMonitor?type=port&num=23121&system=1&startTime=2019-08-03 08:08:08&duration=3600
type和num:type=pid時(shí),表明num為進(jìn)程號(hào),type=port,表明num為端口號(hào);
system:表示查看系統(tǒng)監(jiān)控結(jié)果;如果傳了type和num,不管sysytem是否傳值,都只能看到進(jìn)程的監(jiān)控結(jié)果;不傳type和num,只傳system,則可以查看系統(tǒng)監(jiān)控結(jié)果;
startTime:查看監(jiān)控結(jié)果開始時(shí)間;
duration:查看監(jiān)控結(jié)果的時(shí)長(zhǎng),單位為秒;
如果不傳startTime和duration,則默認(rèn)查看最近一次開始監(jiān)控以來(lái)的所有結(jié)果;如果需要查看某一段時(shí)間內(nèi)的監(jiān)控結(jié)果,則需要傳startTime和duration,查看監(jiān)控結(jié)果的時(shí)間范圍為從startTime開始到startTime+duration為止。
注:如果在查看監(jiān)控結(jié)果輸入的一段時(shí)間內(nèi),服務(wù)被重啟過(guò),則進(jìn)程號(hào)會(huì)有變化,此時(shí)仍輸入重啟前的進(jìn)程號(hào),則只能查看對(duì)應(yīng)進(jìn)程號(hào)在對(duì)應(yīng)時(shí)間段內(nèi)的監(jiān)控結(jié)果。一般情況下,端口號(hào)不會(huì)輕易變化,建議查看監(jiān)控結(jié)果時(shí)輸入端口號(hào)。

四、監(jiān)控

performance_monitor.py

使用top命令監(jiān)控CPU和內(nèi)存,使用jstat命令監(jiān)控JVM內(nèi)存(僅java應(yīng)用),使用iotop命令監(jiān)控進(jìn)程讀寫磁盤,使用iostat命令監(jiān)控磁盤IO,使用netstat命令根據(jù)端口查進(jìn)程,使用ps命令查看服務(wù)啟動(dòng)時(shí)長(zhǎng)。因此,服務(wù)器必須支持以上命令,如不支持,請(qǐng)安裝。

注:由于進(jìn)程可以開啟多個(gè)線程,在查看進(jìn)程的IO時(shí),是看不到任何IO;而查看進(jìn)程開啟的某個(gè)線程IO時(shí),是可以看到IO的,但是線程是一直是在變化的;故目前暫不支持監(jiān)控指定進(jìn)程IO的。

五、查看監(jiān)控結(jié)果

draw_performance.py

1、分別畫CPU圖、內(nèi)存和JVM圖、IO圖和句柄數(shù)圖;
2、為方便統(tǒng)計(jì)CPU和IO使用情況,計(jì)算百分位數(shù);
3、為方便統(tǒng)計(jì)垃圾回收信息,計(jì)算java應(yīng)用的ygc、fgc,以及各自的頻率。

監(jiān)控結(jié)果效果圖如下:

六、擴(kuò)展函數(shù)

extern.py 有兩個(gè)功能

1、端口轉(zhuǎn)進(jìn)程

try:
 result = os.popen(f'netstat -nlp|grep {port} |tr -s " "').readlines()
 res = [line.strip() for line in result if str(port) in line]
 p = res[0].split(' ')
 pp = p[3].split(':')[-1]
 if str(port) == pp:
 pid = p[-1].split('/')[0]
except Exception as err:
 logger.logger.error(err)

2、查找包含監(jiān)控結(jié)果的日志

整體思路:

        (1)根據(jù)輸入的開始時(shí)間和結(jié)束時(shí)間,查找包含這段時(shí)間的所有日志文件;
        (2)根據(jù)查找出來(lái)的日志文件,找出包含監(jiān)控結(jié)果的所有日志;
        (3)畫圖的時(shí)候遍歷找出的所有日志。

補(bǔ)充

1、為了方便查看最近一次開始監(jiān)控的時(shí)間,會(huì)將每一次開始監(jiān)控的時(shí)間寫到startTime.txt文件中;

2、為了方便排查java應(yīng)用可能出現(xiàn)的問(wèn)題,將每一次Full GC的時(shí)間寫到FullGC.txt文件中。

項(xiàng)目地址:https://github.com/leeyoshinari/performance_monitor

總結(jié)

以上所述是小編給大家介紹的基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

標(biāo)簽:安康 福州 淮安 上海 鷹潭 德宏 泰安 樂(lè)山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控思路詳解》,本文關(guān)鍵詞  基于,python,的,Linux,系統(tǒng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控思路詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于基于python的Linux系統(tǒng)指定進(jìn)程性能監(jiān)控思路詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    喷白浆一区二区| 色88888久久久久久影院野外| 日韩一级片在线观看| 天天免费综合色| 欧美精品色综合| 精品亚洲porn| 国产精品美女久久福利网站| 波多野结衣亚洲| 亚洲精品水蜜桃| 在线播放欧美女士性生活| 免费人成黄页网站在线一区二区| 欧美一区二区三区四区高清| 黑人巨大精品欧美一区| 亚洲另类一区二区| 91社区在线播放| 亚洲韩国精品一区| 日韩精品一区二区三区在线观看 | 欧美伦理电影网| 久久超碰97中文字幕| 中文字幕欧美国产| 欧美色国产精品| 麻豆成人在线观看| 国产精品欧美综合在线| 欧美日韩精品一区二区天天拍小说| 毛片不卡一区二区| 国产精品久久久久影院亚瑟| 欧美亚洲愉拍一区二区| 精品一二线国产| 亚洲综合在线第一页| 国产精品久久久一区麻豆最新章节| 在线免费观看成人短视频| 美国毛片一区二区| 亚洲免费av观看| 日韩视频免费观看高清在线视频| 成人性生交大合| 亚洲国产中文字幕在线视频综合| 欧美精品一区二区三区蜜桃| 91成人免费网站| 国产丶欧美丶日本不卡视频| 午夜视频一区在线观看| 中文字幕乱码久久午夜不卡| 91精品中文字幕一区二区三区| 成人三级伦理片| 久久精品久久综合| 性做久久久久久久久| 国产精品久久久久久久久免费桃花| 337p亚洲精品色噜噜狠狠| 91在线视频观看| 91福利社在线观看| 国产福利一区二区三区| 日韩av电影免费观看高清完整版| 亚洲日本在线天堂| 欧美激情艳妇裸体舞| 欧美tickling网站挠脚心| 欧美在线免费播放| 91网站在线观看视频| 国产精品18久久久久久vr| 日精品一区二区| 亚洲国产成人va在线观看天堂| 中文字幕乱码亚洲精品一区| 亚洲精品一区二区三区99| 欧美精品乱人伦久久久久久| 欧美自拍丝袜亚洲| 91蝌蚪porny| 色综合一区二区三区| 99久久国产免费看| 不卡一卡二卡三乱码免费网站| 色香蕉成人二区免费| 亚洲综合丝袜美腿| 欧美日韩精品系列| 日韩一级二级三级| 欧美男同性恋视频网站| 欧美三级在线看| 欧美性猛片xxxx免费看久爱| 91蜜桃免费观看视频| 91老师国产黑色丝袜在线| 日本乱人伦aⅴ精品| 色美美综合视频| 日本大香伊一区二区三区| 色婷婷综合久久久久中文一区二区 | 国产成人午夜精品5599| 国内精品不卡在线| 国产精品影视在线| 大胆亚洲人体视频| 91免费国产在线观看| 欧美中文字幕亚洲一区二区va在线| 色视频欧美一区二区三区| 91首页免费视频| 欧美午夜免费电影| 日韩免费电影一区| 久久久久久**毛片大全| 国产精品丝袜一区| 亚洲视频资源在线| 午夜精品福利一区二区三区av | 亚洲一区二区四区蜜桃| 亚洲小说春色综合另类电影| 亚洲h精品动漫在线观看| 日韩激情一区二区| 国产一区二区在线免费观看| 成人av网在线| 欧美日韩黄色一区二区| 精品成人a区在线观看| 中文字幕第一区| 亚洲一线二线三线视频| 美洲天堂一区二卡三卡四卡视频| 黄色成人免费在线| 99久久精品一区二区| 欧美日韩激情一区二区三区| 精品久久久久久综合日本欧美| 欧美国产精品专区| 亚洲国产精品久久人人爱蜜臀| 蜜桃91丨九色丨蝌蚪91桃色| www.激情成人| 欧美一区二区日韩一区二区| 国产欧美一区二区三区网站| 亚洲制服丝袜一区| 精品制服美女丁香| 色综合久久久久综合体桃花网| 欧美精品一区二区三| 国产精品国产三级国产| 亚洲电影中文字幕在线观看| 国产成人欧美日韩在线电影| 欧美色视频在线观看| 久久久精品免费网站| 亚洲高清免费视频| 丁香六月综合激情| 欧美一级片在线| 亚洲免费观看高清完整版在线观看熊 | 日韩va欧美va亚洲va久久| 国产成人午夜精品影院观看视频 | 91豆麻精品91久久久久久| 日韩久久精品一区| 亚洲另类色综合网站| 国产一区二区影院| 这里只有精品免费| 五月天激情综合| 国产一区激情在线| 欧美人伦禁忌dvd放荡欲情| 国产精品无圣光一区二区| 久久国内精品自在自线400部| 91麻豆自制传媒国产之光| 国产亚洲女人久久久久毛片| 免费xxxx性欧美18vr| 欧美影院午夜播放| 亚洲日韩欧美一区二区在线| 国产91精品免费| 欧美www视频| 日产欧产美韩系列久久99| 欧美视频你懂的| 亚洲欧美激情一区二区| 国产.欧美.日韩| 国产欧美在线观看一区| 国产精品综合视频| 精品久久国产老人久久综合| 日韩av电影一区| 欧美一区二区三区四区视频| 日韩高清中文字幕一区| 在线观看欧美日本| 一区二区三区在线播| 日韩一级在线观看| 日日夜夜精品免费视频| 欧美日韩国产片| 亚洲午夜羞羞片| 在线免费视频一区二区| 亚洲国产日韩a在线播放| 欧美亚洲精品一区| 亚洲国产综合色| 欧美年轻男男videosbes| 天天免费综合色| 日韩一区二区三区视频在线 | 亚洲视频电影在线| 99久久精品一区| 亚洲女人的天堂| 欧美性色黄大片| 污片在线观看一区二区| 欧美一区二区三区日韩| 人人爽香蕉精品| 久久久久久久久99精品| 春色校园综合激情亚洲| 国产精品国产三级国产aⅴ无密码| 成人国产精品视频| 亚洲日本一区二区三区| 欧美网站大全在线观看| 国产成人无遮挡在线视频| 国产日韩欧美综合在线| 老司机午夜精品| 国产91丝袜在线播放0| 亚洲丝袜另类动漫二区| 欧美一区二区三区精品| 久久久久国产精品麻豆| 成人av免费观看| 亚洲一区二区三区四区不卡| 欧美日韩不卡一区二区| 久久精品国产在热久久| 国产午夜精品一区二区三区嫩草| 99视频精品全部免费在线| 亚洲一区日韩精品中文字幕| 91精品在线免费观看| 国产一区美女在线| 亚洲人成精品久久久久|