
나는 현재 진행 중입니다.Cacti 설치 디버깅CPU 사용률 그래프를 디버깅하기 위해 CPU 로드를 생성하려고 합니다.
나는 간단히 실행하려고 시도했는데 cat /dev/zero > /dev/null
훌륭하게 작동하지만 코어 1개만 사용합니다.
로드 중인 시스템 리소스를 테스트/최대화하는 더 나은 방법이 있습니까?
답변1
노력하다stress
이는 Windows와 거의 동일합니다 consume.exe
.
oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
답변2
추가 패키지를 설치할 필요가 없습니다. 오래된 쉘만으로도 이 작업을 수행할 수 있습니다.
이 한 줄짜리 코드는 4개의 코어 1을 100%로 로드합니다.
for i in 1 2 3 4; do while : ; do : ; done & done
작동 방식은 매우 간단합니다. 4개의 끝없는 루프를 시작합니다. 각각은 널 명령어( :
)를 반복하고 있습니다. 각 루프는 CPU 코어를 100% 로드할 수 있습니다.
bash
, ksh93
및 범위를 지원하는 다른 쉘(예: not dash
또는 이전 )을 사용하는 경우 ksh
다음과 같은 비이식성 구문을 사용할 수 있습니다.
for i in {1..4}; do ...
4
와 다른 경우 로드하려는 CPU 수로 바꾸세요 4
.
이러한 루프 중 하나를 시작할 때 이미 실행 중인 백그라운드 작업이 없다고 가정하면 해당 명령을 사용하여 로드 생성을 중지할 수 있습니다.
for i in 1 2 3 4; do kill %$i; done
@underscore_d의 의견에 응답하면 로드 중지를 많이 단순화하고 시간 제한(기본값 60초)을 지정할 수 있는 향상된 버전이 있습니다. A Control- 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
)
}
1 코어당 둘 이상의 스레드(하이퍼스레딩)를 지원하는 CPU의 경우 OS는 모든 가상 CPU에 로드를 전달합니다. 이 경우 로드 동작은 구현에 따라 다릅니다(각 스레드는 100% 사용 중인지 여부로 보고될 수 있음). .
답변3
한 가지 대체 방법은 다음과 같습니다.
openssl speed -multi $(grep -ci processor /proc/cpuinfo)
또는 (nproc이 있는 경우)
openssl speed -multi $(nproc --all)
OpenSSL은 요즘 배포판에 거의 항상 존재하므로 추가 패키지가 필요하지 않습니다.
답변4
2개를 시작하세요
sha1sum /dev/zero &
시스템의 모든 코어에 대한 명령.
그만하다
killall sha1sum
또는
kill sha1sum