搞zabbix監控的時候,linux伺服器的負載很低,如何寫一個python腳本,讓它滿載呢?
網上搜了一堆,發現各種不靠譜。後來終于發現了更簡單的方法,就是定義一個死循環函數,讓函數什麼都不做就好了
def deadloop():
while True:
pass
deadloop()
複制
就是這麼簡單的幾行就能讓cpu的一個線程滿載
執行之後,檢視top
[root@localhost ~]# top
top - 17:13:36 up 5:24, 8 users, load average: 0.23, 0.08, 0.06
Tasks: 132 total, 2 running, 130 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3874004 total, 2856660 free, 410604 used, 606740 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3183588 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7519 root 20 0 122852 5496 2428 R 99.3 0.1 0:13.11 python3
6439 root 20 0 862228 49056 8776 S 1.3 1.3 0:22.24 python3
7520 root 20 0 157752 2236 1576 R 0.3 0.1 0:00.01 top
複制
發現隻有一個cpu是滿載的,使用w檢視負載,還是很低
[root@localhost ~]# w
17:14:35 up 5:25, 8 users, load average: 0.72, 0.25, 0.12
複制
如何讓4個cpu都滿載呢?
使用多程序,那麼開幾個程序合适呢?根據CPU核心數來!
擷取CPU核心數
寫一個測試腳本
from multiprocessing import cpu_count
print(cpu_count())
複制
執行輸出:4
使用多程序并結合CPU核心數
from multiprocessing import cpu_count
from multiprocessing import Process
def func(): # 死循環函數,讓cpu滿載
while True:
pass
if __name__ == '__main__':
p_lst = [] # 定義一個清單
core_count = cpu_count() # CPU核心數
for i in range(core_count):
p = Process(target=func) # 子程序調用函數
p.start() # 啟動子程序
p_lst.append(p) # 将所有程序寫入清單中
for p in p_lst: p.join() # 檢測p是否結束,如果沒有結束就阻塞直到結束,否則不阻塞
print('結束')
複制
執行此腳本,并檢視top狀态
[root@localhost ~]# top
top - 17:18:52 up 5:30, 8 users, load average: 0.11, 0.20, 0.14
Tasks: 134 total, 5 running, 129 sleeping, 0 stopped, 0 zombie
%Cpu0 : 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3874004 total, 2915672 free, 351628 used, 606704 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3242624 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7564 root 20 0 132664 6040 1192 R 100.0 0.2 0:08.65 python3
7566 root 20 0 132664 6000 1152 R 100.0 0.2 0:08.64 python3
7565 root 20 0 132664 5988 1140 R 99.7 0.2 0:08.63 python3
7567 root 20 0 132664 6004 1156 R 99.7 0.2 0:08.63 python3
複制
檢視cpu使用率,發現4個python3程序都是100%
等待1分鐘,檢視負載,發現CPU負載在不斷上升
[root@localhost ~]# w
17:20:32 up 5:31, 8 users, load average: 3.29, 1.29, 0.54
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 16:51 23:28 0.56s 0.56s -bash
複制
伺服器的風扇,在呼呼的叫。先停止吧,當機就完蛋了!