stress-ng will stress test a computer system in various selectable ways. It was designed to exercise various physical subsystems of a computer as well as the various operating system kernel interfaces. Stress-ng features:
stress-ng was originally intended to make a machine work hard and trip hardware issues such as thermal overruns as well as operating system bugs that only occur when a system is being thrashed hard. Use stress-ng with caution as some of the tests can make a system run hot on poorly designed hardware and also can cause excessive system thrashing which may be difficult to stop.
stress-ng can also measure test throughput rates; this can be useful to observe performance changes across different operating system releases or types of hardware. However, it has never been intended to be used as a precise benchmark test suite, so do NOT use it in this manner.
Running stress-ng with root privileges will adjust out of memory settings on Linux systems to make the stressors unkillable in low memory situations, so use this judiciously. With the appropriate privilege, stress-ng can allow the ionice class and ionice levels to be adjusted, again, this should be used with care.
stress-ng is free and will always be free. Sponsoring the project is a great way to help pay for the running costs (hardware, power, etc) to support the development process.
Sponsor link: https://github.com/sponsors/ColinIanKing
docker run --rm ghcr.io/colinianking/stress-ng --help
or
docker run --rm colinianking/stress-ng --help
Recent versions of stress-ng are available in the Ubuntu stress-ng ppa for various Ubuntu releases:
https://launchpad.net/~colin-king/+archive/ubuntu/stress-ng
sudo add-apt-repository ppa:colin-king/stress-ng
sudo apt update
sudo apt install stress-ng
To build, the following libraries will ensure a fully functional stress-ng build: (note libattr is not required for more recent disto releases).
Debian, Ubuntu:
RHEL, Fedora, Centos:
RHEL, Fedora, Centos (static builds):
SUSE: * gcc gcc-c++ eigen3-devel keyutils-devel libaio-devel libapparmor-devel libatomic1 libattr-devel libbsd-devel libcap-devel libgbm-devel libglvnd-devel libjpeg-turbo libkmod-devel libmd-devel libseccomp-devel lksctp-tools-devel mpfr-devel xxhash-devel zlib-devel
Alpine Linux: * build-base eigen-dev jpeg-dev judy-dev keyutils-dev kmod-dev libacl-dev libaio-dev libatomic libattr libbsd-dev libcap-dev libmd-dev libseccomp-dev lksctp-tools-dev mesa-dev mpfr-dev xxhash-dev zlib-dev
NOTE: the build will try to detect build dependencies and will build an image with functionality disabled if the support libraries are not installed.
At build-time stress-ng will detect kernel features that are available on the target build system and enable stress tests appropriately. Stress-ng has been build-tested on Ubuntu, Debian, Debian GNU/Hurd, Slackware, RHEL, SLES, Centos, kFreeBSD, OpenBSD, NetBSD, FreeBSD, Debian kFreeBSD, DragonFly BSD, OS X, Minix, Solaris 11.3, OpenIndiana and Hiaku. Ports to other POSIX/UNIX like operating systems should be relatively easy.
NOTE: ALWAYS run make clean after fetching changes from the git repository
to force the build to regenerate the build configuration file. Parallel builds using
make -j are supported.
To build on BSD systems, one requires gcc and GNU make:
CC=gcc gmake clean
CC=gcc gmake
To build on OS X systems, just use:
make clean
make
To cross build for OpenRisc (OR1K), install the cross compiler and use static builds:
export PATH=$PATH:$HOME/or1k/or1k-none-linux-musl/bin
export CC=or1k-none-linux-musl-gcc
STATIC=1 make
To build on MINIX, gmake, binutils and clang are required:
CC=clang LD=clang gmake clean
CC=clang LD=clang gmake
To build on SunOS, one requires GCC and GNU make, build using:
CC=gcc gmake clean
CC=gcc gmake
To build on Dilos, one requires GCC and GNU make, build using:
CC=gcc gmake clean
CC=gcc gmake
To build on Haiku R1/beta5:
# GCC
make clean
make
# Clang
CC=clang make clean
CC=clang make
To build a static image (example, for Android), use:
# path to Android NDK
# get NDK from https://developer.android.com/ndk/downloads
export NDK=$HOME/android-ndk-r27c
export PATH=$PATH:$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
export TARGET=aarch64-linux-android
# Define Android API level
export API=27
export CC=$TARGET$API-clang
make clean
STATIC=1 make
To build with the Tiny C compiler:
make clean
CC=tcc make
To build with the PCC portable C compiler use:
make clean
CC=pcc make
To build with the musl C library:
make clean
CC=musl-gcc
To build with the Intel C compiler icc use:
make clean
CC=icc make
To build with the Intel C compiler icx use:
make clean
CC=icx make
To perform a cross-compilation using gcc, use a static build, specify the toolchain (both CC and CXX). For example, a mips64 cross build:
make clean
STATIC=1 CC=mips64-linux-gnuabi64-gcc CXX=mips64-linux-gnuabi64-g++ make -j $(nproc)
To perform a cross-compilation for QNX 7.1, for example, an aarch64 QNX cross build:
make clean
CC=aarch64-unknown-nto-qnx7.1.0-gcc CXX=aarch64-unknown-nto-qnx7.1.0-g++ STATIC=1 make
To perform a cross-compilation for QNX 8, for example, an aarch64 QNX cross build:
make clean
CC=aarch64-unknown-nto-qnx8.0.0-gcc CXX=aarch64-unknown-nto-qnx8.0.0-g++ make
To use clang-scan for static analysis (e.g. using clang-21):
make clean
CC=clang-21 make -f Makefile.config -j $(nproc)
CC=scan-build-21 make
To generate a PDF version of the manual (requires ps2pdf to be installed)
make pdf
Build option: DEBUG, build with debug (-g) enabled:
make clean
DEBUG=1 make
Build option: BUILD_SMALL, build small (unoptimized) executable
make clean
BUILD_SMALL=1 make
Build option: LTO, Link Time Optimization (~1-2% performance improvement on compute stressors):
make clean
LTO=1 make
Build option: PEDANTIC, enable pedantic build flags:
make clean
PEDANTIC=1 make
Build option: GARBAGE_COLLECT, warn of unused code:
make clean
GARBAGE_COLLECT=1 make
Build option: UNEXPECTED=1, warn of unexpected #ifdef'd out code:
make clean
UNEXPECTED=1 make
Build option: SOURCE_DATE_EPOCH=seconds since epoch, add build date
make clean
SOURCE_DATE_EPOCH=1750685870 make
Build option: EXTRA_BUILDINFO=1, add CFLAGS, CXXFLAGS and LDFLAGS to --buildinfo option NOTE: This can lead to build information being leaked and is not recommended for any distro releases.
make clean
EXTRA_BUILDINFO=1 make -j 10
Send patches to colin.i.king@gmail.com or merge requests at https://github.com/ColinIanKing/stress-ng
The Ubuntu stress-ng reference guide contains a brief overview and worked examples.
Run 8 CPU stressors for 60 seconds:
stress-ng --cpu 8 --timeout 60
stress-ng: info: [184401] setting to a 1 min run per stressor
stress-ng: info: [184401] dispatching hogs: 8 cpu
stress-ng: info: [184401] skipped: 0
stress-ng: info: [184401] passed: 8: cpu (8)
stress-ng: info: [184401] failed: 0
stress-ng: info: [184401] metrics untrustworthy: 0
stress-ng: info: [184401] successful run completed in 1 min
Run 8 CPU stressors for 2 minutes, just using the square root CPU stressor method and show compute metrics:
stress-ng --cpu 8 --timeout 2m --cpu-method sqrt --metrics
stress-ng: info: [184135] setting to a 2 mins run per stressor
stress-ng: info: [184135] dispatching hogs: 8 cpu
stress-ng: metrc: [184135] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s CPU used per RSS Max
stress-ng: metrc: [184135] (secs) (secs) (secs) (real time) (usr+sys time) instance (%) (KB)
stress-ng: metrc: [184135] cpu 1531429 120.00 916.87 0.28 12762.02 1669.78 95.54 3148
stress-ng: info: [184135] skipped: 0
stress-ng: info: [184135] passed: 8: cpu (8)
stress-ng: info: [184135] failed: 0
stress-ng: info: [184135] metrics untrustworthy: 0
stress-ng: info: [184135] successful run completed in 2 mins
Run 8 CPU stressors for 60 seconds and report thermal zone temperatures
stress-ng --cpu 8 --timeout 60 --tz
stress-ng: info: [184291] setting to a 1 min run per stressor
stress-ng: info: [184291] dispatching hogs: 8 cpu
stress-ng: info: [184291] cpu:
stress-ng: info: [184291] B0D4 96.05 C (369.20 K)
stress-ng: info: [184291] INT3400_Thermal 20.00 C (293.15 K)
stress-ng: info: [184291] SEN1 41.05 C (314.20 K)
stress-ng: info: [184291] acpitz 96.00 C (369.15 K)
stress-ng: info: [184291] iwlwifi_1 28.00 C (301.15 K)
stress-ng: info: [184291] pch_skylake 62.50 C (335.65 K)
stress-ng: info: [184291] x86_pkg_temp 73.25 C (346.40 K)
stress-ng: info: [184291] skipped: 0
stress-ng: info: [184291] passed: 8: cpu (8)
stress-ng: info: [184291] failed: 0
stress-ng: info: [184291] metrics untrustworthy: 0
stress-ng: info: [184291] successful run completed in 1 min
Run 4 CPU, 2 virtual memory, 1 disk and 8 fork stressors for 2 minutes and print measurements:
stress-ng --cpu 4 --vm 2 --hdd 1 --fork 8 --timeout 2m --metrics
stress-ng: info: [573366] setting to a 120 second (2 mins, 0.00 secs) run per stressor
stress-ng: info: [573366] dispatching hogs: 4 cpu, 2 vm, 1 hdd, 8 fork
stress-ng: info: [573366] successful run completed in 123.78s (2 mins, 3.78 secs)
stress-ng: info: [573366] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s CPU used per
stress-ng: info: [573366] (secs) (secs) (secs) (real time) (usr+sys time) instance (%)
stress-ng: info: [573366] cpu 515396 120.00 453.02 0.18 4294.89 1137.24 94.42
stress-ng: info: [573366] vm 2261023 120.01 223.80 1.80 18840.15 10022.27 93.99
stress-ng: info: [573366] hdd 367558 123.78 10.63 11.67 2969.49 16482.42 18.02
stress-ng: info: [573366] fork 598058 120.00 68.24 65.88 4983.80 4459.13 13.97
Run a mix of 4 I/O stressors and check for changes in disk S.M.A.R.T. metadata:
sudo stress-ng --iomix 4 --smart -t 30s
stress-ng: info: [1171471] setting to a 30 second run per stressor
stress-ng: info: [1171471] dispatching hogs: 4 iomix
stress-ng: info: [1171471] successful run completed in 30.37s
stress-ng: info: [1171471] Device ID S.M.A.R.T. Attribute Value Change
stress-ng: info: [1171471] sdc 01 Read Error Rate 88015771 71001
stress-ng: info: [1171471] sdc 07 Seek Error Rate 59658169 92
stress-ng: info: [1171471] sdc c3 Hardware ECC Recovered 88015771 71001
stress-ng: info: [1171471] sdc f1 Total LBAs Written 481904395 877
stress-ng: info: [1171471] sdc f2 Total LBAs Read 3768039248 5139
stress-ng: info: [1171471] sdd be Temperature Difference 3670049 1
Benchmark system calls using the VDSO: ``` stress-ng --vdso 1 -t 5 --metrics stress-ng: info: [1171584] setting to a 5 second run per stressor stress-ng: info: [1171584] dispatching
$ claude mcp add stress-ng \
-- python -m otcore.mcp_server <graph>