项目中,经常会遇到管理方对服务器资源进行定期监控,发现资源利用率低的机器,然后让减配。为了提高服务器资源利用率,我们可以尝试定期运行一些占用资源的脚本,来提高服务器的资源利用率。
下面分享几个我工作中常用的资源占用脚本。
#!/bin/bash# 构造死循环代码占用一个CPUendless_loop() { echo -ne "i=0; while true ;do i=i+100; i=100;done" | /usr/bin/bash &}# 校验参数个数if [ $# != 2 ]; then echo "USAGE: $0 <cpus,sleep time>" exit 1fi# 根据第一个参数循环执行endless_loop占用CPU,并将进程id存入数组for i in $(seq $1); do endless_loop pid_array[$i]=$!done# 界面给出提示,并将kill 进程id命令重定向到/tmp/cpufile.txt文件中for i in "${pid_array[@]}"; do echo 'execute: kill' $i echo 'kill' $i >>/tmp/cpufile.txtdone# 给出提示,本次脚本需要执行多少秒,如果想提前结束脚本执行ctrl+C,并且要手动去kill掉进程echo "If executed ctrl+C,Please execute the above lines manually"echo "Please wait $2 seconds"sleep $2# 执行完成后,自动从/tmp/cpufile.txt文件中读取命令kill掉占用CPU的进程for i in $(awk '{print $2}' /tmp/cpufile.txt); do echo "kill $i" kill $idone# 清理文件find /tmp -name cpufile.txt -delete
# 占用3个核,占用100秒sh cpu.sh 3 100
#!/bin/bash # 校验参数if [ $# != 2 ]; then echo "USAGE: $0 <free,sleep time>" exit 1fifree -g[ -d /tmp/memory ] && exit 1 || mkdir /tmp/memorymount -t tmpfs -o size=$1G tmpfs /tmp/memorydd if=/dev/zero of=/tmp/memory/blockfree -gecho "If executed ctrl+C,Please execute the following lines manually"echo "execute: rm -rf /tmp/memory/block"echo "execute: umount /tmp/memory"echo "execute: rmdir /tmp/memory"echo "Please wait $2 seconds"sleep $2find /tmp/memory -name block -deleteumount /tmp/memoryfind /tmp -name memory -delte
# 占用3G内存,占用100秒sh memory.sh 3 100
# cpu占用3个核,100秒*/15 19-23,0-7 * * * nohup /bin/bash /data/scripts/cpu.sh 3 100 > /dev/null &# cpu占用1个核,80秒*/30 8-18 * * * nohup /bin/bash /data/scripts/cpu.sh 1 80 > /dev/null &# 内存占用5个G,300秒*/20 19-23,0-7 * * * nohup /bin/bash /data/scripts/memory.sh 5 300 > /dev/null &
如果本文对你有帮助,欢迎 关注、点赞、分享、推荐~
点关注,一起成长!