Linux 서버에서 CPU로드를 생성하는 방법


13

서버에서 가짜로드를 테스트하고 싶습니다. 시스템에서 CPU로드를 생성하는 번인 또는 벤치 마크 명령 줄 유틸리티를 찾고 있습니다.

CPU (하드 디스크로드, 네트워크 및 공동 없음) 만 레코딩 할 수 있고로드 실행 기간을 설정할 수 있기를 원합니다. 나는 시스템에서 10 분 동안 CPU로드를 실행할 수있는 것을 원한다는 것을 의미합니다.

어떤 아이디어?

답변:



6

부동 소수점 연산을 선호합니다.

for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done

CPU 번호를 알고 있어야합니다 :-)


이걸 어떻게 할 수 time있습니까?
Sébastien

2

이것은 내가 자주하고 싶은 일입니다. 그러나 나는 그것을하는 좋은 방법이 없습니다. 원하는만큼 몇 초 동안 반복되는 작은 Perl 스크립트를 작성합니다.

예 : 10 분 동안 :

perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $j *= 1.1 for (1..9999); }'

물론 n 개의 프로세서 가 있다면 bash 루프를 추가하여 많은 프로세스를 생성 할 수 있습니다.

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait

4
사소한 점 : for루프가 병렬이 아니라 직렬로 실행 되지 않습니까? 그래도 (perl -e '...' &)쉘에서 분리하면 작업을 수행 할 것이라고 생각합니다.
SmallClanger

네가 옳아. 내 게시물을 수정하겠습니다. 지적 해 주셔서 감사합니다.
PP.



1

여기 에 비슷한 질문에 대한 답변으로 이미 게시 한 순수한 쉘 (적어도 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
  )
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.