搞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
服务器的风扇,在呼呼的叫。先停止吧,死机就完蛋了!