データベース技術調査ブログ

LinuxやPostgreSQL、Oracleデータベース、AWSの知識をアウトプットしていきます

【nmon】LinuxのOS性能取得ツール nmon 試してみたら便利だった

最近、LinuxでOS性能を取得したいよねって話になりまして、いろいろ調査しました。レポ―ト(Excelがよさげ)を出したいというゴールがあったので、なんかめんどくさいな~って思っていたらいいツール nmon にたどり着きました!


今回は備忘もかねて nmon の使い方(導入からレポート作成までの手順)を残しておきます(*^▽^*)
nmon for Linux | Main / HomePage

nmonとは

もともとIBMの内部プロジェクトとして作られて、2009年の7月にGPLライセンスのもとオープンソース化されたツールです。
オープンソースなのでソースコードも公開されていますが、サクッと利用する文にはコンパイル済みのもあるので、それを使いましょう。
安定板のバージョンならほぼほぼ有名どころのディストリビューションは用意されている感じでした(^^♪


# 自分が使用したいディストリビューションコンパイル済みのものがあるかはダウンロードサイトで確認してください。
nmon for Linux | Site / Download


自分的にはnmon analyzerでファイル出力まで楽にできる点が◎です!


それでは実際にインストールした流れを残しておきます。


nmonのインストール

今回はOracle Databaseで性能情報を取得することになったのでOracle Linuxで動かしてみます。
今回は手元にあったOracle Linux 7.7に導入しました。

########################################
# nmonの導入
########################################

# SCPでコンパイル済みのソースコードを配置する方法
# 以下のサイトからダウンロードする(GPLライセンス)
# http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
# 今回は「nmon16h_helpsystems_v2.tar.gz」を導入 (RHEL系のOracle Linux 7をサポート)


# rootユーザで実施(sudoの場合は頭にsudoつけて実施)
# 解凍先は別に/usr/local/srcじゃなくて/tmpや/var/tmpでもOK
cd /usr/local/src
pwd

ls -l *nmon*
# SCPでアップロード
ls -l *nmon*
ls -l nmon16h_helpsystems_v2.tar.gz

# 展開の流れを見たいときはtar zxvfで解凍(デバッグモード的なイメージ)
tar zxf nmon16h_helpsystems_v2.tar.gz
ls -l *nmon*
ls -l nmon_x86_64_oel7

# 対応するディストリビューションのファイルの実行権限を変更
# 今回は「nmon_x86_64_oel7」
chmod 755 nmon_x86_64_oel7

# /usr/local/binなどを使う場合は以下のように直接コピーすればOK
cp nmon_x86_64_oel7 /usr/local/bin/nmon



# 上記でインストールは完了

簡単ですね(^^♪


動作確認

それではいじってみましょう!
対話モードとファイル出力モードがあります。
ファイル出力モードはバックグラウンドで実施されるのでシェル化してベンチマークの実行前に組み込んであげることもできます!

########################################
# nmonの動作確認
########################################

# 動作確認として対話モードで起動(cやmやd等を押してみたりして動作確認。qで終了)
nmon


# nmon analyzer用のデータを生成(カレントディレクトリに出力)
# -fオプションでcsv出力する
# -sオプションで取得間隔を指定
# -cオプションで取得回数を指定
# (-s10 -c360で10秒間間隔で360回→1時間)
# -tオプションでtopコマンドの結果も取得する

# 試しに5秒間隔で6回取得する(30秒)
cd /var/tmp; pwd
ls -l *.nmon

nmon -f -s 5 -c6 -t
sleep 30

# 出力ファイルを確認(<ホスト名>_YYMMDD_hhmm.nmon)
ls -ltr *.nmon
ls -ltr /var/tmp/*.nmon

# FTPなりSCPでダウンロード


対話モードのスクリーンショットはこんな感じです。

f:id:jimatomo:20191225235136p:plain
nmonの対話モードのヘルプ画面


f:id:jimatomo:20191225235201p:plain
nmonの対話モードの性能出力画面


ちなみに無風状態です(´Д⊂ヽ


nmon analyzerでレポート作成

それではさっそく先ほどダウンロードしたnmonファイルからグラフを作成してみましょう。

①nmon analyzerは以下のサイトからダウンロードする
 nmon for Linux | Site / Nmon-Analyser

②解凍してマクロ有効化excelファイルを開く(nmon analyser v65.xlsm)

f:id:jimatomo:20191225235907p:plain
nmon analyzerの画面

③マクロを有効化して「Analyze nmon data」マクロのボタンをクリックする
 # 最初怪しげなログイン画面的なのがでてきて、おや!?って感じでそっ閉じしましたが、外部ソースだかリンク先が無効だとかを無視しまくり、再びマクロのボタンをクリックしたらファイル選択ダイアログがでてきました。なんか怪しい動きするのはやめてほしい(;^ω^)

④先ほどダウンロードしたnmonファイルを選択してレポートのxlsxファイルの保存先も指定すれば完了

f:id:jimatomo:20191225235936p:plain
レポートがでてきました!

無事いろいろ表示されました。


最後に

他にも性能取得するツールはいっぱいあると思いますが、一つの選択肢としていい感じだと思います。

もっとモダンなnjmonもあるみたいです。jsonで出力してくれるのでプログラムに優しい感じでその分いろいろやれることが増えているそうです!


参考サイト(2011年当時とあんまり変わらない感じですね)
hit.hateblo.jp

【おまけ】nmonのfile出力時のジョブの終了を待って処理をしたいときのシェルのサンプル

nmonのファイルアウトプットでバックグラウンドで実行されるのでシェルで自動化するときに待ちたいときにsleepとか入れるとややメンテナンス性が悪いので、pidを取得して待機したいなって時のヒントとしてこんなの用意しました。...waitで行けるかと思ったら子プロセスじゃないからうまくいかなくて、結局sleepの方がいい気もしてきた(笑)

# 練習用動作確認まで
mkdir /tmp/nmon_wait_test
cd /tmp/nmon_wait_test
pwd; ls -l

cat << 'EOF' > nmon_wait.sh
#!/bin/bash
set -eu

# nmonを実行(5秒間隔で3回→15秒)
nmon -f -s 5 -c3 -t

# nmonのpidを取得する
export NMON_PID=`pidof nmon`

# 単なるフラグをシェル変数で管理
NMON_FLG="going"
while [ $NMON_FLG = "going" ]
do
    # pidofが変化していない限り待つ!(終わると消えて空文字になる)
    if [ $NMON_PID = "`pidof nmon`" ]
    then
        echo "waiting ..."
        sleep 5
    else
        echo "nmon finished"
        NMON_FLG="finished"
    fi
done

EOF

# 実行権限を付与
chmod +x nmon_wait.sh
ls -l

# 動作確認
./nmon_wait.sh