How to create a CPU spike with a bash command

后端 未结 23 1123
小蘑菇
小蘑菇 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:30

    I went through the Internet to find something like it and found this very handy cpu hammer script.

    #!/bin/sh
    
    # unixfoo.blogspot.com
    
    if [ $1 ]; then
        NUM_PROC=$1
    else
        NUM_PROC=10
    fi
    
    for i in `seq 0 $((NUM_PROC-1))`; do
        awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &
    done
    
    0 讨论(0)
  • 2020-11-30 16:31
    :(){ :|:& };:
    

    This fork bomb will cause havoc to the CPU and will likely crash your computer.

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

    Using examples mentioned here, but also help from IRC, I developed my own CPU stress testing script. It uses a subshell per thread and the endless loop technique. You can also specify the number of threads and the amount of time interactively.

    #!/bin/bash
    # Simple CPU stress test script
    
    # Read the user's input
    echo -n "Number of CPU threads to test: "
    read cpu_threads
    echo -n "Duration of the test (in seconds): "
    read cpu_time
    
    # Run an endless loop on each thread to generate 100% CPU
    echo -e "\E[32mStressing ${cpu_threads} threads for ${cpu_time} seconds...\E[37m"
    for i in $(seq ${cpu_threads}); do
        let thread=${i}-1
        (taskset -cp ${thread} $BASHPID; while true; do true; done) &
    done
    
    # Once the time runs out, kill all of the loops
    sleep ${cpu_time}
    echo -e "\E[32mStressing complete.\E[37m"
    kill 0
    
    0 讨论(0)
  • 2020-11-30 16:32

    I think this one is more simpler. Open Terminal and type the following and press Enter.

    yes > /dev/null &
    

    To fully utilize modern CPUs, one line is not enough, you may need to repeat the command to exhaust all the CPU power.

    To end all of this, simply put

    killall yes
    

    The idea was originally found here, although it was intended for Mac users, but this should work for *nix as well.

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

    An infinite loop is the idea I also had. A freaky-looking one is:

    while :; do :; done
    

    (: is the same as true, does nothing and exits with zero)

    You can call that in a subshell and run in the background. Doing that $num_cores times should be enough. After sleeping the desired time you can kill them all, you get the PIDs with jobs -p (hint: xargs)

    0 讨论(0)
  • 2020-11-30 16:35
    #!/bin/bash
    while [ 1 ]
    do
            #Your code goes here
    done
    
    0 讨论(0)
提交回复
热议问题