ОС

Как нагрузить процессор на 85%: точная нагрузка CPU в Linux

Пошаговое руководство по точной нагрузке процессора на заданный процент (85%) с помощью stress-ng и cpulimit. Примеры команд и мониторинг.

1 ответ 1 просмотр

Как нагрузить процессор на заданный процент загрузки, например 85%? Инструменты вроде stress и других нагружают CPU на 100%, как добиться точной нагрузки?

Чтобы нагрузить процессор на заданный процент загрузки (например, 85%) в Linux, используйте утилиту stress-ng с опцией --cpu-load 85 вместо стандартного stress, который всегда дает 100% нагрузки. Для ограничения уже запущенных процессов подойдет cpulimit с параметрами -l 85 -p PID. Точная нагрузка достигается за счет встроенных в stress-ng алгоритмов распределения вычислительных задач.


Содержание


Обзор инструментов для точной нагрузки CPU

Стандартный stress-ng без опций нагружает CPU на 100%, что не всегда подходит для тестирования. Для достижения точной процентной нагрузки нужны специализированные решения.

Stress-ng — современный инструмент с встроенной поддержкой точного ограничения нагрузки через --cpu-load. Он работает на всех ядрах системы или указанных процессорах.

Cpulimit — альтернатива, которая ограничивает нагрузку уже запущенных процессов. Полезен, когда нельзя перезапустить стресс-тест.

Для установки:

bash
sudo apt install stress-ng cpulimit

Stress-ng: реализация нагрузки на 85% с примерами

Stress-ng предоставляет опцию --cpu-load P для установки точного процента загрузки. Основные команды:

Базовая нагрузка на 85%

bash
stress-ng --cpu 0 --cpu-load 85 --timeout 60s
  • --cpu 0 — задействовать все ядра
  • --cpu-load 85 — целевая загрузка 85%
  • --timeout 60s — ограничение времени теста

Нагрузка на 4 ядрах с 80% загрузкой

bash
stress-ng --cpu 4 --cpu-load 80 --metrics --times
  • --cpu 4 — использовать 4 ядра
  • --metrics — вывод статистики
  • --times — измерение user time (≈ целевой загрузке)

Тонкая настройка алгоритма

bash
stress-ng --cpu 0 --cpu-load 85 --cpu-method fft --cpu-load-slice 100
  • --cpu-method fft — быстрое преобразование Фурье
  • --cpu-load-slice 100 — точность среза нагрузки

Важно: Реальная загрузка может отличаться на ±5-10% из-за планировщика системы. Для точных тестов используйте --times и смотрите в колонку %CPU в htop.


Cpulimit: ограничение нагрузки для уже запущенных процессов

Когда нужно ограничить нагрузку существующего процесса (например, stress):

bash
stress -c 1 & # Запуск stress на 1 ядро
sleep 1 # Даем время запуститься
cpulimit -p $(pidof stress) -l 85 # Ограничение на 85%

Пример для нескольких процессов

bash
# Запускаем 4 процесса stress
for i in {1..4}; do stress -c 1 & done

# Ограничиваем каждый до 85%
for pid in $(pgrep stress); do
 cpulimit -p $pid -l 85 &
done

Преимущества cpulimit:

  • Работает с любым процессом
  • Динамическое ограничение в реальном времени
  • Поддержка перезапуска при завершении процесса

Мониторинг и проверка реальной нагрузки процессора

Для точного контроля используйте комбинацию инструментов:

Визуальный мониторинг с htop

bash
htop
  • Смотрите колонку %CPU для каждого процесса
  • Строка “CPU bar” показывает общую нагрузку

Вывод статистики stress-ng

bash
stress-ng --cpu 0 --cpu-load 85 --timeout 10s --metrics --times

Пример вывода:

stress-ng: [12345] successfully set to 85% cpu load
stress-ng: [12345] run time: 9.98s, user time: 8.47s (84.9%)

Скрипт для автоматического мониторинга

bash
#!/bin/bash
stress-ng --cpu 0 --cpu-load 85 --timeout 60s &
STRESS_PID=$!

# Мониторинг каждые 2 секунды
while kill -0 $STRESS_PID 2>/dev/null; do
 echo "$(date): Общая нагрузка CPU: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *([0-9.]*)%* id.*/\1/" | awk '{print 100 - $1}')%"
 sleep 2
done

Расширенные опции и автоматизация нагрузки

Распределение нагрузки по конкретным ядрам

bash
# Нагрузка на ядра 0 и 2
stress-ng --cpu 2 --cpu-load 90 --taskset 0,2

Скрипт для плавного изменения нагрузки

bash
#!/bin/bash
for load in 50 70 85 95; do
 echo "Установка нагрузки $load%"
 stress-ng --cpu 0 --cpu-load $load --timeout 10s --metrics
 sleep 5
done

Использование Python для динамического контроля

python
import subprocess
import time

def set_cpu_load(percent):
 subprocess.run(['stress-ng', '--cpu', '0', '--cpu-load', str(percent), '--timeout', '10s'])

# Пример плавного нарастания
for load in range(30, 91, 10):
 set_cpu_load(load)
 time.sleep(5)

Тонкая настройка и решение проблем

Проблема: Реальная нагрузка отличается от заданной

Решения:

  1. Укажите --cpu-method fft для более стабильного алгоритма
  2. Используйте --cpu-load-slice 100 для точности среза
  3. Запустите от root: sudo stress-ng --cpu 0 --cpu-load 85

Проблема: Нагрузка неравномерно распределена

bash
# Принудительное равномерное распределение
stress-ng --cpu 0 --cpu-load 85 --cpu-method matrix

Проблема: Система перегревается

bash
# Снижение нагрузки при перегреве
while true; do
 TEMP=$(sensors | grep 'Core 0' | awk '{print $3}' | cut -d'.' -f1)
 if [ $TEMP -gt 80 ]; then
 cpulimit -p $(pgrep stress) -l 50
 else
 cpulimit -p $(pgrep stress) -l 85
 fi
 sleep 10
done

Влияние частоты процессора

Для тестирования при разных частотах:

bash
# Переключение в режим производительности
sudo cpupower frequency-set --governor performance

# Переключение в режим энергосбережения
sudo cpupower frequency-set --governor powersave

Источники

  1. Официальная документация stress-ng — Подробное описание опций --cpu-load и --cpu-method: https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html
  2. Debian stress-ng manpage — Примеры использования --cpu-load для разных ядер: https://manpages.debian.org/testing/stress-ng/stress-ng.1.en.html
  3. Stack Overflow: точная нагрузка CPU — Ответы от авторов stress-ng: https://serverfault.com/questions/796225/stress-ng-simulate-specific-cpu-percentages
  4. Ubuntu Wiki: stress-ng — Руководство по мониторингу с --metrics: https://wiki.ubuntu.com/Kernel/Reference/stress-ng
  5. SuperUser: альтернативы stress — Сравнение stress-ng и cpulimit: https://superuser.com/questions/668306/control-linux-cpu-load-for-testing
  6. GeeksforGeeks: стресс-тесты в Linux — Базовые примеры --cpu-load: https://www.geeksforgeeks.org/linux-unix/how-to-impose-high-cpu-load-and-stress-test-on-linux-using-stress-ng-tool/
  7. AskUbuntu: ограничение нагрузки до 80% — Использование cpulimit: https://askubuntu.com/questions/876681/how-to-make-cpu-utilization-only-till-80
  8. Stack Overflow: стресс-ng не достигает 100% — Советы по балансировке нагрузки: https://stackoverflow.com/questions/67062711/stress-ng-not-reaching-100-cpu-load

Заключение

Для точной нагрузки процессора на заданный процент (например, 85%) в Linux оптимально использовать stress-ng с опцией --cpu-load 85. Этот инструмент позволяет контролировать нагрузку на всех ядрах или отдельных процессорах с минимальным отклонением ±5-10%. Альтернативой является cpulimit, который ограничивает уже запущенные процессы. Всегда проверяйте реальную нагрузку с помощью htop или встроенных метрик stress-ng (--metrics), особенно для критически важных тестов производительности. Для автоматизации используйте скрипты с динамической коррекцией нагрузки на основе системных показателей.

Авторы
Проверено модерацией