この記事は 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