English

実践習得 IBM MQの基本

パフォーマンス測定(4)スケジュール実行

※本連載は最新のmqpgf/mqpcfに基づいて改定されることがあります。 常に最新バージョンをダウンロードしてご使用ください。

パフォーマンス測定方法のご紹介の最後に、テストリストのスケジュール実行についてご説明します。 パフォーマンス測定は、マシンやネットワークを共用している他のシステムの影響を受けない様に、それが全く使用されていない、もしくは稼働していない状況下で実施されることが理想です。 もし、ソース側、レスポンス側、クライアントの各マシンでタイミングを合わせてテスト・リストを任意の時間に自動実行できれば、テスト中に立ち会う必要もなく便利に感じることも多いはずです。

※本章では、CRON(Linux/HPE NonStop)、タスク・スケジューラー(Windows)、NetBatch(HPE NonStop)を使用してのJOBの実行方法についてご説明します。 但し、スケジューラー自体の詳細を解説するものではありません。 スケジューラーの詳細についてはOS側のマニュアルを適時参照する様にしてください。


CRONの使用(Linux、HPE NonStop)

Linuxの場合はCRONが標準として使用可能です。 CRONとは、スケジュールされたコマンドを実行するデーモン・プロセスです。
HPE NonStop でも OSS(Open System Service)でCRONを使用できますが、利用環境がセットアップされていない場合は、NetBatch(HPE NonStop サーバーのジョブ管理サブシステム)を使用するか、OS側の資料を参考にCRONが利用可能になるように構成してください。


CRON実行登録のサンプル

下記は、LinuxでRR-1のテスト・リスト(RR-1s.csv)を実行登録するサンプルですが、手順は他のテスト・リストでも同様です。
太字の部分がcrontabコマンドでジョブのスケジュール実行を表示/編集する時のデフォルトの状態から追記した部分です。

$ crontab -l #!/bin/sh HOME=/home/mqm/script_s # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 33 13 17 3 * source ./runpfmts.env && ./runpfmts.sh PLQMS list/RR-1s.csv out/RR-1s.out > runpfmts_`date +\%Y\%m\%d_\%H\%M`.log 2>&1

ジョブのスケジュールはcrontabコマンドを使用して登録します。 ここでは、簡単に上記サンプルの定義内容と定義方法をご説明します。
※crontabコマンドやスケジュール定義のフォーマット等についての詳細は、ご利用のOS側のマニュアルを参照してください。
通常CRONはスケジュール登録を行ったユーザー、具体的には"crontab -e"を実行したユーザーごとに登録されます。 例えばmqmユーザーで"crontab -e"を実行して、ジョブ定義を記述して保存すると、一般に /var/spool/cron下にユーザー名(mqm)というファイルが作成されます。 このファイルの内容はcrontab -lで参照した時の内容と同じです。


CRON実行登録方法

ジョブを実行させるユーザーで、"crontab -e"を実行してジョブ登録のエディターを起動します。 オペレーションは vi と同じです。

$ crontab -e # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed

CRONがジョブを実行する時は、通常、ジョブを登録したユーザーで実行されますが、その時のホームディレクトリは、その実行ユーザーのホームディレクトリです。 このサンプルでは実行ユーザーは mqm で、そのホームディレクトリは /home/mqm です。 パフォーマンス測定の環境は /home/mqm/script_s に作成していますので、表示の上部に下記を追記してホームディレクトりを変更します。

HOME=/home/mqm/script_s

実行するコマンドの先頭の部分は起動される日時の指定です。
下記の例では3月17日の13時33分です。

33 13 17 3 * ...

パフォーマンス測定スクリプト内では MQアプリである mqpgf(c) を呼び出します。 その為、実行前にMQのインストール環境の読み込みが必要です。 CRONからジョブが実行される時はデフォルトでは、実行ユーザーのログイン・スクリプト(.bash_profile等)が読み込まれません。 ログイン・スクリプトを読み込ませることもできますが、ジョブの実行とは直接関係が無い設定も読み込まれたり、また、ジョブとは関係のない変更によりジョブの実行に影響がでる場合もあります。 その為、ここでは、ログイン・スクリプトは読み込まず、ジョブの実行に必要な設定のみを読み込む様にしています。
下記の部分です。

... source ./runpfmts.env ...

下記がファイルの内容ですが、mqpgfを配置している場所(/home/mqm/bin)のPATHへの追加と、"setmqenv -s"により、MQインストール環境の読み込みをおこなっています。

$ cat runpfmts.env PATH=$PATH:/home/mqm/bin . /opt/mqm924/bin/setmqenv -s

次に"&&"でコマンドをつないでパフォーマンス測定スクリプトを起動しています。 標準出力と標準エラー出力は runpfmts_YYMMDD_HHMM.log に出力させています。 最後の"2>&1"は標準エラー出力を標準出力へリダイレクトさせる指定です。

&& ./runpfmts.sh PLQMS list/RR-1s.csv out/RR-1s.out > runpfmts_`date +\%Y\%m\%d_\%H\%M`.log 2>&1

runpfmts_yyyymmdd_HHMM.logファイルで監視して実行の終了を確認します。 正常に実行が行われた場合の出力結果は「RR-1のみを含むテスト・リストの実行 Linux, HPE NonStop」での画面表示と同じですので説明は省略します。


Task Schedulerの使用(Windows)

Windowsにはタスク・スケジューラーが標準機能として利用可能になっています。 オペレーションもGUIで可能です。 ここでサンプルとしてご紹介する方法を使用する場合、Windowsマシンに複数のMQバージョンをインストールしている時は、そのプライマリ・インストールでのみ実行が可能です。
※プライマリ・インストールは、setmqinstコマンドを使用することで変更することが可能です。 具体的な変更方法や、注意点の詳細につきましてはMQの製品マニュアルを参照してください。
また、PATH環境変数によってmqpgf(c)が参照可能となっていることが必要です。 テスト内容と構成により、MQを利用する上で必要なその他の環境変数(MQCCSID等)がある場合も、あらかじめOS側に設定を追加しておきます。


Task Schedulerの登録のサンプル

以下は、RR-1のテスト・リスト(RR-1s.csv)を実行登録するサンプルですが、手順は他のテスト・リストでも同様です。
タスク・スケジューラーをオープンする方法は、Windowsのエディションによって若干異なるかもしれません。 下記にa, bの2つの方法を示しておきます。

a.「Start」-「Windows Administrative Tools」-「Task Scheduler」

「Start」-「Windows Administrative Tools」
「Task Scheduler」


b.「Control Panel」-「Administrative Tools」-「Task Scheduler」

「Control Panel」
「Administrative Tools」
「Task Scheduler」


タスク・スケジューラーが開いたら、右側のペイン上部の“Create Basic Task..."をクリックします。


「Name」と「Description」にテスト内容を示す任意の文言を記入して「Next」を クリックします。


開始方法を選択して「Next」をクリックします。


開始時間を設定して「Next」をクリックします。


「Start a program」を選択して「Next」をクリックします。


「Start a Program」ウィンドウで実行コマンドを指定します。

下記は指定例です。

Program/script: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe Add arguments (optional): -NoExit -File ./runpfmts.ps1 -m PLQMS -i list/RR-1s.csv -o out/RR-1.out Start in (optional): C:\pwsh\script_s

Program/script: 使用するpowershell.exeのロケーションを指定します。
Add arguments (optional): runpfmts.ps1のコマンドラインを指定します。 -NoExitは、実行完了時に画面表示で実行結果を確認できるようにPowerShellを終了させない為の指定です。
Start in (optional): Jobを実行するディレクトリを指定します。 runpfmts.ps1の"-i"、"-o"に指定するパスは絶対パスか、この「Start in」で指定したディレクトリからの相対パスです。 runpfmts.ps1の前には同じディレクトリであっても"./"を必ず付けます。


指定が終わったら「Next」をクリックします。


「Summary」画面が表示されますので、内容を確認して「Finish」をクリックします。 


左側のペインで”Task Scheduler Library”を選択すると中央に作成したタスクが表示されます。 


スケジュールした時間になると、PowerShellのWindowが開き runpfmts.ps1 の実行が開始されます。


正常に実行が行われた場合の出力結果は「RR-1のみを含むテスト・リストの実行 Windows」での画面表示と同じですので説明は省略します。
Jobの実行完了を確認後、PowerShellのWindowに表示されたログは必要に応じて手動で保存してください。


NetBatchの使用(HPE NonStop)

HPE NonStopでは、Jobのスケジュール実行には前述のCRONを使用することもできますが、より高機能なNetBatch(HPE NonStop サーバーのジョブ管理サブシステム)を利用することが一般的です。
複数の定義方法が考えられると思いますが、ここではその構成方法の一例を示します。


[ NetBatch実行構成 ]

このサンプルでは、ジョブ実行の為の3つのファイル、ジョブを登録する"mbatch"、エグゼキューターから呼び出される"OSHRUN"、必要な環境をセットアップし .../script_s に配置されたrunpfmts.shを呼び出す"netbatrun.sh"を作成します。

下図がサンプルの構成の概要です。

fig 19.1

次は、個々の構成要素の簡単な説明です。

構成要素 説明
NetBatch Scheduler(Process Name: $mbat) NetBatch スケジューラ・プロセス
Executor MQEXEC JOBを実行するプログラム
SUBMIT JOB(obey mbatch) ジョブはobeyファイル(mbatch)を使用して定義
OSHRUN TACLから実行されるファイル。 OSHでnetbatrun.shを起動する。
netbatrun.sh 実行環境をセットアップし、runpfmts.shを呼び出す。
runpfmts.sh パフォーマンス測定スクリプト
runpfmts_YYYYMMDD_hhmm.log パフォーマンス測定スクリプトの実行状況のログ


[ NetBatch構成手順 ]

それでは順を追って、一つ一つ手順をご説明します。
以下は、RR-1のテスト・リスト(RR-1s.csv)を実行登録するサンプルですが、手順は他のテスト・リストでも同様です。
NetBatchのコマンドの詳細につきましては、OS側の資料をご参照ください。


NetBatch スケジューラ・プロセスの作成

まず、MQM.MANAGERでログインでnetbachコマンドを実行し、スケジューラ・プロセスを作成します。 最初にスケジューラーがワークとして使用するvolume.subvolumeを決めておく必要があります。

TACL> netbatch /name $mbat,pri 150,cpu 1,term $zhome,nowait/ $. ! EMS

*オプションの説明
name $mbat: スケジューラ・プロセス名を$mbatに指定
pri nnn: スケジューラ・プロセスの優先順位
cpu n: スケジューラ・プロセスを起動するCPU
term $zhome: プロセスのホーム端末を$zhomeに指定
nowait: プロセス起動後にコマンド入力プロンプトを返す。
$<vol>.<subvol>: スケジューラーのワーク
!: コールド・スタートを指示
EMS: EMSイベント メッセージの生成を有効にする。

コマンド実行後、netbatchが正常に起動したことを確認します。
※スケジューラ・プロセスはプロセス・ペアで実行されますが、この時点ではバックアップはまだ起動されません。 「スケジューラの準備」(後述)が完了後、バックアップが開始されます。

TACL> status $mbat System \xxxx Process Pri PFR %WT Userid Program file Hometerm $MBAT 1,718 150 P 001 255,255 $SYSTEM.SYSTEM.NETBATCH $ZHOME Swap File Name: $SYSTEM.#0 Current Extended Swap File Name: $SYSTEM.#0 Library File Name: $SYSTEM.SYSTEM.BATCHLIB


スケジューラの準備

次に下記のコマンドを続けて実行し、スケジューラーを準備を完了させます。

TACL> batchcom $mbat ... 1} reset scheduler 2} assume scheduler 3} add scheduler Scheduler added 4} start scheduler Scheduler started

*コマンドの説明
reset scheduler: BATCHCOMの作業属性セットからスケジューラー属性を削除
assume scheduler: コマンドのデフォルト・オブジェクト・キーワードをスケジューラに設定
add scheduler: スケジューラのデータベースを作成および初期化
start scheduler: スケジューラを使用できるように準備する。 スケジューラのバックアップ・プロセスが作成され、また、データベース・ファイルもオープンされる。

"start scheduler"実行後、バックアップ プロセスが開始されたことを確認します。

TACL> status $mbat System \xxxx Process Pri PFR %WT Userid Program file Hometerm $MBAT 1,718 150 P 001 255,255 $SYSTEM.SYSTEM.NETBATCH $ZHOME Swap File Name: $SYSTEM.#0 Current Extended Swap File Name: $SYSTEM.#0 Library File Name: $SYSTEM.SYSTEM.BATCHLIB $MBAT B 0,595 150 P 001 255,255 $SYSTEM.SYSTEM.NETBATCH $ZHOME Swap File Name: $SYSTEM.#0 Current Extended Swap File Name: $SYSTEM.#0 Library File Name: $SYSTEM.SYSTEM.BATCHLIB


エグゼキューターの準備

次に下記のコマンドを続けて実行し、エグゼキューターを準備します。

TACL> batchcom $mbat ... 5} add class mqpfmts Class MQPFMTS added 6} add executor mqexec,class mqpfmts,cpu 1 Executor MQEXEC added 7} start executor mqexec Executor MQEXEC started 8} exit

*コマンドの説明
add class mqpfmts: スケジューラのクラス mqpfmts を追加
add executor mqexec,class mqpfmts,cpu 1: スケジューラのエグゼキュータを追加し、CLASSおよびCPU属性を指定
start executor mqexec: 追加されたエグゼキュータ mqexec をジョブで使用できるようにする。


ジョブの登録

実行するJOBを登録します。 環境によってはsuperグループのユーザーで実施する必要があるかもしれません。 その場合は、JOB登録時にCHANGEUSERで実行ユーザーをmqm.managerに変更します。
下記はJOB登録のobayのサンプルです。

TACL> fup copy mbatch CHANGEUSER mqm.manager SUBMIT JOB mqpfmts-job,& CLASS mqpfmts,& executor-program $system.system.tacl,& in $<vol>.<subvol>.OSHRUN,& out $s.#mqpfmts,& after 18:00,& highpin on,& restart off,& stall off,& stop-on-abend on,& waiton 13 RECORDS TRANSFERRED

*コマンドおよびオプションの説明
CHANGEUSER mqm.manager: 実行ユーザーをmqm.managerに指定(superグループのユーザーで登録する場合に必要)
SUBMIT JOB mqpfmts-job: ジョブmqmpfmts-jobを登録
CLASS mqpfmts: スケジューラ・クラスにmqpfmtsを指定
executor-program $system.system.tacl: エグゼキューター・プログラムにTACLを指定
in $<vol>.<subvol>.OSHRUN: TACLで実行するファイルにOSHRUNを指定
out $s.#mqpfmts: 出力先のスプーラーの指定
※この例ではデフォルトのスプーラー$sを指定していますが、一般的にはJOB専用のスプーラーを準備して指定します。
after hh:mm: JOBの実行時間を指定
※その他のオプションの詳細はOS側の資料を参照してください。

下記は、エグゼキューターから呼び出されるOSHRUNスクリプトです。
OSHでnetbatrun.shを呼び出します。 標準出力は/dev/nullに破棄しています。

TACL> fup copy OSHRUN osh -c ".../script_s/netbatrun.sh" <- >/dev/null 2>/dev/null 1 RECORDS TRANSFERRED

netbatrun.shは下記の通りです。

$ cat netbatrun.sh #! /bin/sh . <mqinstall directory>/var/mqm/mqprofile export PATH=$PATH: export MQEMSEVENTS=255 export MQTOOL_LICENSE_FILE=/mqtool.lic cd .../script_s ./runpfmts.sh PLQMS list/RR-1s.csv out/RR-1s.out > runpfmts_`date +\%Y\%m\%d_\%H\%M`.log 2>&1

mqprofileを読み込みMQインストール環境をセットアップ、mqpgf(c)への参照パスの追加、EMSの出力設定、mqpgf(c)のライセンスファイルの参照を設定後、ディレクトリを.../script_sに変更して、runpfmts.shを実行します。
実行結果は、runpfmts.shの配置場所(この例では.../script_s)のrunpfmts_YYYYMMDD_hhmm.logに標準出力と標準エラーがリダイレクトされて出力されます。

上記のファイルの準備ができたらジョブを登録します。
"Job MQPFMTS-JOB Jobnumber 1 submitted"と表示されることを確認します。

TACL> logon super.xxxx TACL> batchcom $mbat ... 1} obey mbatch CHANGEUSER mqm.manager SUBMIT JOB mqpfmts-job,& CLASS mqpfmts,& executor-program $system.system.tacl,& in $<vol>.<subvol>.OSHRUN,& out $s.#mqpfmts,& after 18:00,& highpin on,& restart off,& stall off,& stop-on-abend on,& waiton Job MQPFMTS-JOB Jobnumber 1 submitted

runpfmts_yyyymmdd_HHMM.logファイルを監視して実行の終了を確認します。 正常に実行が行われた場合の出力結果は「RR-1のみを含むテスト・リストの実行 Linux, HPE NonStop」での画面表示と同じですので説明は省略します。

以上で、各プラットフォームの標準のジョブ・スケジューラの登録方法の個別の説明は終わりです。


複数のプラットフォーム間で連携したスケジュール実行

複数のプラットフォーム間で緊密に連携できるような高度なスケジューラーがシステムにない場合や、特殊な連携方法を検討/実装しない場合でも、ここでご紹介した各プラットフォームの標準のジョブ・スケジューラーのみを使用してシステム全体で連動したパフォーマンス測定が可能です。
既に「全てのワークロードを含むテスト・リストの実行」でソース・サーバーにHPE NonStop、レスポンス・サーバーにLinux、クライアント・マシンにWindowsを使用して、全てのワークロードを含むテスト・リストを使用したパフォーマンス測定の実施方法についてご説明しました。
後は、それぞれをスケジュール起動するだけです。

スケジュール実行する際の注意点を整理しておきます。

各プラットフォーム間での時刻の同期 NTPサーバー等、タイムサーバー環境が利用できない場合でも、混乱を避けるために、テスト実施前に、手動であっても極力時間を合わせておくことをお勧めします。 各マシンのシステム時刻にずれがある場合、問題が発生した時の解析にも影響します。
受信側が先に起動するように各マシンでのジョブの開始時刻を調節する 何度かご説明した通り、パフォーマンスの測定結果は送信側で確認します。 受信側が先に起動していない場合は、送信側が受信側の起動待ちとなってしまうため正しい計測ができません。 必ず余裕を見て受信側を先に起動するように各マシン上のジョブの実行時間をスケジュールしてください。
RR-5, PL-1の場合はソース・サーバーのジョブより、レスポンス・サーバーのジョブが先に開始されている必要があります。 余裕を見て予めレスポンス・サーバーのジョブを開始しておきます。
RR-2の場合はクライアント・マシンのジョブより、ソース・サーバーのジョブが先に開始されている必要があります。 RR-2の前に他のワークロードのパフォーマンス測定を行うようなテスト・リストを使用する場合は、ソース・サーバー上で、それらのテストが確実に完了した後に、クライアント上でのジョブが起動されるように、十分な時間を空けるようにします。

この回で、パフォーマンス測定についての説明は終了です。 パフォーマンス測定の連載の最初でもお話ししましたが、このパフォーマンス測定のサンプルで使用したスクリプトや定義ファイルは大変シンプルに作成しています。 その為、その解析も容易なはずです。 是非、ご提供したスクリプトや定義ファイルをニーズに合うようにカスタマイズして、実際のシステムでのパフォーマンス測定に活用してください。

このページの先頭へ

このページの先頭へ