python 讓cpu滿載
- 2020 年 1 月 20 日
- 筆記
搞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
服務器的風扇,在呼呼的叫。先停止吧,死機就完蛋了!