Create cpu_strees.sh
This commit is contained in:
84
cpu_strees.sh
Normal file
84
cpu_strees.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Функция для аварийного завершения
|
||||||
|
cleanup() {
|
||||||
|
echo -e "\n[!] Аварийная остановка... Завершаем все процессы."
|
||||||
|
pkill -P $$ # Убиваем все дочерние процессы
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup SIGINT SIGTERM # Перехватываем Ctrl+C
|
||||||
|
|
||||||
|
# Числа Фибоначчи (рекурсия + большие числа)
|
||||||
|
fib() {
|
||||||
|
local n=$1
|
||||||
|
if (( n <= 1 )); then
|
||||||
|
echo $n
|
||||||
|
else
|
||||||
|
echo $(( $(fib $((n-1))) + $(fib $((n-2))) ))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Тяжёлые вычисления с плавающей точкой (симуляция БПФ)
|
||||||
|
floating_point_stress() {
|
||||||
|
local i
|
||||||
|
for (( i=0; i<500; i++ )); do
|
||||||
|
awk 'BEGIN {
|
||||||
|
sum = 0
|
||||||
|
for (j=0; j<1000; j++) {
|
||||||
|
sum += sin(j) * cos(j) / (sqrt(j+1) + 0.0001)
|
||||||
|
}
|
||||||
|
}' >/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Генерация SHA-256 хешей
|
||||||
|
hash_stress() {
|
||||||
|
local str="CPU_STRESS_TEST_$RANDOM"
|
||||||
|
for (( i=0; i<1000; i++ )); do
|
||||||
|
echo "$str$i" | sha256sum >/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверка простых чисел (упрощённый тест)
|
||||||
|
is_prime() {
|
||||||
|
local n=$1
|
||||||
|
if (( n < 2 )); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
for (( i=2; i*i<=n; i++ )); do
|
||||||
|
if (( n % i == 0 )); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
prime_stress() {
|
||||||
|
local i
|
||||||
|
for (( i=2; i<5000; i++ )); do
|
||||||
|
is_prime $i
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Запуск нагрузочных тестов в параллельных подпроцессах
|
||||||
|
run_stress_test() {
|
||||||
|
echo "[+] Запуск сложного CPU-теста (алгоритмы: Фибоначчи, плавающая арифметика, SHA-256, простые числа)..."
|
||||||
|
echo "[!] Нажмите Ctrl+C для остановки."
|
||||||
|
|
||||||
|
# Запускаем нагрузку на всех ядрах
|
||||||
|
for (( core=0; core<$(nproc); core++ )); do
|
||||||
|
(
|
||||||
|
while true; do
|
||||||
|
fib 20 >/dev/null
|
||||||
|
floating_point_stress
|
||||||
|
hash_stress
|
||||||
|
prime_stress
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
done
|
||||||
|
|
||||||
|
wait # Ждём завершения (никогда не произойдёт, пока не нажмём Ctrl+C)
|
||||||
|
}
|
||||||
|
|
||||||
|
run_stress_test
|
||||||
Reference in New Issue
Block a user