1. sinsengumi

    Posted

    sinsengumi
Changes in title
+yes, stress コマンド
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,187 @@
+この記事は [Linux コマンド 全部オレ Advent Calendar 2017](https://adventar.org/calendars/2630) の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
+```