はじめに
こんにちは! BFT名古屋支店・インフラ女子(?)の山口です。
すっかり冬らしくなってきました。この時期になると「一年が早すぎる~」というベタな会話を繰り返します。
ところで一つの案件で設計・構築・試験を行う時にいつも繰り返し検索するコマンドってありませんか?
毎日とか毎週使うようなものではないのだけれど、一年に一回は必ず使う、その時に検索して大体同じサイトを参考にする、というものがみなさんあるのではないでしょうか。
今回は試験でいつも使うけれど使い方をまったく覚えていないコマンドについて記載し、今後は自分の忘備録としてこのサイトを見るようにしようと思い、この記事を書きました。
リソース監視のテストを行う時、CPU使用率をあげるために使う「yesコマンド」についてです。
サクッとコマンドだけ結論として書くと
$ yes > /dev/null
/dev/nullで標準出力を捨ててます。Ctrl+Cで止めるまで終わりません。
コマンドだけと見出しで書いていますが、実行する前には必ず関係者に周知することを忘れないでください。この試験は他の試験と並行してできないためきちんとスケジューリングされた日時で行います。
またメールの通知先に「テストでアラートメールが飛ぶけど無視してね」とあらかじめ言っておかないとメールを受けた人が戸惑うのでその点でも注意が必要です。
多くのサイトだとこれだと負荷があまり上がらないので
yesコマンドをバックグラウンドで複数実行する、と記載されていますが、私はいつも一つのコマンド入力で十分です。これはCPUのコア数やソケット数に依存するのだと思います。
例えば3つyesコマンドを実行する場合は以下のようにします。バックグラウンドで実行しているので止めたい時はjobsコマンドで実行中のジョブを確認しkillコマンドを使います。
負荷をかけて
$ yes > /dev/null & $ yes > /dev/null & $ yes > /dev/null &
テストが問題なければ、止めるためにジョブを確認。
$ jobs [01] 実行中 yes > /dev/null & [02]- 実行中 yes > /dev/null & [03]+ 実行中 yes > /dev/null &
jobsコマンドの実行結果から実行したコマンドのジョブ番号(左端)を、killコマンドで%の後に指定します。
$ kill %1 %2 %3 [1] 終了しました yes > /dev/null [2]- 終了しました yes > /dev/null [3]+ 終了しました yes > /dev/null
コマンド実行した後は必ず確認しましょう。TerminatedとなっていればOKです。
$ jobs [01] Terminated yes > /dev/null [02]- Terminated yes > /dev/null [03]+ Terminated yes > /dev/null
そもそもの話 CPUやメモリに負荷をかけて試験をすべきか
私がSIのお仕事をするようになってオンプレのシステム構築をしていた時は「壊れたら困るから負荷かけないで」ということで意図的にCPUやメモリ使用率をあげてテストすることはほとんどなかったと記憶しています。
もちろんお客様によっても違うと思いますし案件によっても方針があるのでたまたま私が関わっていた案件にそういう方針が多かったのかもしれません。
では負荷をかけずにどうするのかというと、しきい値を下げて監視ができていること、しきい値を上回ったらアラート発報することを確認するのです。一度設定したものを変更するので再設定時に間違えるとか元に戻し忘れるとかそういった問題への対処は必要ですが、単に監視のテストをするだけならこれで十分です。
ではクラウドの案件だったら負荷をかけてテストしてもよいのでしょうか。個人的には直接的に見えないからと言って影響範囲が広がるのでやめた方がいい、と思っています。
少し話はずれますがWAN経由のネットワーク負荷試験はやるなみんなに迷惑だという記事を読んだことがあります。これは回線が共有であろうが占有であろうが帯域を消費することでどこかで必ず負荷がかかり知らない誰かに迷惑がかかるというもの。
それはわかっていてもお客様からの指示で、見積もったデータ量の2倍は耐えられることを確認しましたと報告しなきゃいけないこともあり、「どこかの誰かさん、本当にごめんなさい」と思いながら試験をしていたことがあります。
負荷はかけるなといいつつ、なぜこの記事を書いているかと言うと「しきい値を下げてテストする」が元々それほど高くないCPU使用率だと難しくコマンドを実行して負荷をかけざるを得ないためです。監視のアラート条件に適合するまで継続的にCPU使用率を少し上げる、というのも難しい。ユーザでクォータを設定して…などやり方はあると思いますが無駄に設定を追加することはできる限り避けたいのが心情。他に方法があったらどなたか教えていただきたい…(泣)
そのため、リソース監視だと他にメモリ使用率やディスク使用率の監視がありますが、私はこの二つに関しては基本的にしきい値を下げることでテストをするようにしています。
yesコマンドの便利な使い方
CPU使用率を上げることでしか使ったことがなかったのですが、yesコマンドとは「yと改行を実行し続けるコマンド」ということを初めて知りました。コマンド実行やインストール時のy入力を自動で行う時に使うということでなるほどーと思いました。むしろ負荷掛けで使う方がイレギュラーなんですねぇ。
終わりに
今回はいつも監視の試験の時に使うUNIX標準のコマンド「yes」について記載してみました。この一年に一回くらいは使うんだけどいつも検索しているコマンドは他にもたくさんあるのでまた書いていきたいと思います。