在Linux系统中,刻意使CPU过载甚至触发系统无响应(俗称”当掉”)通常用于压力测试、系统稳定性验证或资源监控测试。但请注意:此类操作将导致服务中断、数据丢失风险,务必在虚拟机或非生产环境中进行,且操作者需具备系统恢复能力。 以下是几种常见方法及原理:
使用命令行工具制造CPU负载
stress
工具(推荐)
sudo yum install stress # CentOS/RHEL # 启动CPU压力测试(4个核心满载) stress --cpu 4 --timeout 60s # 4个核心满载运行60秒
原理:
通过创建多个进程执行 sqrt()
函数计算,持续消耗CPU资源。--timeout
参数可控制持续时间,避免系统永久卡死。
dd
命令 + /dev/zero
管道
dd if=/dev/zero of=/dev/null & # 后台运行一个CPU密集型任务 # 重复执行多次可增加负载(建议不超过CPU核心数)
原理:/dev/zero
生成无限空数据流,dd
持续读写操作占用CPU资源。
编写脚本制造死循环
Shell脚本(单核满载)
#!/bin/bash while :; do :; done & # 启动一个无限循环的后台进程 # 执行后使用 top 查看CPU占用,结束命令: kill %1
风险:
多执行几次会导致所有CPU核心满载,系统卡死。
C程序(更高效占用)
#include <unistd.h> int main() { while(1) fork(); // 无限调用fork()创建进程 return 0; }
编译与运行:
gcc fork_bomb.c -o fork_bomb ./fork_bomb
原理(Fork炸弹):
指数级创建新进程,迅速耗尽进程表和CPU资源。恢复需强制重启。
内核级操作(高危!)
触发内核Panic
echo c > /proc/sysrq-trigger # 立即触发内核崩溃
原理:
通过SysRq魔术键强制崩溃内核,用于调试。系统将直接宕机,需物理重启。
移除CPU热插拔
echo 0 > /sys/devices/system/cpu/cpu1/online # 禁用CPU核心1
风险:
错误操作可能导致设备驱动异常或硬件损坏。
⚠️ 关键注意事项
- 环境隔离:
仅在虚拟机(如VirtualBox)或备用设备测试,避免影响生产环境。 - 恢复方法:
- 临时负载:用
killall -9 stress
或kill -9 PID
终止进程。 - 系统卡死:通过REISUB快捷键安全重启(
Alt+SysRq
+R→E→I→S→U→B
)。 - 彻底崩溃:强制关机重启。
- 临时负载:用
- 监控工具:
执行前开启新终端运行top
或htop
观察资源占用。 - 法律责任:
对他人系统进行此类操作可能违反《网络安全法》。
为什么需要此类测试?
- 验证监控系统:测试告警阈值(如Zabbix/ Prometheus)。
- 评估散热能力:高负载下检测设备温度与稳定性。
- 资源分配演练:模拟极端场景优化容器(Docker/K8s)资源限制。
重要声明仅限技术研究,严禁用于破坏性操作,因滥用导致的硬件损坏、数据丢失或法律责任,使用者自行承担。
引用说明:
- Linux
stress
工具手册页(man stress
) - Linux内核文档:
/usr/src/linux/Documentation/sysrq.txt
- POSIX标准进程管理(IEEE Std 1003.1)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8737.html