最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 監(jiān)控某個(gè)進(jìn)程內(nèi)存的情況問(wèn)題

 更新時(shí)間:2022年05月16日 11:34:52   作者:一直在測(cè)試路上前進(jìn)  
這篇文章主要介紹了python 監(jiān)控某個(gè)進(jìn)程內(nèi)存的情況問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python監(jiān)控某個(gè)進(jìn)程內(nèi)存

測(cè)試場(chǎng)景:

  • 某個(gè)客戶端程序長(zhǎng)時(shí)間運(yùn)行后存在內(nèi)存泄漏問(wèn)題,現(xiàn)在開(kāi)發(fā)解決了需要去驗(yàn)證這個(gè)問(wèn)題是否還存在,并要求出具相應(yīng)測(cè)試驗(yàn)證報(bào)告。

手段:

  • 需要有一個(gè)工具能夠?qū)崟r(shí)去獲取該程序進(jìn)程一直運(yùn)行下占用內(nèi)存,CPU使用率情況。

方法:

  • python去實(shí)現(xiàn)這么個(gè)監(jiān)控功能 
import sys
import time
import psutil
sys.argv
# get pid from args
#獲取命令行輸入的參數(shù)個(gè)數(shù),sys.ary是一個(gè)列表
#如果列表參數(shù)<2,說(shuō)明只輸入了python 文件名稱.py,則退出不繼續(xù)運(yùn)行
if len(sys.argv) < 2:
	print ("沒(méi)有輸入要監(jiān)控的進(jìn)程編號(hào)")
	sys.exit()
 
#獲取進(jìn)程
print("打印進(jìn)程號(hào):"+sys.argv[1])
pid = int(sys.argv[1])
p = psutil.Process(pid)
#監(jiān)控進(jìn)程并將獲取CPU,內(nèi)存使用情況寫(xiě)入csv文件中
interval = 60 # 獲取CPU,內(nèi)存使用情況輪詢時(shí)間間隔
num=100
with open("process_monitor_" + p.name() + '_' + str(pid) + ".csv", "a+") as f:
	f.write("時(shí)間,cpu使用率(%),內(nèi)存使用率(%),內(nèi)存使用值MB\n") # csv文件表頭列名:time,cpu使用率,內(nèi)存使用率,內(nèi)存占用值MB
	while num>0:
		num=num-1
		current_time = time.strftime('%Y%m%d-%H%M%S',time.localtime(time.time()))
		cpu_percent = p.cpu_percent() # better set interval second to calculate like:  p.cpu_percent(interval=0.5)
		mem_percent = p.memory_percent()
		mem_info=p.memory_info().rss
		mem_MB=4096 / mem_percent
		print('當(dāng)前進(jìn)程的內(nèi)存使用:',mem_info)
		print('當(dāng)前進(jìn)程的內(nèi)存使用:%.4f MB' %mem_MB)
		line = current_time + ',' + str(cpu_percent) + ',' + str(mem_percent)+','+str(mem_MB)
		print (line)
		f.write(line + "\n")
		time.sleep(interval)

python監(jiān)控進(jìn)程并重啟

最近公司的游戲服務(wù)器經(jīng)常掉線,老板只能讓員工不定時(shí)登陸服務(wù)器看死掉沒(méi)有,都快成機(jī)器人了,因此python自動(dòng)化監(jiān)測(cè)進(jìn)程運(yùn)用腳本就產(chǎn)生了。

分析了具體思路

1.做個(gè)線程定時(shí)器,每隔20s執(zhí)行系統(tǒng)命令查詢指定進(jìn)程名稱是否存在

2.如果不存在,就重啟;不存在就不進(jìn)行后續(xù)的操作。

相關(guān)代碼很簡(jiǎn)單

def restart_process(process_name):
    red = subprocess.Popen('tasklist', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    tasklist_str = red.stdout.read().decode(encoding='gbk')
    re_path = process_name.split("\\")[-1]
    formattime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    if re_path not in tasklist_str:
        # obj = connect_emai()
        # sendmail('程序卡掉正在重啟。。。', obj)
        # 發(fā)送HTTP請(qǐng)求
        # url = "http://159.138.131.148/server_offline.html"
        # request = urllib.request(url)
        global count
        count += 1
        print(formattime + '第' + str(count) + '次檢測(cè)發(fā)現(xiàn)異常重連')
        cmd = process_name
        os.system(process_name)
        # res = subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
        # print(res.stderr.read().decode(encoding='gbk'),res.stdout.read().decode(encoding='gbk'))
        # sendmail('重啟連接成功!',obj)
        print('yes,connected')
    else:
        global error_count
        error_count += 1
        print(formattime + '第' + str(error_count) + '次檢測(cè)正在運(yùn)行中')
    global timer
    timer = Timer(20, restart_process, ("start C:\Progra~1\CloudControlServer\CloudControlServer.exe",))
    timer.start()
count = 0
error_count = 0
timer = Timer(20, restart_process, ("start C:\Progra~1\CloudControlServer\CloudControlServer.exe",))
timer.start()

搞定!??!

接下來(lái)有了新的需求~~  需要監(jiān)控CPU的運(yùn)行狀態(tài),如果CPU一直維持在80%以上 就主動(dòng)殺死進(jìn)程,并重啟進(jìn)程,使用了牛逼的psutil 跨系統(tǒng)平臺(tái)操作庫(kù)。實(shí)現(xiàn)代碼如下:

def look_cpu(process_name):
    res = subprocess.Popen('wmic cpu get LoadPercentage', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    res_str = res.stdout.read().decode(encoding='gbk')
    num = re.findall('\d+', res_str)[0]
    if int(num) > 80:
        print('cup負(fù)載超過(guò)10%')
        time.sleep(10)
        res_twice = subprocess.Popen('wmic cpu get LoadPercentage', stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                     shell=True)
        res_twice_str = res_twice.stdout.read().decode(encoding='gbk')
        num_twice = re.findall('\d+', res_twice_str)[0]
        # 判斷兩次監(jiān)測(cè)穩(wěn)定在5%以內(nèi) 殺死進(jìn)程并重啟
        if abs(int(num) - int(num_twice)) < 5:
            tasklist = subprocess.Popen('tasklist | findstr CloudControlServer.exe', stdout=subprocess.PIPE,
                                        stderr=subprocess.PIPE, shell=True)
            res = tasklist.stdout.read().decode(encoding='gbk')
            pid = re.search('\d{1,4}', res).group()
            cmd = 'taskkill -f /pid %s' % pid
            time.sleep(0.5)
            print(cmd)
            os.system('taskkill -f /pid %s' % pid)
            os.system(process_name)
    print('正在監(jiān)測(cè)cpu,cpu占用率:%s' % num)
    global timer
    timer = Timer(30, look_cpu, ("start C:\Progra~1\CloudControlServer\CloudControlServer.exe",))
    timer.start()

但是第三天老板有了新的需求,需要做個(gè)web端 將CPU和內(nèi)存信息開(kāi)放api 并且支持遠(yuǎn)程重啟,我的思路是利用python自帶的http服務(wù)類庫(kù),省去了socket編程的麻煩,直接輸入IP port  即可,這里使用了wsgiref.simple_server

# web服務(wù)應(yīng)用函數(shù)
def application(environ, start_response):
    path = environ.get('PATH_INFO')
    start_response('200 OK', [])
    # 提供cpu 狀態(tài)信息
    if path == '/cpu':
        res = subprocess.Popen('wmic cpu get LoadPercentage', stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                               shell=True)
        res_str = res.stdout.read().decode(encoding='gbk')
        resp = {'cpu': re.findall('\d+', res_str)[0]}
        return [json.dumps(resp).encode(encoding='utf-8')]
    # 提供cpu + memory 信息
    elif path == '/state':
        cpu = psutil.cpu_percent()
        memory = psutil.virtual_memory()
        memory_lv = float(memory.used) / float(memory.total) * 100
        res = {'cpu': cpu, 'memory': memory_lv}
        return [json.dumps(res).encode(encoding='utf-8')]
    # 提供重啟進(jìn)程api
    elif path == '/restart_process':
        # os.system('shutdowm.exe -r')
        res = remote_restart_process("start C:\Progra~1\CloudControlServer\CloudControlServer.exe")
        return [b'success']
# 啟動(dòng)web服務(wù)器提供api .port=8060
httpserver = make_server('', 8060, application)
httpserver.serve_forever()
'''
三個(gè)api接口:
ip:8060/cpu     cpu信息
ip:8060/state   cpu+memory狀態(tài)
ip:8060/restart_process    重啟進(jìn)程
'''

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用python3教你任意Html主內(nèi)容提取功能

    用python3教你任意Html主內(nèi)容提取功能

    這篇文章主要介紹了用python3教你任意Html主內(nèi)容提取功能,主要使用到了requests、lxml、json等模塊,文中逐一對(duì)這幾個(gè)模塊做了介紹,需要的朋友可以參考下
    2018-11-11
  • 簡(jiǎn)單了解django緩存方式及配置

    簡(jiǎn)單了解django緩存方式及配置

    這篇文章主要介紹了簡(jiǎn)單了解django緩存概述及配置,由于Django是動(dòng)態(tài)網(wǎng)站,所有每次請(qǐng)求均會(huì)去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問(wèn)量大時(shí),耗時(shí)必然會(huì)更加明顯,最簡(jiǎn)單解決方式是使用:緩存,需要的朋友可以參考下
    2019-07-07
  • Python開(kāi)發(fā)生產(chǎn)環(huán)境常用的4個(gè)工具(實(shí)用推薦)

    Python開(kāi)發(fā)生產(chǎn)環(huán)境常用的4個(gè)工具(實(shí)用推薦)

    構(gòu)建優(yōu)秀的軟件需要遵循特定的規(guī)則并執(zhí)行行業(yè)標(biāo)準(zhǔn),如何在真實(shí)的生產(chǎn)環(huán)境開(kāi)發(fā)中體現(xiàn)呢?在這篇文章中,我將向您展示我在Python項(xiàng)目中設(shè)置的4種工具,以簡(jiǎn)化開(kāi)發(fā)工作流程并執(zhí)行一些最佳實(shí)踐,這些工具幫助我提高了效率,節(jié)省了時(shí)間,希望你讀完也能有所收獲
    2024-01-01
  • Python?Pygame實(shí)戰(zhàn)之五款童年經(jīng)典游戲合集

    Python?Pygame實(shí)戰(zhàn)之五款童年經(jīng)典游戲合集

    本文為大家總結(jié)了五款利用Python+Pygame實(shí)現(xiàn)的童年經(jīng)典游戲:推箱子、滑雪、八分音符醬、保衛(wèi)蘿卜和飛機(jī)大戰(zhàn),快跟隨小編一起學(xué)習(xí)一下
    2022-04-04
  • Python使用bcrypt?或?Passlib?對(duì)系統(tǒng)用戶密碼進(jìn)行哈希和驗(yàn)證處理操作

    Python使用bcrypt?或?Passlib?對(duì)系統(tǒng)用戶密碼進(jìn)行哈希和驗(yàn)證處理操作

    在Python?開(kāi)發(fā)中,我們可以引入bcrypt?或?Passlib?對(duì)系統(tǒng)用戶密碼進(jìn)行哈希和驗(yàn)證處理,以及介紹使用其他類庫(kù)實(shí)現(xiàn)常規(guī)加解密處理操作,需要的朋友可以參考下
    2024-08-08
  • Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能

    Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能

    這篇文章主要介紹了Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 實(shí)例講解python讀取各種文件的方法

    實(shí)例講解python讀取各種文件的方法

    這篇文章主要為大家詳細(xì)介紹了python讀取各種文件的方法,,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Python+selenium點(diǎn)擊網(wǎng)頁(yè)上指定坐標(biāo)的實(shí)例

    Python+selenium點(diǎn)擊網(wǎng)頁(yè)上指定坐標(biāo)的實(shí)例

    今天小編就為大家分享一篇Python+selenium點(diǎn)擊網(wǎng)頁(yè)上指定坐標(biāo)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python映射列表實(shí)例分析

    python映射列表實(shí)例分析

    這篇文章主要介紹了python映射列表,實(shí)例分析了python映射列表遍歷計(jì)算其中每一個(gè)元素的使用技巧,需要的朋友可以參考下
    2015-01-01
  • pytorch geometric的GNN、GCN的節(jié)點(diǎn)分類方式

    pytorch geometric的GNN、GCN的節(jié)點(diǎn)分類方式

    這篇文章主要介紹了pytorch geometric的GNN、GCN的節(jié)點(diǎn)分類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

双峰县| 博野县| 辽宁省| 花莲县| 托克逊县| 曲沃县| 和硕县| 海淀区| 文昌市| 从江县| 灌云县| 靖西县| 兰州市| 兴和县| 贡山| 仪征市| 深泽县| 康平县| 称多县| 镇康县| 石狮市| 耿马| 思南县| 格尔木市| 白玉县| 兰溪市| 西华县| 灵台县| 潞西市| 宜宾市| 新乡市| 响水县| 宜都市| 垦利县| 滦南县| 伊川县| 克拉玛依市| 宜春市| 镇康县| 板桥市| 商都县|