How to create a CPU spike with a bash command

后端 未结 23 1126
小蘑菇
小蘑菇 2020-11-30 16:11

I want to create a near 100% load on a Linux machine. It\'s quad core system and I want all cores going full speed. Ideally, the CPU load would last a designated amount of

相关标签:
23条回答
  • 2020-11-30 16:53

    This does a trick for me:

    bash -c 'for (( I=100000000000000000000 ; I>=0 ; I++ )) ; do echo $(( I+I*I )) & echo $(( I*I-I )) & echo $(( I-I*I*I )) & echo $(( I+I*I*I )) ; done' &>/dev/null
    

    and it uses nothing except bash.

    0 讨论(0)
  • 2020-11-30 16:53

    I combined some of the answers and added a way to scale the stress to all available cpus:

    #!/bin/bash
    
    function infinite_loop { 
        while [ 1 ] ; do
            # Force some computation even if it is useless to actually work the CPU
            echo $((13**99)) 1>/dev/null 2>&1
        done
    }
    
    # Either use environment variables for DURATION, or define them here
    NUM_CPU=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
    PIDS=()
    for i in `seq ${NUM_CPU}` ;
    do
    # Put an infinite loop on each CPU
        infinite_loop &
        PIDS+=("$!")
    done
    
    # Wait DURATION seconds then stop the loops and quit
    sleep ${DURATION}
    
    # Parent kills its children 
    for pid in "${PIDS[@]}"
    do
        kill $pid
    done
    
    0 讨论(0)
  • 2020-11-30 16:54

    Here is a program that you can download Here

    Install easily on your Linux system

    ./configure
    make
    make install
    

    and launch it in a simple command line

    stress -c 40
    

    to stress all your CPUs (however you have) with 40 threads each running a complex sqrt computation on a ramdomly generated numbers.

    You can even define the timeout of the program

    stress -c 40 -timeout 10s
    

    unlike the proposed solution with the dd command, which deals essentially with IO and therefore doesn't really overload your system because working with data.

    The stress program really overloads the system because dealing with computation.

    0 讨论(0)
  • 2020-11-30 16:54

    Dimba's dd if=/dev/zero of=/dev/null is definitely correct, but also worth mentioning is verifying maxing the cpu to 100% usage. You can do this with

    ps -axro pcpu | awk '{sum+=$1} END {print sum}'
    

    This asks for ps output of a 1-minute average of the cpu usage by each process, then sums them with awk. While it's a 1 minute average, ps is smart enough to know if a process has only been around a few seconds and adjusts the time-window accordingly. Thus you can use this command to immediately see the result.

    0 讨论(0)
  • 2020-11-30 16:55
    #!/bin/bash
    duration=120    # seconds
    instances=4     # cpus
    endtime=$(($(date +%s) + $duration))
    for ((i=0; i<instances; i++))
    do
        while (($(date +%s) < $endtime)); do :; done &
    done
    
    0 讨论(0)
提交回复
热议问题