通过shell脚本进行linux服务器的CPU和内存压测

本文介绍通过Python和Shell脚本实现内存及CPU的压力测试方法。包括利用Python生成大量字符串来消耗内存,以及使用Shell脚本创建临时文件系统并填充数据以测试内存,还有通过无限循环来测试CPU负载的技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在正常手段下,这个只是压测的方法

在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率

什么?你问我为什么要提高CPU和内存的使用率?只可意会不可言传,自己悟吧

内存压测

python的方式
# _*_ coding: utf-8 _*_
import sys
import re
import time

def print_help():
    print ('Usage:')
    print ('python mem.py 100MB')
    print ('python mem.py 1GB')

if __name__=="__main__":
    if len(sys.argv) == 2:
        pattern = re.compile('^(\d*)(M|G|B)$')
        match = pattern.match(sys.argv[1].upper())
        if match:
            num = int(match.group(1))
            unit = match.group(2)
            if unit == 'MB':
                s = ' '* (num * 1024 * 1024)
            else:
                s = ' '* (num * 1024 * 1024 * 1024)
                time.sleep(30)
        else:
            print_help()
    else:
        print_help()

使用方法:python mem.py 20G

mem.py是自定义的,这个不受限制

time.sleep的时间可以自己调整

好处在于,这个是利用CPU进行计算,去占用内存

shell的方式
#!/bin/bash
PWD=$(cd $(dirname $0); pwd)
MEM_DIR='/tmp/memory'
MEM_SIZE=$1

[ ! -d ${MEM_DIR} ] && mkdir ${MEM_DIR}
mount -t tmpfs -o size=${MEM_SIZE} tmpfs ${MEM_DIR} >> ${PWD}/mem_up.log 2>&1
if [ $? == 0 ]
then
    dd if=/dev/zero of=${MEM_DIR}/test count=1 bs=${MEM_SIZE} >> ${PWD}/mem_up.log 2>&1
    if [ $? == 0 ]
    then
        sleep 30
        rm ${MEM_DIR}/test && \
        umount ${MEM_DIR} && \
        rm -rf ${MEM_DIR}
    else
        rm ${MEM_DIR}/test && \
        umount ${MEM_DIR} && \
        rm -rf ${MEM_DIR}
        printf "\e[0;31msomething was error , please check ${PWD}/mem_up.log\e[0m\n"
        exit 1
    fi
else
    printf "\e[0;31msomething was error , please check ${PWD}/mem_up.log\e[0m\n"
    exit 2
fi

使用方法:sh mem.sh 20G

mem.sh是自定义的,这个不受限制

缺点:dd if 命令是使用磁盘读写,将磁盘内的/dev/zero写入到内存的tmpfs

cpu压测

#!/bin/sh
PWD=$(cd $(dirname $0); pwd)
cpu_num=$1

if [ $# != 1 ]
then
  printf "\e[0;34mUSAGE: $0 <CPUs>\e[0m\n"
  exit 1
fi

for i in $(seq ${cpu_num})
do
    echo -ne "
    i=0;
while true
do
    i=i+1;
done" | /bin/sh &
    pid_array[${i}]=$! ;
done

for i in "${pid_array[@]}"; do
    printf "\e[0;32mkill ${i}\e[0m\n" >> ${PWD}/kill_cpu_up.log 2>&1
done

使用方法:sh cpu_up.sh 2

cpu_up.sh是自定义的,这个不受限制

表示使用2个CPU,可以根据自己的情况去设定

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值