Как я могу произвести высокую загрузку ЦП на сервере Linux?

Я сейчас в процессе отладка установки кактусы и хотите создать нагрузку на процессор для отладки моих графиков использования процессора.

Я пытался просто запустить cat /dev/zero > /dev/null, который прекрасно работает, но использует только 1 ядро:

enter image description here

есть ли лучший метод тестирования / максимизации системных ресурсов при нагрузке?

по теме: как я могу производить высокую загрузку процессора на Windows?

143
задан Community 2012-06-30 21:13:30
источник

13 ответов

попробовать stress Это в значительной степени эквивалент Windows consume.exe:

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
164
отвечен Mitesh Shah 2014-03-04 03:04:27
источник

отсутствие потребности установить любой экстренный пакет, ваша хорошая старая раковина могл сделать ее самостоятельно.

этот ОДН-вкладыш нагрузит ваши 4 сердечника на 100%:

for i in 1 2 3 4; do while : ; do : ; done & done

как это работает довольно просто, он начинает четыре бесконечные петли. Каждый из них повторяет инструкцию null (:). Каждый цикл способен загрузить ядро процессора на 100%.

если вы используете bash,ksh93 и другие раковины поддерживая ряды, (т. е. не dash старше ksh), вы можете использовать это непортативный синтаксис:

for i in {1..4}; do ...

заменить 4 С количеством процессоров вы хотели бы загрузить, если отличается от 4.

предполагая, что у вас не было фонового задания, уже запущенного при запуске одного из этих циклов, вы можете остановить генерацию нагрузки с помощью этой команды:

for i in 1 2 3 4; do kill %$i; done

отвечая на комментарий @underscore_d, вот Расширенная версия, которая упрощает остановку загрузки, а также позволяет указать тайм-аут (по умолчанию 60 считанные секунды.) A управления -C убьет все убегающие петли тоже. Эта функция оболочки работает как минимум под bash и ksh.

# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
  (
    pids=""
    cpus=${1:-1}
    seconds=${2:-60}
    echo loading $cpus CPUs for $seconds seconds
    trap 'for p in $pids; do kill $p; done' 0
    for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
    sleep $seconds
  )
}
85
отвечен jlliagre 2015-11-01 13:10:28
источник

Я сделал простой скрипт на Python, который делает то же самое. Вы можете контролировать количество ядер процессора, которые вы хотите загрузить. Хорошая вещь об этом является то, что он не будет потреблять никаких других ресурсов, кроме процессора. (Я думаю, что идея Марка Джонсона будет потреблять много ресурсов ввода / вывода, что здесь нежелательно.)

from multiprocessing import Pool

def f(x):
    # Put any cpu (only) consuming operation here. I have given 1 below -
    while True:
        x * x

# decide how many cpus you need to load with.
no_of_cpu_to_be_consumed = 3

p = Pool(processes=no_of_cpu_to_be_consumed)
p.map(f, range(no_of_cpu_to_be_consumed))

просто запустите скрипт из терминала $ python temp1.py. Вам нужно убить сценарий, когда вы закончите.

здесь, мое потребление процессора, когда я загружаю 3 из моих начинка.

Script temp1.py creates three processes (PIDs - 9377, 9378, 9379) which load 3 of my cores

19
отвечен Pushpak Dagade 2013-12-28 12:29:03
источник

один альтернативный путь был бы

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

или (при наличии nproc)

openssl speed -multi $(nproc --all)

OpenSSL почти всегда присутствует в современных дистрибутивах, поэтому никаких дополнительных пакетов не требуется.

13
отвечен rkosegi 2017-06-18 11:16:22
источник

запустить два

sha1sum /dev/zero &

команды для каждого ядра в вашей системе.

остановить

killall sha1sum

или

kill sha1sum
8
отвечен ecabuk 2015-11-02 00:31:57
источник

Я обычно беру сюиту cpuburn:

sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done

замените 4 числом ядер / HT-потоков, которые у вас есть или которые вы хотите подчеркнуть.

Примечание: это усиливает как много зоны обломока как возможный в то же время, оно программировало произвести максимальную диссипацию силы. Пришлось писать этот пост второй раз, как-то моей машине не понравилось: - (

вы также можете сделать cpuburn в последовательности:

burnP6 & burnP6 & burnP6 & burnP6 & 
[1] 28520
[2] 28521
[3] 28522
[4] 28523

и когда вы хотите, чтобы остановить им:

killall burnP6

вы также можете умножить burnP6 &, чтобы соответствовать количеству ядер процессора в вашей системе.

7
отвечен ce4 2013-04-14 02:23:14
источник

Я разрабатывал stress-ng, обновленный инструмент стресса, который может подчеркнуть широкий спектр аспектов системы Linux. Для получения дополнительной информации см. раздел http://kernel.ubuntu.com/~ть/стресс-НГ/

использование аналогично стресс

$ stress-ng --cpu 4 --vm 2 --fork 8 --switch 4 --timeout 1m
stress-ng: info:  [32254] dispatching hogs: 4 cpu, 8 fork, 4 switch, 2 vm
stress-ng: info:  [32254] cache allocate: default cache size: 8192K

установить с

sudo apt-get install stress-ng
5
отвечен Colin King 2018-03-22 11:25:17
источник

вы можете запускать эту команду столько раз, сколько хотите, и каждый раз она будет занимать другое ядро:

$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388
2
отвечен Christian Mann 2012-07-01 06:09:16
источник

https://github.com/GaetanoCarlucci/CPULoadGenerator

довольно простое и научное решение.

здесь вы можете увидеть пример динамики, в котором 50% нагрузки генерируется на ядро процессора 0:

enter image description here

вы можете запустить процесс на других ядрах одновременно.

2
отвечен user 2016-09-08 14:12:27
источник

Я объединил оба +jlliagre и + ecabuk.

#!/bin/bash
lc() {
    nowMs=$(date +%s)
    (
        pids=""
        cpus=${1:-1}
        seconds=${2:-60}
        echo "[$(date)] loading $cpus CPUs for $seconds seconds"
        echo "[$(date)] Expected completion: [$(date [email protected]$(expr $nowMs + $seconds))]"
        trap 'for p in $pids; do kill $p; done' 0
        for ((i=0;i<cpus;i++)); do
            sha1sum /dev/zero &
            pids="$pids $!";
        done
        sleep $seconds
    )
    echo "[$(date)] Done"
}

lc [email protected]
1
отвечен TJR 2016-06-22 19:59:30
источник

Вы можете использовать:

fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd

повторить dd if=/dev/zero of=/dev/null для ядер процессора.

нажмите любую клавишу, чтобы остановить тест.

1
отвечен Lyma Lyma 2018-06-27 09:59:42
источник

простая командная строка тоже:

x="x" ; while : ; do x=$x$x ; echo -n "." ; done
0
отвечен ott-- 2012-06-30 23:08:04
источник

pxz параллельная реализация xz.

pxz -9e /dev/zero --stdout >/dev/null должен сделать трюк, так как это довольно интенсивно.

If /dev/zero не достаточно быстро (вы заметили, что pxz получает I/O дросселированный) вы можете сделать pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null

новые версии xz есть --threads вариант, который является заменой pxz.

0
отвечен styrofoam fly 2018-11-07 23:11:11
источник

Другие вопрос performance debian benchmarking