導航:首頁 > 編程語言 > python監控linux內存

python監控linux內存

發布時間:2022-08-23 03:22:23

A. 怎麼用python查詢出 進程 CPU使用率 內存使用 句柄數

看到句柄數這幾個字,我猜可能是要windows下運行的?

可能答非所問,不過在linux下最好的用的莫過於psutil了,你可以通過進程名或pid很好的監控任意進程的系統佔用情況,甚至進程建立的每個連接都能獲取到

>>>importpsutil
>>>psutil.pids()
[1,2,3,4,5,6,7,46,48,50,51,178,182,222,223,224,
268,1215,1216,1220,1221,1243,1244,1301,1601,2237,2355,
2637,2774,3932,4176,4177,4185,4187,4189,4225,4243,4245,
4263,4282,4306,4311,4312,4313,4314,4337,4339,4357,4358,
4363,4383,4395,4408,4433,4443,4445,4446,5167,5234,5235,
5252,5318,5424,5644,6987,7054,7055,7071]
>>>
>>>p=psutil.Process(7055)
>>>p.name()
'python'
>>>p.exe()
'/usr/bin/python'
>>>p.cwd()
'/home/giampaolo'
>>>p.cmdline()
['/usr/bin/python','main.py']
>>>
>>>p.status()
'running'
>>>p.cpu_percent(interval=1.0)
12.1

>>>psutil.net_io_counters(pernic=True)
{'eth0':netio(bytes_sent=485291293,bytes_recv=6004858642,packets_sent=3251564,packets_recv=4787798,errin=0,errout=0,dropin=0,dropout=0),
'lo':netio(bytes_sent=2838627,bytes_recv=2838627,packets_sent=30567,packets_recv=30567,errin=0,errout=0,dropin=0,dropout=0)}

從官方文檔上了一部分出來,有沒有碉堡了的感覺,快去翻一下文檔吧,非常容易使用

B. python監控linux下啟動了多少進程

任何一種編程語言,啟動進程和關閉進程都是跟操作系統相關的操作,python中與操作系統打交道的話,推薦使用os模塊。

os.system() 函數可以啟動一個進程,執行完之後返回狀態碼。

os.fork() 復制一個進程,如果是子進程返回0,如果是父進程返回子進程的pid,使用這個函數的時候,建議你學習一下linux編程的知識。
os.popen 以管道的方式創建進程。
os.spawnl 也可以創建進程,並能指定環境變數。

os.kill(pid, sig) 關閉一個進程,pid是進程號,sig是信號。與fork配合使用,例如你剛才用fork創建了一個子進程,它的pid是11990, 那麼調用
os.kill( 11990, signal.CTRL_BREAK_EVENT)
就以ctrl+c的方式殺死了這個進程。

另外還有一個模塊multiprocessing,這個模塊封裝了很多創建進程和進程間通信的操作,可以讓你發揮多核的威力。

C. 如何監控python的內存使用情況

分析現象,先搞清楚內存是隨著什麼業務邏輯增長的。再逐步定位。Python里沒有jprofiler那麼好的工具。自己努力分析解決,想偷懶是不行的。

另外垃圾回收和內存泄漏完全是兩碼事。傳統C/C++里常提的內存泄漏是內存你已經不用了,但是忘記歸還。垃圾回收中的內存一般是另外一種,也就是你在用
那些實際上你不需要的內存。比如你有一個list,每處理一個event就把處理過的event append到list後面,內存不增長才怪呢。所以你
要先搞清楚你的程序理論上對內存的需要,再比較內存的實際使用是否合理。

D. Linux下,用什麼工具方便檢測一個python項目的內存訪問越界(可能)

理論上純python很難造出如上錯誤吧,
是不是你的代碼調用了某些C++庫

E. 使用python,在linux上監控遠程windows的CPU、硬碟、內存使用率

你需要安裝wmic,它實現了linux下能使用wmi,安裝以後就可以用了,下面是例子。
import wmi_client_wrapper as wmi
wmic = wmi.WmiClientWrapper(
username="Administrator",
password="password",
host="192.168.1.149",
)
output = wmic.query("SELECT * FROM Win32_Processor")

F. linux下問題求助!!!我用一個python腳本(A)調用了另外一個可執行程序(B),但是要控制B的內存(顯示B

給你的child process用resource.setrlimit(resource.RLIMIT_AS, (soft_limit,hard_limit))。
但是要注意,如果你的child process有super user的許可權話,它是有權力自己給自己改限制的。

G. python填充linux內存80%

1、使用兩個Python腳本文件,分別是test.py和mem_rate.py。
2、其功能分別是查看當前內存佔用和動態設定內存佔用百分比。即可將Linux內存填充80%。

H. 如何使用Python動態控制Linux系統的內存佔用百分比

如何使用Python動態控制Linux系統的內存佔用百分比?

近期有網上朋友尋求幫助:如何通過腳本動態控制Linux系統的內存佔用百分比?經過一番網路+編寫調試,終於初步完成了動態控制Linux系統內存佔用百分比。現寫出來以幫助更多的朋友。
1 前言
根據需求是動態控制Linux系統內存佔用百分比,比如當前內存佔用30%,如果設置內存佔用為70%,則需要申請內存使達到佔用70%;如果再降低到40%,則需要釋放部分申請的內存。其實腳本的本質是內存動態申請與釋放。
注意:因為Python腳本運行之前內存有一定佔用,故設定內存佔用不能低於該百分比。
2 內存動態申請
通過查詢資料,使用Python動態申請內存塊,可以使用ctypes包中的函數,導入包及代碼如下所示:
>>> from ctypes import *
>>> mem=create_string_buffer(1024)
說明:內存申請使用create_string_buffer()函數,上面申請了1024位元組的內存塊。
下面演示申請100MB內存前後變化
申請前如下圖所示:

使用代碼如下:
>>>mem=create_string_buffer(104857600)
申請後如下圖所示:

從上述兩幅圖中可以看出,申請內存前內存佔用295MB,申請後內存佔用397MB,增加了約100MB內存佔用。
3 內存動態釋放
由於Python對內存是有垃圾回收機制的,採用對象引用計數方式。當對象的引用計數為0時,啟動垃圾回收GC。此處內存動態釋放就是使用該原理。
代碼如下:
>>> mem=None
釋放後內存佔用如下圖所示:

內存佔用由397MB降低到297MB,釋放了100MB內存佔用。
說明:將None賦值給對象mem後,mem對象的引用計數即為0,此時垃圾回收啟動,釋放mem對象佔用的內存。
4 系統總內存、佔用內存檢測
由於需要設定內存佔用百分比,故需要獲取系統總物理內存和佔用內存。本文使用的方法是讀取系統文件「/proc/meminfo」,從中解析出總內存大小以及當前內存佔用大小等內存相關的信息。該文件內容格式如下圖所示:

代碼片段如下所示:
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
說明:按行讀取meminfo文件內容,創建字典對象mem,將meminfo文件第一列設置為mem對象的鍵值,將meminfo文件第二列數字設置為mem對象的值。
5 獲取用戶輸入百分比
通過讀取鍵盤輸入字元串,然後轉換為數字實現接收用戶輸入的百分比,代碼如下所示:
input_str=raw_input("Input UsedMemory`s Rate or q to exit:")
rate=float(input_str)
注意:此處鍵盤輸入的都是字元串,需要進行字元串轉換為數字,使用float()或long()函數進行轉換。
6 動態設置內存佔用百分比測試
測試使用兩個Python腳本文件,分別是test.py和mem_rate.py,其功能分別是查看當前內存佔用和動態設定內存佔用百分比。如下圖所示:

注意:上述兩個文件需要使用「chmod +x *.py」修改為可執行屬性。
6.1 查看當前內存佔用
查看當前內存佔用百分比,使用上述test.py文件,運行命令為「./test.py」,運行結果如下圖所示:

當前使用內存為320MB,佔用百分比為17%。
6.2 動態設置內存佔用百分比
動態設置內存佔用百分比使用上述mem_rate.py腳本,注意該腳本文件第一行代碼為「#!/usr/bin/python2.6」,表示該腳本使用python2.6程序運行。該行需要修改為待運行Linux系統中Python實際的安裝程序路徑。
動態內存百分比設置界面如下圖所示:

處於待輸入狀態。另外顯示了當前內存佔用(321MB),總內存大小(1869MB)以及內存佔用百分比(17%)。
如果此時設置內存佔用百分比為80%,則腳本會每次申請10MB空間,直至內存佔用接近或等於80%為止。如下圖所示:

內存申請過程如下圖所示:

內存申請過程中佔用百分比變化為:35%,45%,56%,70%,…
mem_rate.py運行過程如下圖所示:

內存申請過程中佔用變化為:1461MB,1471MB,1481MB,1491MB。
此時如果內存佔用百分比設置為20%,則需要釋放一部分內存。
test.py腳本運行過程如下圖所示:
由於釋放內存運行較快,抓取到最後結果

內存佔用為20%。
mem_rate.py腳本運行過程如下圖所示:

內存釋放過程中內存佔用為:413MB,403MB,393MB,383MB,最後內存佔用穩定在20%,383MB。
輸入「q」或「Q」退出內存佔用百分比設定過程,如下圖所示:

此時內存佔用如下圖所示:

內存佔用恢復到運行mem_rate.py腳本之前狀態,17%,321MB。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
附:完整Python腳本代碼
test.py
------------------------------------------------------------------------------------------------
#!/usr/bin/python2.6
def memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
# - mem['Buffers']- mem['Cached']
return mem

mem=memory_stat()
print("Used(MB):%d"%(long(mem['MemUsed'])/1024/1024))
print("Rate:%d%%"%(100*long(mem['MemUsed'])/float(mem['MemTotal'])))

§§§§§§§§§§§§§§§§§§§§§§§§§§
mem_rate.py
---------------------------------------------------
#!/usr/bin/python2.6

from ctypes import *

# Get Memory Info(Total, Used... Byte)
def get_memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
# Return MemroyInfo Object
return mem

# Get Simple Memory Info
def get_memory_info(mem):
# Byte -> MB
n=1024* 1024
used=float(mem['MemUsed'])/ n
total=float(mem['MemTotal'])/ n
rate=used/total* 100
smp={'used':used,'total':total,'rate':rate}
return smp

# Display Current Memory Info
def print_memory_info(mem):
# Get SimpleMemory Info
smp=get_memory_info(mem)
print("Used(MB):%d\tTotal(MB):%d\tUsedRate:%d%%"%(smp['used'], smp['total'], smp['rate']))

# Get Rate Of Memory Used To Be Setted(Integer Formate)
def input_memory_used_rate(org_rate):
# Byte -> MB
n=1024* 1024
while(True):
mem=get_memory_stat()
print_memory_info(mem)

input_str=raw_input("Input UsedMemory`s Rate or q to exit:")
if(len(input_str)== 0):
continue
if("q"== input_str):
info={'rate':0,'used':mem['MemUsed']/ n}
return info
if("Q"== input_str):
info={'rate':0,'used':mem['MemUsed']/ n}
return info
try:
rate=float(input_str)
if((rate>=org_rate)and (rate<=95)):
info={'rate':rate,'used':mem['MemUsed']/ n}
return info
else:
print("Please inputa valid number(%d%%~95%%)."%(org_rate))
except:
print("Please inputa valid number(%d%%~95%%)."%(org_rate))

# Set Rate Of Memory Used
def set_memory_used_rate(new_rate, total, pre_used,list):
if(new_rate==0):
return None
dest_mem=total* new_rate /100.0
# 10MB
mb10=10485760
n_chg=10
# Free Memory OrAllocate Memory ?
is_new=dest_mem>pre_used
cur_used=pre_used
while(True):
# To Calc FreeMemory Or Allocate Memory ?
need_new=dest_mem-n_chg>=pre_used
need_del=dest_mem+n_chg<=pre_used

# Need To AllocateMemory
if(is_new):
if(need_new):
p=create_string_buffer(mb10)
list.append(p)
dest_mem=dest_mem-n_chg
cur_used=cur_used+n_chg
else:
return"end"
# Need To FreeMemory
else:
idx=len(list)-1
if(need_deland (idx>=0)):
p=list[idx]
del list[idx]
p=None
dest_mem=dest_mem+n_chg
cur_used=cur_used-n_chg
else:
return"end"
print("****** MemoryUsed(MB):%d"%(cur_used))

# Entry Of Program

# List Of Memory Object, 10MB Of One Object
list=[]
# Get Current Memory Info
mem=get_memory_stat()
# Get Simple Memory Info
smp=get_memory_info(mem)
org_rate=smp['rate']
total=smp['total']

while(True):
# Get Rate OfMemory To Be Used
info=input_memory_used_rate(org_rate)
new_rate=float(info['rate'])
pre_used=float(info['used'])
# Set Rate OfMemory To Be Used
rtn=set_memory_used_rate(new_rate, total, pre_used, list)
if(not rtn):
print("bye!")
exit()

閱讀全文

與python監控linux內存相關的資料

熱點內容
愛上北斗星男友在哪個app上看 瀏覽:413
主力散戶派發源碼 瀏覽:663
linux如何修復伺服器時間 瀏覽:55
榮縣優途網約車app叫什麼 瀏覽:472
百姓網app截圖是什麼意思 瀏覽:222
php如何嵌入html 瀏覽:809
解壓專家怎麼傳輸 瀏覽:743
如何共享伺服器的網路連接 瀏覽:132
程序員簡易表白代碼 瀏覽:166
什麼是無線加密狗 瀏覽:62
國家反詐中心app為什麼會彈出 瀏覽:67
cad壓縮圖列印 瀏覽:102
網頁打開速度與伺服器有什麼關系 瀏覽:863
android開發技術文檔 瀏覽:65
32單片機寫程序 瀏覽:51
三星雙清無命令 瀏覽:838
漢壽小程序源碼 瀏覽:344
易助erp雲伺服器 瀏覽:533
修改本地賬戶管理員文件夾 瀏覽:419
python爬蟲工程師招聘 瀏覽:285