サーバーの性能を確認する際や、コマンドを試す場合などにCPU・メモリ・ディスクに負荷をあえてかけることがあります。
その際に使えるコマンドを解説します。
stressコマンドがよく使われますが、インストールできないケースもあるので
今回は使わずに標準のコマンドを利用します。
- 負荷をかけるコマンドが使えるようになる
モグモグさん
実際に手を動かしながらやってみると理解が深まりますので
やってみてください。
実行
上記のマークの箇所は実際にコマンドを入力しましょう。
負荷をかけるコマンドなので、実行しても問題ない環境で行い
実行前に停止コマンドを確認してから行いましょう。
Linux(CentOS)環境を準備
まずは手元で試すための環境を作成します。
モグモグさん
環境がすでにある方や手元で試す必要がない方は、スキップしてください。
こちらの記事を参考に、CentOSの環境を作成しましょう。
Bashを起動
下記コマンドを実行し、Bashを起動しましょう。
$ docker run -it --rm centos /bin/bash
モグモグさん
これで準備完了です!
exit
と入力すれば、bashから抜けます。
CPUへの負荷
CPUへの負荷をあげるには、yesコマンドを使います。
下記コマンドを実行すると永遠とyesが出力されると思います。
$ yes
// Ctrl + c で停止
yesの後に任意の文字列を出力することも可能です。
$ yes HI
// Ctrl + c で停止
yesコマンドは、yesを連続で出力するコマンドです。
パッケージをインストールする際にyes/no(y/N)を聞かれる場面があると思いますが
それを自動化できます。
e.g.
$ yes | yum install package
それでは、CPU負荷をあげるコマンドを実行していきましょう。
実行
$ yes > /dev/null &
// jobs $(kill -p)で全て停止
yesコマンドの出力を、/dev/null
に連続でリダイレクトすることでCPUの使用率を高めることが可能です。
負荷を上げたい場合は、同じコマンドを複数実行しましょう。
モグモグさん
jobs $(kill -p)
で停止できるので、忘れないようにしましょう。
CentOSのDockerイメージには入っていませんが、opensslコマンドのワンライナーを利用することで
CPUの数に合わせて100%使うことが可能です。
$ openssl speed -multi grep processor /proc/cpuinfo | wc -l
こちらも参考にしてください。
メモリへの負荷
メモリへの負荷も同様にyesコマンドを使います。
今回は出力ではなく、入力をリダイレクトします。
実行
$ /dev/null < $(yes) &
// jobs $(kill -p)で全て停止
モグモグさん
こちらも同様に
jobs $(kill -p)
で停止できるので、忘れないようにしましょう。
ディスクへの負荷
ディスクへの負荷は、ddコマンドを利用します。
ddコマンドは、ファイルの変換やコピーを行うコマンドです。
いろいろな用途がありますが、主にバックアップやディスクのコピーなどに使われます。
また、書き込みの速度を調べるなんかにも使われます。
ディスクの負荷をあげるには、ダミーのファイルを作成してあげればいいので下記のコマンドを実行します。
実行
$ dd if=/dev/zero of=test bs=1M count=300 oflag=direct
これで、1MBのファイルを300回、testに書き込みを行うという意味になります。
directを指定することで、キャッシュを利用せずに書き込んでいます。
モグモグさん
実行最中などに、ディスクI/Oを確認すると負荷が上昇していることがわかります。
ファイルサイズや数などは皆さんの環境で調節してみてください。
まとめ
標準コマンドで、CPU・メモリ・ディスクに負荷をかけるコマンドを解説しました。
最後に紹介したコマンドをまとめておきます。
- CPU:
yes > /dev/null
- メモリ:
/dev/null < $(yes)
- ディスク:
dd if=/dev/zero of=test bs=1M count=300 oflag=direct