Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

yes, stress コマンド

この記事は Linux コマンド 全部オレ Advent Calendar 2017 の18日目の記事です。

yes

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

       --help display this help and exit

       --version
              output version information and exit

       GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report yes translation
       bugs to <http://translationproject.org/team/>

指定した文字列をひたすら出力するコマンド。負荷試験やインタラクティブに「y/N」を求められる場面で利用する。

CPU 負荷をかける

[sinsengumi ~]$ yes > /dev/null
[sinsengumi ~]$ top
top - 11:04:00 up 11 days, 19:39,  3 users,  load average: 0.70, 0.34, 0.17
Tasks:  99 total,   2 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 99.3 us,  0.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

標準出力を /dev/null にリダイレクトしないと、1 CPU を使い切るほどは負荷はかからない。
/dev/null にリダイレクトすると、画面描写が無いので超高速で、CPU が働きまくるらしい)

論理 CPU が複数ある場合は、バックグラウンドで複数動かせばよい。

メモリに負荷をかける

[sinsengumi ~]$ /dev/null < $(yes)

[sinsengumi ~]$ free -h -s 3
              total        used        free      shared  buff/cache   available
Mem:           3.7G        275M        2.1G        624K        1.3G        3.1G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           3.7G        349M        2.1G        624K        1.3G        3.0G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           3.7G        646M        1.8G        624K        1.3G        2.7G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           3.7G        953M        1.5G        624K        1.3G        2.4G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.2G        1.2G        624K        1.3G        2.1G
Swap:          4.0G          0B        4.0G

3秒間隔で free すると available がどんどん減っていくのがわかる。

ちなみに、ずっとやっているとスワップ領域まで使い始めるかと思ったが、その前に以下のようなエラーが出て止まってしまった。

-bash: xrealloc: cannot allocate 18446744071562067968 bytes (1392640 bytes allocated)

stress

NAME
       stress - tool to impose load on and stress test systems

SYNOPSIS
       stress [OPTION [ARG]] ...

DESCRIPTION
       `stress' imposes certain types of compute stress on your system

Switch User.

CPU(ユーザ)に負荷をかける

--cpu で起動するプロセス数を指定する。中身は sqrt 関数を実行している。

[sinsengumi ~]$ stress --cpu 2
stress: info: [20622] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

[sinsengumi ~]$ top
top - 11:34:10 up 11 days, 20:09,  3 users,  load average: 0.87, 0.38, 0.25
Tasks: 100 total,   3 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu0  : 99.7 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3881668 total,  2231112 free,   284220 used,  1366336 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.  3239072 avail Mem

   PID USER        PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 20677 sinsengumi  20   0    7260     96      0 R  99.3  0.0   0:14.71 stress
 20678 sinsengumi  20   0    7260     96      0 R  99.3  0.0   0:14.67 stress

CPU(システム)に負荷をかける

--io で起動するプロセス数を指定する。中身は sync コマンドを実行している。

[sinsengumi ~]$ stress --io 2
stress: info: [20890] dispatching hogs: 0 cpu, 2 io, 0 vm, 0 hdd

[sinsengumi ~]$ top
top - 11:38:34 up 11 days, 20:13,  3 users,  load average: 0.79, 0.48, 0.33
Tasks: 100 total,   3 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,100.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,100.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3881668 total,  2232128 free,   283160 used,  1366380 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.  3240240 avail Mem

   PID USER        PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 20941 sinsengumi  20   0    7260     96      0 R  96.8  0.0   0:11.72 stress
 20942 sinsengumi  20   0    7260     96      0 R  96.8  0.0   0:11.83 stress

メモリーに負荷をかける

--vm で起動するプロセス数を指定する。中身は malloc, free 関数を繰り返し実行している。
--vm-bytes で確保するメモリを指定する。また、デフォルトでは malloc, free を繰り返すので、--vm-keep を指定すると、free を行わず確保したままにしてくれる。

[sinsengumi ~]$ stress --vm 2 --vm-bytes 1G --vm-keep
stress: info: [21808] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hdd

[sinsengumi ~]$ top
top - 11:55:40 up 11 days, 20:30,  3 users,  load average: 0.00, 0.08, 0.20
Tasks:  99 total,   1 running,  98 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3881668 total,   130672 free,  2383972 used,  1367024 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.  1139364 avail Mem

   PID USER        PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 21809 sinsengumi  20   0 1055840 1.000g    184 S   0.0 27.0   0:00.48 stress
 21810 sinsengumi  20   0 1055840 1.000g    184 S   0.0 27.0   0:00.47 stress

ディスク IO(CPU wait)に負荷をかける

--io で起動するプロセス数を指定する。中身は write, unlink 関数を繰り返し実行している。
デフォルトでは、各プロセス 1GB ずつ書き込みを行う。

[sinsengumi ~]$ stress --hdd 2
stress: info: [22803] dispatching hogs: 0 cpu, 0 io, 0 vm, 2 hdd

[sinsengumi ~]$ top
top - 12:06:17 up 11 days, 20:41,  3 users,  load average: 0.52, 0.84, 0.63
Tasks: 111 total,   3 running, 108 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us, 52.4 sy,  0.0 ni,  6.1 id, 41.2 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.3 us, 58.4 sy,  0.0 ni,  3.4 id, 37.8 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3881668 total,  2693320 free,   114276 used,  1074072 buff/cache
KiB Swap:  4194300 total,  4088112 free,   106188 used.  3518900 avail Mem

   PID USER        PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 22804 sinsengumi  20   0    8164   1120    120 R  46.2  0.0   0:03.15 stress
 22805 sinsengumi  20   0    8164   1120    120 D  45.2  0.0   0:03.32 stress

[sinsengumi ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        40G  5.3G   35G  14% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  624K  1.9G   1% /run
[sinsengumi ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        40G  7.3G   33G  19% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  624K  1.9G   1% /run
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?