12.07.2015 Views

Magic uniPaaS V1Plus トラブルシューティング ツール - Magic Software ...

Magic uniPaaS V1Plus トラブルシューティング ツール - Magic Software ...

Magic uniPaaS V1Plus トラブルシューティング ツール - Magic Software ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Magic</strong> <strong>uniPaaS</strong> <strong>V1Plus</strong>トラブルシューティング ツール


本 書 および 添 付 サンプル( 以 下 、 本 製 品 )の 著 作 権 は、マジックソフトウェアジャパン 株 式 会 社 (MSJ)にあります。MSJ の 書 面 による 事 前 の 許 可 なしでは、いかなる 条 件 下 でも、 本 製 品 のいかなる 部 分 も、 電 子 的 、 機 械 的 、 撮 影 、 録 音 、その 他 のいかなる 手 段によっても、コピー、 検 索 システムへの 記 憶 、 電 送 を 行 うことはできません。本 製 品 の 内 容 につきましては、 万 全 を 期 して 作 成 していますが、 万 一 誤 りや 不 正 確 な 記 述 があったとしても、MSE(<strong>Magic</strong><strong>Software</strong> Enterprises Ltd.)および MSJ はいかなる 責 任 、 債 務 も 負 いません。 本 製 品 を 使 用 した 結 果 、または 使 用 不 可 能 な 結 果生 じた 間 接 的 、 偶 発 的 、 副 次 的 な 損 害 ( 営 利 損 失 、 業 務 中 断 、 業 務 情 報 の 損 失 などの 損 害 も 含 む)に 関 し、 事 前 に 損 害 の 可 能 性が 勧 告 されていた 場 合 であっても、MSE および MSJ、その 管 理 者 、 役 員 、 従 業 員 、 代 理 人 は、いかなる 場 合 にも 一 切 責 任 を 負 いません。MSE および MSJ は、 本 製 品 の 商 業 価 値 や 特 定 の 用 途 に 対 する 適 合 性 の 保 証 を 含 め、 明 示 的 あるいは 黙 示 的 な 保 証 は一 切 していません。本 製 品 に 記 載 の 内 容 は、 将 来 予 告 なしに 変 更 することがあります。サードパーティ 各 社 商 標 の 引 用 は、MSE および MSJ の 製 品 に 対 する 互 換 性 に 関 しての 情 報 提 供 のみを 目 的 としてなされるものです。 一 般 に、 会 社 名 、 製 品 名 は 各 社 の 商 標 または 登 録 商 標 です。本 製 品 において、 説 明 のためにサンプルとして 引 用 されている 会 社 名 、 製 品 名 、 住 所 、 人 物 は、 特 に 断 り 書 きのないかぎり、すべて 架 空 のものであり、 実 在 のものについて 言 及 するものではありません。初 版第 2 版2010 年 11 月 26 日2011 年 2 月 8 日マジックソフトウェア・ジャパン 株 式 会 社


目 次第 1 章 はじめに...........................................................................5第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ.....................................................62.1. アクティビティ モニタとは 何 ですか?...............................................72.2. Studio でアクティビティ モニタ 画 面 を 開 くには?.....................................82.3. アクティビティモニタの「フィルタ」とは 何 ですか?.................................102.4. Studio でロギングダイアログを 開 くには?...........................................112.5. ロギングダイアログでフィルタを 設 定 するには?.....................................122.6. アクティビティ モニタをファイル 出 力 させるには?..................................132.7. ゲートウェイ ログとは?..........................................................152.8. ロギングダイアログでゲートウェイログを 設 定 するには?.............................162.9. MAGIC.INI でゲートウェイログを 設 定 するには?.....................................182.10. ログ 出 力 の 例 ....................................................................192.11. 実 行 エンジンエラーログ..........................................................222.12. ログ 出 力 のレベルとは?..........................................................232.13. ログの「 同 期 」とは?............................................................242.14. RIA クライアントログとは?.......................................................25第 3 章 リクエスタログ....................................................................273.1. リクエスタログにはどんな 種 類 がありますか?.......................................283.2. リクエスタログ 設 定 時 の 注 意 点 は?.................................................303.3. MRB 通 信 ログの 目 的 と 設 定 は?......................................................313.4. MRB イベントログとは?............................................................333.5. <strong>uniPaaS</strong> サーバログの 目 的 と 設 定 は?................................................343.6. インターネット リクエスタ ログの 目 的 と 設 定 は?...................................35第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ...................................................364.1. コマンドラインリクエスタの 目 的 と 利 用 方 法 は?.....................................374.2. ブローカモニタ (MRB モニタ)で 何 ができますか?.....................................43第 5 章 ダンプファイル....................................................................465.1. ダンプファイルを 取 得 するタイミングと 方 法 は?.....................................475.2. サーバモジュールのダンプファイル 取 得 時 の 注 意 事 項 .................................485.3. 異 常 終 了 時 にダンプファイルを 作 成 させるには?(Windows XP および Windows Server 2003 の 場 合 ).......................................495.4. 異 常 終 了 時 にダンプファイルを 作 成 させるには?(Vista、Windows 7、Windows Server 2008 の 場 合 ).......................................515.5. ハングアップ 時 にダンプファイルを 作 成 させるには?(Windows XP および Windows Server 2003 の 場 合 )........................................535.6. ハングアップ 時 にダンプファイルを 作 成 させるには?(Vista、Windows 7、Windows Server 2008 の 場 合 )......................................555.7. タスクマネージャにプロセス ID を 表 示 させるには?..................................575.8. ダンプを 取 るプロセスのプロセス ID を 特 定 するには?................................59第 6 章 <strong>uniPaaS</strong> デバッガ..................................................................606.1. デバッガを 開 始 する...............................................................616.2. ブレイクポイント.................................................................626.3. 行 の 無 効 化 .......................................................................666.4. ブレイクポイントと 行 の 無 効 化 についての 注 意 .......................................686.5. 項 目 一 覧 .........................................................................696.6. ウォッチリスト...................................................................716.7. コールスタック...................................................................736.8. 実 行 コンテキスト.................................................................75第 7 章 リモートデバッガ..................................................................777.1. リモートデバッガのしくみはどうなっていますか?...................................78


7.2. リモートデバッグにはどんな 準 備 が 必 要 ですか?.....................................797.3. リモートデバッグはどのように 設 定 しますか?.......................................807.4. アクティビティモニタを 表 示 するためだけに 使 うには?...............................847.5. アクティビティモニタの 内 容 を 変 更 するには?.......................................857.6. リモートデバッグのセキュリティは?...............................................86第 8 章 DBMS のユーティリティ.............................................................898.1. Pervasive PSQL のツール...........................................................908.2. MS SQL Server のツール............................................................99第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール..........................................................1029.1. Windows タスクマネージャ........................................................1039.2. リソースモニタ..................................................................1079.3. システムイベントログ............................................................1109.4. その 他 のシステムモニタツール....................................................1119.5. パケットキャプチャプログラム....................................................1209.6. キーボードマクロ................................................................1259.7. その 他 ..........................................................................128第 10 章 プログラミングの 小 技 ............................................................13010.1. Logging 関 数 ...................................................................13110.2. FlwMtr 関 数 .....................................................................13310.3. 項 目 の 表 示 プログラム...........................................................13410.4. コマンドラインリクエスタのログ 読 み 込 みプログラム...............................13710.5. アクティビティモニタ 出 力 の 読 み 込 みプログラム...................................1394


2.1. アクティビティ モニタとは 何 ですか?アクティビティモニタは、<strong>uniPaaS</strong> 実 行 エンジンのデバッグ 機 能 であり、<strong>Magic</strong> アプリケーションの 実 行 の 様 子 をトレースします。これには、<strong>Magic</strong> のコマンド(セレクト、コール、 項 目 更 新 等 々)の 実 行 が 1 ステップごとにトレースされるので、<strong>Magic</strong> アプリケーションが 意 図 したように 動 作 しない 場 合 に、プログラムの 実 行 の 流 れをチェックすることができます。アクティビティモニタの 出 力 は、 次 のいずれかの 方 法 で 記 録 されます。方 法 説 明 参 照アクティビティ モニタログファイルに 出 力リモート デバッガStudio で 開 発 時 にデバッグしている 場 合 にだけ 利 用 可 能 。Studio の「アクティビティモニタ」画 面 を 開 いて 表 示 させます。すべての <strong>uniPaaS</strong> 製 品 で 利 用 可 能 。アクティビティモニタの 内 容 を 指 定 したファイルに 書 き出 します。リモート デバッガ 上 の「アクティビティ モニタ」画 面 に 表 示 します。すべての <strong>uniPaaS</strong> 製 品 で利 用 可 能 です。2.2 Studio でアクティビティ モニタ 画 面を 開 くには?2.6 アクティビティ モニタをファイル 出 力させるには?第 7 章 「リモートデバッガ」で 説 明 します。<strong>uniPaaS</strong> Studio<strong>uniPaaS</strong> ClientEnterprise/RichClientServerアクティビティモニタ ログファイルアクティビティモニタ ログファイルアクティビティモニタ ログファイルStudio では、モニタ 画 面 、ログファイルの 両 方 に 出 力できる。Client および EnterpriseServer/RichC lient Server では、ログファイルだけに 出 力 できる。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 7


2.2. Studio でアクティビティ モニタ 画 面 を 開 くには?開 発 の 段 階 で、Studio 製 品 を 使 って 単 体 テストを 行 っているときには、Studio の「アクティビティ モニタ」 画 面 を表 示 させることにより、プログラムの 実 行 の 流 れを 見 ることができます。1. プロジェクトを 開 いた 状 態 で、メニュー「 表 示 (V) → アクティビティモニタ(M)」 を 選 択 します。2. 右 図 のような 画 面 が 表 示 されます。初 期 状 態 では 内 容 は 空 白 です。また、Studio の 画 面 の 状 態 によっては、Studio のウィンドウにドッキングした 状 態 で 表 示 されることもあります。アクティビティモニタにはツールバー( 右 図 )があり、 次 ページの 表 のような 機 能 を 持 っています。これらの 機 能 は、アクティビティモニタのコンテキストメニュー( 右 図 )からも 実 行 できます。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 8


アイコン コンテキストメニュー 機 能保 存 (S)出 力 開 始 (O)出 力 停 止 (U)クリア(C)検 索 (F)再 検 索 (N)開 始 / 終 了 チェック(M)ログの 内 容 を、テキストファイルに 書 き 出 します。ログ 出 力 を 開 始 します。ログ 出 力 を 中 断 します。ログ 内 容 を 消 去 します。ログの 内 容 から 文 字 列 検 索 を 行 います。次 の 文 字 列 検 索 を 続 けます。対 応 する 開 始 あるいは 終 了 に 移 動 します。最 後 の 開 始 / 終 了 チェック(M) は、ロギングダイアログ (2.5 「ロギングダイアログでフィルタを 設 定 するには?」 参 照 )で、 開 始 / 終 了 メッセージ が Yes になっている 場 合 にだけ 有 効です。例 えば、アクティビティモニタ 上 で、レコード 後 開 始 の 行 にカーソルがあった 場 合 、 開 始 / 終 了 チェック(M) ボタンを 押すと、 対 応 する レコード 後 終 了 の 行 にカーソルが 移 動 します。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 9


2.3. アクティビティモニタの「フィルタ」とは 何 ですか?アクティビティ モニタの 出 力 は、 一 番 詳 細 に 設 定 すると、 各 コマンドの 実 行 、 再 計 算 などまで 記 録 されるので、簡 単 なプログラムの 実 行 でも 膨 大 な 量 になることがあります。あまり 細 かすぎると、 重 要 な 部 分 を 見 つけ 出 すために 却 って 不 便 なことがあるので、 必 要 な 情 報 だけに 取 捨 選 択 したいことがあります。このように 出 力 情 報 を 取捨 選 択 するために、ログメッセージの 種 類 を 指 定 することを「フィルタ」と 呼 びます。アクティビティモニタの 出 力 内 容 をフィルタするには、 次 の 三 つの 方 法 があります。方 法 説 明 参 照ロギングダイアログMAGIC.INIロギングダイアログを 開 いて、フィルタ 項 目 を設 定 します。Studio でテスト 実 行 する 場 合 にだけ 有 効 です。MAGIC.INI の [MAGIC_LOGGING] セクションでフィルタ 項 目 をパラメータで 指 定 します。すべての <strong>uniPaaS</strong> 製 品 で 有 効 です。2.4 Studio でロギングダイアログを 開くには?2.6 アクティビティ モニタをファイル 出力 させるには?Logging () 関 数<strong>uniPaaS</strong> プログラムの 実 行 中 に、フィルタする内 容 を 指 定 して Logging() 関 数 を 実 行 します。アプリケーション 実 行 中 に、プログラムで 動 的にログレベルを 変 更 することができます。10.1 「Logging 関 数 」で 説 明 します。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 10


2.4. Studio でロギングダイアログを 開 くには?「ロギング ダイアログ」は、Studio 製 品 でだけ 利 用 できます。ロギングダイアログを 使 うと、アクティビティログに出 力 するメッセージの 種 別 を 指 定 することができます。デバッグの 目 的 に 応 じて、 出 力 の 詳 細 さを 変 更 することができます。ロギング ダイアログ は、メニュー オプション(O) から 設 定 (S) → ロギング(O) と 選 択します。ロギング ダイアログには、 設 定 と DBMS という 二 つのタブがあります。• 設 定 タブを 開 くと、フローモニタに 表 示 するトレースのレベルを 設 定 できます。• DBMS タブには、 現 在 ゲートウェイがロードされている DBMS の 一 覧 が 表 示 され、それぞれにログレベルを 設 定 できるようになっています。DBMS タブの 設 定 は、ゲートウェイログ を 出 力 する 場 合 に 使 います。ゲートウェイログについては、2.7 「ゲートウェイ ログとは?」 で 説 明 します。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 11


2.5. ロギングダイアログでフィルタを 設 定 するには?アクティビティモニタのフィルタを 設 定 するには、ロギングダイアログの「 設 定 」タブで、アクティビティモニタに 出 力 する 情 報 の 種 類 を 設 定 します。 次 のようなオプションがあります。ロギング ダイアログで 設 定 した 内 容 は、MAGIC.INI の [MAGIC_LOGGING] セクションに 保 存 されます( 次 節 参 照 )。このため、いったん Studio を 終 了 しても、 次 回 Studio を 起動 したときには、 前 回 の 設 定 が 記 憶 されています。オプションタスクレベルデータビュー再 計 算処 理 フローイベントクライアントの 動 作ゲートウェイ出 力 される 内 容タスクの 開 始 、あるいは 終 了 時 の、タスク 名 やタスクモードタスク/レコード/コントロールの 前 処 理 / 後 処 理 などのハンドラが 実 行 されたときの、レベル 名 やイベント 名データ 定 義 、 範 囲 / 位 置 付 のような、データビューに 関 する 情 報再 計 算 処 理 時 の 変 数 名処 理 コマンド 名トリガされたイベント 名リッチクライアントタスクにおける、クライアント 側 の 動 作 のログ。初 期 接 続 時 にこのオプションが「No」に 設 定 されている 場 合 、あとから「Yes」に 変更 してもクライアントにログが 作 成 されません。「Yes」に 設 定 された 場 合 、サーバとの 更 新 回 数 が 増 えるので、パフォーマンスが低 下 することがあります。ゲートウェイ ログの 出 力 。ゲートウェイログを 出 力 する 場 合 、Yes にします。Noにすると、「DBMS」タブでログレベルを 設 定 してもアクティビティモニタには 出 力 されません。トランザクションキャッシュ 遅 延 トランザクション 利 用 時 の、トランザクションキャッシュへの 操 作 。バックグラウンドメッセージ開 始 / 終 了 メッセージログ 同 期外 部 ログファイル 名バックグラウンドメッセージがフィルタされるかどうかを 指 定 しますロギングモニタの 処 理 の 開 始 と 終 了 の 整 合 処 理 を 有 効 にするかどうかを 指 定 します「 外 部 ログファイル 名 」を 指 定 することによりログをファイルに 出 力 する 際 に、ログの 同 期 を 行 うかどうかを 指 定 します。ログの 同 期 については、2.13 「ログの「 同期 」とは?」を 参 照 してください。なお、「ロギングダイアログ」では、「フラッシュ」の 指 定 はできません。ログ 情 報 をファイルに 書 き 込 みたい 場 合 、ファイル 名 を 指 定 します。フルパスを 指 定 しない 場 合 、アプリケーションの 作 業 フォルダ 上 に 作 成 されます。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 12


2.6. アクティビティ モニタをファイル 出 力 させるには?Studio 以 外 の 製 品 では、アクティビティ モニタ 画 面 が 表 示 されないので、アクティビティモニタはファイル 出 力だけができます。また、ロギング ダイアログが 表 示 されないので、 出 力 内 容 のフィルタの 設 定 は MAGIC.INI の[MAGIC_LOGGING] セクションをテキストエディッタなどで 直 接 編 集 して 設 定 します。アクティビティモニタをログファイルに 出 力 するには、ログファイル 名 を MAGIC.INI の[MAGIC_LOGGING] で 指 定します。 同 時 に、ここにはフィルタの 設 定 も 行 ないます。以 下 の 表 は、フィルタのオプションと、MAGIC.INI で 指 定 するパラメータ 名 、および 各 パラメータに 指 定 可 能 な 値を 示 したものです。オプション MAGIC.INI パラメータ 名 設 定 可 能 な 値タスク Task Y/Nレベル Levels Y/Nデータビュー DataView Y/N再 計 算 Recompute Y/N処 理 フロー Flow Y/Nイベント Events Y/Nクライアントの 動 作 LogClient Y/Nゲートウェイ Gateway Y/Nトランザクションキャッシュ TransCache Y/Nバックグラウンドメッセージ BackgroundMsg Y/N開 始 / 終 了 メッセージ BeginEndMsg Y/Nログ 同 期 LogSynch Y/N/F外 部 ログファイル 名 ExternalLogFileName (ログファイル 名 )外 部 ログファイル 名 (ExternalLogFileName) の 指 定 は 必 須 です。その 他 のパラメータは、 指 定 されていなければデフォルト N とみなされます。ログ 同 期 (LogSynch) には、「Y」( 同 期 あり)、「N」( 同 期 なし)の 他 に、「F」(フラッシュ)の 指 定をすることができます。(2.13 「ログの「 同 期 」とは?」 参 照 )設 定 例 : 次 の 設 定 例 では、タスクレベルの 出 力 のみを 行 い、ログ 同 期 を 行 ないます。また、ログファイル 名 はmgmonitor.log であり、エンジンの 作 業 ディレクトリ (アプリケーションの ECF ファイルの 存 在 するディレクトリ)に 作 成 されます。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 13


[MAGIC_LOGGING]Task = YLevels = NDataView = NRecompute = NFlow = NEvents = NLogClient = NTransCache = NLogSynch = YBeginEndMsg = NGateway = NBackgroundMsg = NExternalLogFileName = mgmonitor.log第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 14


2.7. ゲートウェイ ログとは?<strong>Magic</strong> が DBMS にデータアクセスを 行うときには、その DBMS 用 のゲートウェイを 通 してアクセスします。 従 って、<strong>Magic</strong> と DBMS との 間 のデータ・ 制 御のやりとりはすべて DBMS ゲートウェイを 通 して 行 うことになります。<strong>uniPaaS</strong>実 行 エンジンデータベースゲートウェイDBMS<strong>Magic</strong> 実 行 時 に、 予 期 しないレコードロック、テーブルロック、ファイルマネージャの 異 常 、パフォーマンスの 問ゲートウェイ Studio では、モニタ 画 面 、ロ題 などが 起 こった 場 合 には、<strong>Magic</strong> がログ グファイルの 両 方 に 出 力 。その 他 ではログファイルのDBMS をどのように 利 用 しているのか、みに 出 力 。あるいは、 低 レベルの DBMS とのインターフェースにおいて、どのようなデータやステータスコードが 現 れているのかなどを 確 認 することが、 問 題 解 決 につながることがあります。<strong>Magic</strong> の DBMS ゲートウェイは、この 目 的 のためのログ 機 能 を 備 えています。ゲートウェイログは、アクティビティ モニタの 機 能 の 一 環 として 実 装 されていて、アクティビティモニタの 画 面 、あるいはログファイルに 出 力 されます。ゲートウェイログの 設 定 は、アクティビティ モニタの 設 定 と 同 様 に、 次 の 三 つの 方 法 により 行 うことができます。方 法 説 明 参 照ロギングダイアログMAGIC.INIロギングダイアログを 開 いて、フィルタ 項 目 を設 定 します。Studio でテスト 実 行 する 場 合 にだけ 有 効 です。MAGIC.INI の [MAGIC_DBMS] セクションでログレベルをパラメータで 指 定 します。すべての<strong>uniPaaS</strong> 製 品 で 有 効 です。2.8 ロギングダイアログでゲートウェイログを 設 定 するには?2.9 MAGIC.INI でゲートウェイログを設 定 するには?Logging () 関 数<strong>uniPaaS</strong> プログラムの 実 行 中 に、フィルタする内 容 を 指 定 して Logging() 関 数 を 実 行 します。アプリケーション 実 行 中 に、プログラムで 動 的にログレベルを 変 更 することができます。Logging 関 数 は、10.1 「Logging 関数 」 で 説 明 します。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 15


2.8. ロギングダイアログでゲートウェイログを 設 定 するには?Studio 製 品 上 でテスト 実 行 する 場 合 には、ロギングダイアログを 開 いて、ゲートウェイログのログレベルを 設 定することができます。1. メニュー 「オプション(O) → 設 定 (S) → ロギング(O) 」を 選 択 して、ロギングダイアログを 開 きます。2. 「 設 定 」タブで、「ゲートウェイ」を Yes に設 定 します。このオプションが No だと、ゲートウェイログは 出 力 されません。3. 「DBMS」 タブで、ログをとりたいデータベースについて、「ログレベル」を 設 定 します。右 図 では、MS SQL Server ゲートウェイに 対 し、「S=サポート 用 」レベルのログを出 力 することを 指 定 しています。「ログレベル」 としては、 以 下 の 指 定 ができます。「N=なし」 以 外 では、C=ユーザ 用 、S=サポート 用 、D= 開 発 者用 の 順 で 出 力 量 が 多 くなります。(2.12 「ログ 出 力 のレベルとは?」を 参 照 )。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 16


ログレベル 出 力 内 容 出 力 量N=なし ログファイルが 作 成 されません。 なしD= 開 発 者 用 MSJ の 技 術 部 門 向 けのログファイルが 作 成 されます。 大S=サポート 用 アプリケーション 開 発 者 向 けのログファイルが 作 成 されます。 中C=ユーザ 用 SQL コマンドが 出 力 するログのみ 出 力 されます。 小第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 17


2.9. MAGIC.INI でゲートウェイログを 設 定 するには?Studio 以 外 の 製 品 では、ロギングダイアログが 使 えないので、MAGIC.INI の 指 定 により、ゲートウェイログの 出力 を 指 定 することになります。ゲートウェイログは、[MAGIC_DBMS] セクションで、DBMS の 設 定 の 一 部 ( 第 5 番 目 のパラメータ)として 指 定 します。例 えば、MS SQL Server で「S=サポート 用 」レベルのゲートウェイ ログを 出 力 させるためには、 次 のように 指 定します。[MAGIC_DBMS]MicrosoftSQLServer = 21, NotAllowNull, 10.3, MicrosoftSQL Parameters, S, +, NotLogSync, 0, 0, NotCheckExist,ここで、「S」 と 指 定 されているものがゲートウェイログの 指 定 で、「S=サポート 用 」レベルを 意 味 しています。「S」 以 外 には、N (なし)、D ( 開 発 者 用 )、C (ユーザ 用 ) が 指 定 できます。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 18


2.10. ログ 出 力 の 例DBMS ゲートウェイは、DBMS ごとに 内 部 処 理 が 大 きく 異 なりますので、ログも DBMS によりかなり 異 なるものとなりますが、 特 に、ISAM 系 の DBMS ゲートウェイ (Pervasive, メモリなど) と、SQL 系 の DBMS ゲートウェイ(Oracle、MS-SQL など)とは 大 きく 異 なります。ここでは、 詳 しい 解 説 はしませんが、 以 下 に 簡 単 なレコードフェッチのみを 行 った 場 合 の 例 を 挙 げます。2.10.1. ISAM 系 DBMS ゲートウェイの 場 合 (Pervasive)Pervasive ゲートウェイのように、ISAM ファイルをアクセスするゲートウェイの 場 合 には、DBMS が 提 供 する APIへのオペレーション、データ、 戻 り 値 などが 記 録 されます。赤 色 で 示 したところが、Pervasive の 提 供 する API (BTRV()と 記 されている)を 呼 び 出 している 部 分 です。ファイルのオープン (OPEN)、STEP 命 令 や GET 命 令 などが 発 行 されている 様 子 がわかります。17:49:03.546 - 3,91359 LogStart() : >>>>> ***** Btrieve *****17:49:03.546 - ,91359 Version <strong>uniPaaS</strong> 1.8 SP1a, Log = mglog.log, Level = Support/QA, Sync = None, Date = 30/08/201017:49:03.546 - ,91359 LogStart() :


17:49:10.031 - ,97843 _crsr_get() GET_NEXT : crsr #0 (key #1, Counters)17:49:10.031 - ,97843 key buf = 01 0017:49:10.031 - ,97843 .......... . .17:49:10.031 - ,97843 ==> BTRV() #7 GET_NEXT_EXTENDED (36)17:49:10.031 - ,97843 >> 1. 2. 3. 4. 5. 6. 7. 8. 9.10.11.12.13.14.15.16.17:49:10.031 - ,97843 rec buf = 10 00 45 47 00 00 00 00 1e 00 01 00 28 00 00 0017:49:10.031 - ,97843 ........... . . E G . . . . . . . . ( . . .17:49:10.031 - ,97843 > ctxID = -1.000000, database = MAGIC, table = Counters, dbd->opened=0, share = W17:54:11.093 - ),98906 ms7_connect_extra_session(): >>>>> database = MAGIC, pConnection->sess_extra = 017:54:11.093 - ,98906 ms7_connect_extra_session(): >>>>> database = MAGIC, pConnection->sess_extra = 017:54:11.093 - ,98906 ms7_esqlc_fil_exist() : db - MAGIC, owner - dbo, table - Counters17:54:11.093 - ,98906 ms7_esqlc_fil_exist(): select id from MAGIC..sysobjects where name = 'Counters' AND uid = user_id('dbo') AND(type = 'U' OR type = 'V' OR type = 'S')17:54:11.093 - ,98906 ms7_fil_open(): > ctxID = -1.000000, database = MAGIC, key_idx = 017:54:11.093 - ,98906 ms7_crsr_prepare(): table = Counters17:54:11.093 - ,98906 ms7_crsr_prepare(): number of blobs = 017:54:11.093 - ,98906 ms7_connect_extra_session(): >>>>> database = MAGIC, pConnection->sess_extra = 017:54:11.093 - ,98906 ms7_crsr_prepare(): > ctxID = -1.00000017:54:11.093 - ,98906 ms7_crsr_begin(): > ctxID = -1.000000, transmode = 1, db = 2017:54:11.093 - ,98906 Hold thru ms7_trans(): >>>>> ctxID = -1.000000, serverID = 3, dbconn_hdl = 117:54:11.093 - ,98906 Hold thru ms7_trans(): >> database = MAGIC, pConnection->sess_extra = 017:54:11.109 - ,98921 SET IMPLICIT_TRANSACTIONS ON17:54:11.109 - ,98921 STMT: SELECT カウンターコード,カウンター 説 明 ,カウンター 値 FROM MAGIC.dbo.Counters ORDER BY カウンターコード ASC17:54:11.109 - ,98921 STMT: SELECT カウンターコード,カウンター 説 明 ,カウンター 値 FROM MAGIC.dbo.Counters ORDER BY カウンターコード ASC17:54:11.109 - ,98921 Using CURSOR17:54:11.109 - ,98921 ms7_crsr_open(): > ctxID = -1.000000, dbd_hdl = 0, lock = FALSE17:54:11.109 - ,98921 FETCH Read017:54:11.109 - ,98921 RESULT: 117:54:11.109 - ,98921 RESULT: Orders RESULT: 40.00000017:54:11.109 - ,98921 ms7_crsr_fetch(): > ctxID = -1.000000, dbd_hdl = 0, lock = FALSE17:54:11.109 - ,98921 ms7_crsr_fetch(): > ctxID = -1.000000, crsr_hdl = 0第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 20


17:54:11.109 - ,98921 ms7_crsr_close(): > ctxID = -1.000000, transmode = 8, db = 2017:54:11.109 - ,98921 session - 0, in use - 1, write - 1, reusable - 1, results pending - 0,not only for cursors - 117:54:11.109 - ,98921 ms7_trans(): COMMIT17:54:11.109 - ,98921 SET IMPLICIT_TRANSACTIONS OFF17:54:11.109 - ,98921 ms7_trans(): > ctxID = -1.00000017:54:12.671 - ,00484 ms7_crsr_end > ctxID = -1.00000017:54:12.671 - ,00484 ms7_crsr_release(): database = MAGIC, table name = Counters, crsr_hdl = 017:54:12.671 - ,00484 ms7_crsr_release(): > ctxID = -1.000000, file : Counters, dbd->opened = 017:54:12.671 - ,00484 ms7_fil_close():


2.11. 実 行 エンジンエラーログ2.11.1. 実 行 エンジンエラーログとは?実 行 エンジンエラーログは、<strong>Magic</strong> アプリケーションサーバの 実 行 中 に 重 要 な 問 題 が 起 こった 場 合 の、エラー 情報 を 記 録 するものです。<strong>Magic</strong> プログラムがフォアグランドで 動 作 している 場 合 には、 実 行 中 にエラーが 起 こった 場 合 に、ステータス 行 にもエラーメッセージが 表 示 されます。問 題 が 起 こった 場 合 には、このログをチェックすることにより、 問 題 についての 情 報 を 得 ることができます。具 体 的 には、 次 のような 情 報 が 日 時 と 共 に 出 力 されます。• フォアグランドモードであればステータス 行 に 表 示 されるようなエラー・ワーニングメッセージ。これには、レコードやテーブルロック、DBMS のエラー、テンプレートファイルが 開 けない 問 題 、UDF/UDP が 見 つからない、その 他 、<strong>Magic</strong> の 実 行 の 継 続 ができなくなるようなエラーなどが 含 まれます。• 「エラー」コマンドにより 出 力 したメッセージ• ライセンス 関 係 のエラー。• MRB やリクエスタとの 通 信 中 に 起 こった 問 題 の 記 録 。実 行 エンジンエラーログは、プロジェクトを 開 く 以 前 の 問 題 (ライセンスの 不 正 など)に 対 しては、<strong>uniPaaS</strong> 製 品 をインストールしたディレクトリに 出 力 されます。プロジェクトを 開 いて 実 行 中 のエラーに 関 しては、プロジェクトディレクトリに 出 力 されます。2.11.2. 実 行 エンジンエラーログを 出 力 させるには?実 行 エンジンエラーログは、MAGIC.INI のパラメータ GeneralErrorLog で 設 定 されます。デフォルトでは、mgerror.log となっています。この 設 定 を 空 白 にすると、ログは 出 力 されないようになります。GeneralErrorLog = mgerror.log2.11.3. ログファイル 例次 に 示 すのは、エンジンエラーログの 例 です。 各 種 のエラーが 記 録 されているのがわかります。24/06/2010 17:48:09.817 - >> エラー >>>> 処 理 に 失 敗 しました. 他 のユーザか 処 理 にによってレコードが 変 更 されています.データソース:DUPREC_TBL2, program : deftrn24/06/2010 17:57:43.201 - >> エラー >>>> オープンできません.データソース:DUPREC_TBL1, program : deftrn.create TBL124/06/2010 18:12:26.804 - >> エラー >>>> インデックスが 重 複 しています.データソース: DUPREC_TBL1, program : deftrn24/06/2010 19:48:09.817 - >> エラー >>>> インデックスが 重 複 しています.テーブル: DENPYO24/06/2010 20:57:43.201 - >> エラー >>>> MRGSendResponse(): : "LOG_ON_1" ("KAISHA_SYS") (msgid 81)24/06/2010 21:12:26.804 - >> エラー >>>> ライセンス 上 の 接 続 可 能 数 を 超 えました.24/06/2010 22:12:39.590 - >> エラー >>>> インデックスが 重 複 しています.テーブル: W_DENPYO24/06/2010 23:12:41.529 - >> エラー >>>> MRGSendResponse(): ERR-RUN-TIME-EXCEPTION(-139) : "MENU_H"("KAISHA_SYS") (msgid 1236)25/06/2010 01:48:09.124 - >> エラー >>>> ユーザモジュールが 見 つかりません.24/06/2010 02:57:43.567 - >> エラー >>>> ユーザモジュールが 見 つかりません.25/06/2010 08:12:26.436 - >> エラー >>>> ユーザモジュールが 見 つかりません.25/06/2010 12:12:39.742 - >> エラー >>>> ユーザモジュールが 見 つかりません.25/06/2010 16:12:41.589 - >> エラー >>>> テンプレートファイルのオープン 処 理 の 問 題 です. -第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 22


2.12. ログ 出 力 のレベルとは?ゲートウェイログ、あるいは 後 述 のリクエスタログ( 第 3 章 「リクエスタログ」)では、ログの 詳 細 さにより、以 下 の3レベルがあります。( 指 定 文 字 は、 大 文 字 でも 小 文 字 でも 構 いません)指 定 文 字 レベル 説 明C 簡 易 一 番 出 力 量 が 少 ない 設 定 です。オーバーヘッドも 最 小 ですが、 出 力 が 少 なすぎて 必要 な 情 報 が 記 録 されていないことがあります。S サポート 中 間 的 な 量 のログが 出 力 されます。ログの 調 査 を 行 う 場 合 には、 最 初 はこのレベルが 適 当 でしょう。D 開 発 者 詳 細 なログが 出 力 されます。 通 常 はこのレベルのログは 必 要 ありませんが、MSJ で詳 細 な 調 査 を 行 う 必 要 がある 場 合 に、このレベルのログが 必 要 になることがあります。必 要 な 情 報 の 種 類 と、 実 行 速 度 の 許 容 範 囲 とから、 適 当 なログレベルを 選 択 してください。一 般 的 には、 次 のような 選 択 になると 思 われます。• 調 査 の 初 期 段 階 で、「どのあたりに 問 題 がありそうか?」について 当 たりをつける 段 階 では、 全 体 を 見渡 しやすく、 負 荷 も 小 さい C レベルを 選 択 。• 調 査 が 進 んでより 深 い 情 報 が 必 要 になってきたら S レベルを 選 択 。• MSJ のサポートセンターとのやりとりで 必 要 になってきたら D レベルを 選 択 。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 23


2.13. ログの「 同 期 」とは?<strong>uniPaaS</strong> モジュールが 出 力 するログで、「ログの 同 期 」という 設 定 がよく 出 てきます。これは、ログの 各 行 をファイルに 出 力 する 際 に、どのタイミングでディスクへの 書 き 込 みを 行 うか、を 指 定 するもので、ここにはログの 確 実性 ( 異 常 終 了 が 起 こった 場 合 にログがどれだけ 確 実 にファイルに 書 き 込 まれるか?)と、オーバーヘッドのトレードオフがあります。2.13.1. ログの 同 期 の 種 類ログの 同 期 には、 以 下 の3 種 類 があり、 各 ログの 指 定 の 箇 所 において、「 設 定 文 字 」のような 文 字 により 指 定 されます。( 設 定 文 字 は、 大 文 字 でも 小 文 字 でも 構 いません)同 期同 期 なし同 期 ありフラッシュ設 定 文 字NYFデフォルトの 設 定 は「 同 期 なし」であり、ログ 出 力 は、<strong>uniPaaS</strong> モジュールのプロセスのメモリ 内 にバッファリングされます。これは C++ 言 語 のランタイムルーチンで 自 動 的 に 行 われている 処 理 であり、ディスクへの 書 き 込 みのオーバーヘッドを 最 小 にするために、 一 定 量 のデータが 溜 まるまでメモリ 内 に 格 納 しておき、それを 超 えたら初 めてディスクへ 書 き 込 む、という 処 理 を 行 ないます。バッファリングを 行 うと、ログ 出 力 に 伴 なうオーバーヘッド( 処 理 速 度 の 低 下 )を 最 小 限 に 抑 えることができますが、問 題 点 として、プロセスが 異 常 終 了 した 場 合 に、バッファリングされていてまだディスクに 書 き 込 まれていないデータは、プロセスと 一 緒 に 失 われてしまう、という 点 があります。 異 常 終 了 の 原 因 を 追 求 するためにログの 内容 を 確 認 しようとしても、 異 常 終 了 の 直 前 の 最 も 重 要 なタイミングでのデータが 失 われてしまって、 原 因 追 求 が思 うようにできないことになります。 従 って、「 同 期 あり」の 設 定 は、 異 常 終 了 しない 場 合 の 問 題 調 査 の 場 合 に 設定 するのが 適 当 です。「 同 期 あり」にすると、バッファリングは 行 われず、1 行 出 力 するごとに、ファイルのオープン→ 書 き 込 み→ファイルのクローズ という 処 理 が 行 われます。このような 処 理 を 行 うことにより、ログの 各 行 が 確 実 にディスク 上 に 書き 込 まれるようになり、 万 一 異 常 終 了 した 場 合 でも、 直 前 のログまでファイルに 記 録 されるようになります。一 方 、 同 期 を 行 うことの 問 題 点 としては、1 行 ごとにファイルのオープン・クローズが 行 われるために、 非 常 にオーバーヘッドが 大 きくなり、 実 行 速 度 が 遅 くなることが 挙 げられます。 実 行 速 度 が 遅 くなっても、 確 実 にログを記 録 しておいきたい、という 場 合 には 同 期 を 行 うように 設 定 をしてください。同 期 についての 第 三 の 選 択 肢 として、「フラッシュ」という 設 定 があります。これは、バッファリングは 行 わず、ログの 行 ごとにディスクにデータを 書 き 込 むようにするが、 行 ごとのファイルのオープン・クローズは 行 わない、というものです。この 設 定 を 行 うと、 異 常 終 了 時 のログの 確 実 性 とオーバヘッドは、「 同 期 あり」の 場 合 と「 同 期 なし」の 場 合 の 中 間 になります。2.13.2. 同 期 の 設 定 例例 として、アクティビティモニタのログ 出 力 を MAGIC.INI で 設 定 する 場 合 (2.6 「アクティビティ モニタをファイル出 力 させるには?」 参 照 )には、 次 の 行 のようにします。これは、「 同 期 あり」を 指 定 した 場 合 の 例 です。LogSynch = Y第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 24


2.14. RIA クライアントログとは?2.14.1. RIA クライアントログとは?RIA クライアントログは、<strong>uniPaaS</strong> RichClient サーバシステムにおいて、クライアント 側 のモジュール uniRC.exeが 出 力 する 実 行 ログです。これには、クライアント 側 の 通 信 内 容 、イベント 処 理 、データやタスクの 情 報 などのデバッグ 情 報 が 記 録 されます。このログは、 通 常 、<strong>uniPaaS</strong> アプリケーションの 開 発 者 が 読 んで 解 析 する 目 的 のものではありません。 内 部 動作 にかかわる 記 録 がほとんどなので、MSJ のサポートセンターが 問 題 の 分 析 を 行 うためのものです。2.14.2. RIA クライアントログの 設 定 方 法 ( 開 発 時 )開 発 時 、Studio を 使 ってデバッグ 実 行 する 際 には、RIA クライアントログの 指 定 は、MAGIC.INI ファイルの[MAGIC_RIA] セクションで 行 ないます。[MAGIC_RIA]ClientModulesPath=RIAModules\uniRC_1_8_1_440\InternalLogLevel=InternalLogFile=InternalLogSync=MessageDisplayStatisticInformation=Nこのうち、 以 下 のパラメータがログ 設 定 に 関 連 します。パラメータ 名 設 定 可 能 な 値 説 明InternalLogLevel(ログレベル)InternalLogFile(ログファイル 名 )InternalLogSync(ログの 同 期 )SERVERHTTP リクエストと 応 答 のみ。SUPPORT SERVER 指 定 の 内 容 に 加 え、サーバ 間 のデータの 内 容 。GUI クライアントによって 記 録 された GUI メッセージの 一 部 。DEV(なし)ファイル 名NoneSessionMessageクライアントによって 記 録 されるすべてのメッセージ。出 力 しない。指 定 したファイルにログが 出 力 されます。ファイル 名 を 指 定 しなければ、クライアントのデスクトップにuniRC_YYYY_MM_DD[.Process ID].log というファイル 名 で 保 存 されます。ログの 各 行 について、ログファイルへの 同 期 が 行 われます。ログファイルへの 同 期 が 行 われません。このレベルは 最 も 処 理 が 早 くなりますが、uniRC.exe の 異 常 終 了 /ハングアップ 時 にログがすべて 書き 込 まれない 可 能 性 があります。ログファイルは、 各 メッセージ 毎 にオープン/クローズされます。このレベルは、ログの 保 全 性 には 優 れていますが 動 作 が 遅 くなります第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 25


2.14.3. RIA クライアントログの 設 定 方 法 ( 実 行 時 )Studio を 使 わず、RichiClient Server で RichClient プログラムを 実 行 させる 場 合 には、RIA クライアントログの 設定 は、 起 動 用 の.publish.html ファイル 中 で 行 ないます。.publish.html ファイルというのは、<strong>uniPaaS</strong> Studio の「リッチクライアントインターフェースビルドダ」が 作 成 するファイルの 一 つで、デプロイメントマニフェストファイル .application ファイルと 一 緒 に 作 成 されます。 作 成 場 所 は、Studio をインストールしたディレクトリの 下 にある PublishedApplications\(アプリケーション 名 )\ サブディレクトリ 中 に 作 成 されます。ここで 作 成 されるファイル 名 は、 以 下 の 二 つがあります。• (アプリケーション 名 ).application … ClickOnce で 利 用 するデプロイメントマニフェストファイル• (アプリケーション 名 ).publish.html … 起 動 用 HTML ページ下 図 は、MyApp1 という 名 前 のアプリケーションについて 作 成 されたファイルです。このうち、(アプリケーション 名 ).publish.html ファイルをテキストエディタで 開 いてみると、 次 のような 部 分 があります。このうち、key=”InternalLogLevel” 以 下 の 3 行 で、ログについての 指 定 を 行 ないます。( 途 中 省 略 )この 「val="…”」の 部 分 に、それぞれ、ログレベル、ログファイル 名 、ログ 同 期 の 設 定 を 指 定 します。 指 定 するキーワードは、MAGIC.INI で 設 定 する 場 合 (2.14.2 「RIA クライアントログの 設 定 方 法 ( 開 発 時 )」)と 同 じです。第 2 章 <strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ 26


第 3 章 リクエスタログ<strong>Magic</strong> で Web 対 応 アプリケーションや3 階 層 アプリケーションを 作 成 した 場 合 には、クライアント 側 での Web ブラウザ、<strong>Magic</strong> クライアント、サーバ 側 での Web サーバ、<strong>Magic</strong> リクエストブローカ、<strong>Magic</strong> アプリケーションサーバなど、 多 くのソフトウェアコンポーネントが 関 連 して 実 行 しているので、 問 題 の 切 り 分 けが 複 雑 なります。 根 本 的な 原 因 解 明 のためには、 表 面 に 現 れる 現 象 だけでなく、 内 部 で 起 こっていることを 正 確 に 把 握 することが 必 要 となります。<strong>Magic</strong> リクエスタログとは、<strong>Magic</strong> の Web アプリケーションや3 階 層 アプリケーションに 関 係 するモジュール 間 の通 信 のトレースを 保 存 する 機 能 です。このログを 見 ることによって、<strong>Magic</strong> の Web アプリケーションにおいて 障害 が 起 きた 場 合 などに、 原 因 の 追 求 に 役 立 ちます。ここでは、ログの 種 類 と、その 設 定 方 法 について 説 明 します。また、<strong>Magic</strong> のリクエスタログ 機 能 の 他 に、Windows オペレーティングシステムやサードパーティのソフトウェアにも、プログラムの 実 行 状 況 を 監 視 するさまざまなユーティリティがあります。このような 機 能 を 併 せて 活 用 することにより、 内 部 の 動 作 を 把 握 し、 問 題 解 決 に 至 るまでの 時 間 を 大 幅 に 短 縮 することができます。第 3 章 リクエスタログ 27


3.1. リクエスタログにはどんな 種 類 がありますか?リクエスタログには、ログを 出 力 するモジュールによって、 数 種 類 があります。 最 初 に、リクエスタログを 出 力 する <strong>uniPaaS</strong> モジュールについて 説 明 します。3.1.1. <strong>uniPaaS</strong> モジュールの 種 類リクエスタログを 出 力 する <strong>uniPaaS</strong> モジュールとしては、 以 下 のようなものがあります。モジュール 名 ファイル 名 ディレクトリ<strong>uniPaaS</strong> サーバ 実 行 エンジン uniRTE.exe <strong>uniPaaS</strong> ディレクトリリクエストブローカ (MRB) uniRQBroker.exe <strong>uniPaaS</strong> ディレクトリインターネットリクエスタMGrqispi018.dllMGrqcgi018.exeScripts ディレクトリここで、インターネットリクエスタのファイル 名 にある「018」は、<strong>Magic</strong> のバージョン 番 号 で、バージョンが 変 わると 番 号も 変 わります。これらのモジュールは、 右 図 のようにお 互 いに 通 信 を 行 っており、それぞれの 通 信 についてログが 記 録 されることになります。WEBサーバインターネットリクエスタMRB<strong>uniPaaS</strong>サーバ3.1.2. ログの 種 類ログ 出 力 が 設 定 されていると、 上 記 のそれぞれのモジュールが、 他 のモジュールとの 通 信 を 行 うたびに、ログを書 き 込 みます。 次 の 表 は、ログの 種 類 と、それを 出 力 するモジュール 名 、およびログ 出 力 を 設 定 する INI ファイルとを 示 します。ログファイル 出 力 するモジュール 名 読 み 込 む 設 定 ファイルMRB 通 信 ログ リクエストブローカ (MRB) <strong>uniPaaS</strong> ディレクトリの MGRB.INI<strong>uniPaaS</strong> サーバログ <strong>uniPaaS</strong> サーバ 実 行 エンジン <strong>uniPaaS</strong> ディレクトリの MGREQ.INIインターネットリクエスタログ インターネットリクエスタ Scripts ディレクトリの MGREQ.INIこのうち、 実 際 のデバッグで 一 番 役 に 立 つログは、MRB 通 信 ログです。MRB はすべてのリクエストの 交 通 整 理を 行 い、また、<strong>uniPaaS</strong> サーバの 実 行 状 態 を 監 視 しているので、MRB のログを 見 ることにより、 受 け 取 ったリクエストの 内 容 、リクエストを 処 理 したエンジンの 実 行 過 程 、エンジンの 状 態 などを 読 み 取 ることができますので、第 3 章 リクエスタログ 28


リクエストがどのように <strong>uniPaaS</strong> サーバで 処 理 されたかを 追 跡 するためには 最 適 です。<strong>uniPaaS</strong> サーバログおよびインターネットリクエスタログに 記 録 されている 内 容 は、TCP/IP に 近 い 低 レベルの通 信 状 況 なので、ネットワークレベルでの 接 続 の 問 題 がある 場 合 には 原 因 究 明 のために 使 います。ログをとるとそれなりのオーバーヘッドがありますので、 目 的 に 応 じて 選 択 してください。第 3 章 リクエスタログ 29


3.2. リクエスタログ 設 定 時 の 注 意 点 は?リクエスタログを 出 力 するにあたっては、• 出 力 ディレクトリに 関 する 注 意 点• パフォーマンスに 関 する 注 意 点があります。3.2.1. ログ 出 力 ディレクトリに 関 する 注 意 点ログの 出 力 にあたっては、ログ 出 力 先 となるディレクトリを 適 当 に 決 めます。ログ 出 力 先 のディレクトリについては、 次 の 点 に 注 意 してください。• 長 い 間 ログ 出 力 を 行 っていると、ログファイルの 合 計 サイズが 非 常 に 大 きくなるので、ログ 出 力 先 のディレクトリは、 十 分 な 空 き 容 量 のあるドライブ 上 に 指 定 する 必 要 があります。ログのレベルやリクエストの 量 にもよりますが、 数 時 間 で 数 百 MB くらいになることもあります。また、 適 時 、 不 要 なログは 削 除 してください。• ディレクトリのセキュリティ 権 限 の 設 定 に 気 をつけてください。MRB や <strong>uniPaaS</strong> サーバをサービスとして実 行 する 場 合 には、 実 行 ユーザ (デフォルトではローカルシステムアカウント)での 作 成 ・ 書 き 込 み 権限 が 必 要 です。• 同 様 に、インターネットリクエスタは、Web サーバと 同 じ Windows 資 格 情 報 で 実 行 されますので、ログファイルを 出 力 するディレクトリには、Web サーバを 実 行 するユーザ での 作 成 ・ 書 き 込 み 権 限 が 必 要 です。• ログファイルは、 決 まった 大 きさ( 数 MB くらい)になったら、 自 動 的 に 分 割 され、 日 付 と 時 刻 などがファイル 名 に 追 加 され、 保 存 されます。( 例 えば、MRB.LOG が MRB_0210_1906.LOG などのようなファイル 名に 変 更 されます)。• アクティブなログファイルにはなるべく 触 れないようにしてください。アクティブなファイルをテキストエディタで 開 いたり、 別 ディレクトリへコピーなどをしたりすると、 一 時 的 ですが 排 他 ロックがかかるので、それ 以 降 のログ 出 力 がされないようになってしまう 場 合 があります。アクティブなログファイルとは、MRB.LOG などのように、「Log =」パラメータで 指 定 されたファイル 名 のものです。 一 方 、「MRB_0210_1906.LOG 」などのファイル 名 を 持 つファイルは、サイズが 大 きくなったために 分 割 ・ 退 避 されたログファイルで、これはアクティブではありませんので、テキストエディタなどで 開 いても 構 いません。3.2.2. パフォーマンスに 関 する 注 意 点リクエスタログを 出 力 すると、パフォーマンスに 影 響 が 出 ます。 一 般 に、リクエストの 量 が 多 いシステムほど、また、パフォーマンスとのバランスについて、 次 の 項 目 を 実 測 しながら 調 節 してください。 ログ 出 力 レベル: ログのレベルが 高 い( 詳 細 なログ 出 力 を 行 う)ほど、 実 行 速 度 が 遅 くなります。2.12 「ログ 出 力 のレベルとは?」を 参 照 して、 必 要 最 小 限 なログレベルを 設 定 してください。 ログ 同 期 : 異 常 終 了 はハングアップなど、 実 行 モジュールの 動 作 継 続 が 不 可 能 になってしまう 場 合 のデバッグを 目 的 とする 場 合 には、 同 期 =Y の 設 定 が 必 要 になりますが、オーバーヘッドが 非 常 に 大 きいので、 同 期 =フラッシュ (F) でもできないか、 確 認 してください。 実 行 モジュールの 動 作 が 継 続 する 状 況 でのログ 採 取 では、 一 般 には 同 期 =N とするのが 適 当 です。 ログの 種 類 : リクエスタログのうち、 通 常 必 要 となるのは、「MRB 通 信 ログ」(3.3 「MRB 通 信 ログの 目 的 と設 定 は?」)です。TCP/IP レベルでのエラーの 確 認 が 必 要 な 場 合 にだけ、UniPaaS サーバログ (3.5<strong>uniPaaS</strong> サーバログの 目 的 と 設 定 は?)やインターネットリクエスタログ (3.6 インターネット リクエスタ ログの 目 的 と 設 定 は?) をとってください。第 3 章 リクエスタログ 30


3.3. MRB 通 信 ログの 目 的 と 設 定 は?MRB 通 信 ログは、インターネットリクエスタからのリクエスト、<strong>uniPaaS</strong> サーバとの 管 理 上 の 通 信 内 容 など、MRB が 行 う 通 信 内 容 を 記 録 します。MRB は <strong>uniPaaS</strong> サーバシステムの 制 御 の 要 であるので、MRB 通 信 ログを 取 得 することにより、リクエストの処 理 の 流 れを 追 っていくことができます。WEBサーバインターネットリクエスタMRBMRB通 信 ログ<strong>uniPaaS</strong>サーバMRB 通 信 ログを 出 力 させるには?MRB 通 信 ログを 出 力 させるには、MRB モジュール (uniRQBroker.exe) が 存 在 するディレクトリと 同 じディレクトリにある MGRB.INI ファイルで 設 定 します。例 :1. <strong>Magic</strong> ディレクトリ 中 に、MGRB.INI というファイルがありますので、テキストエディタで 開 きます。2. 「Log = ・・・」パラメータの 行 を 探 します。3. デフォルトでは、 行 の 最 初 にセミコロン「;」が 入 っていて、コメントアウトされていますので、セミコロンをはずします。4. 「Log =」 に 続 けて、ログファイル 名 、 同 期 の 有 無 、ログレベルを 指 定 します。 全 体 を 括 弧 「(・・・)」でくくってください。5. ファイルを 保 存 します。6. 設 定 を 有 効 にするためには、MRB を 再 起 動 する 必 要 があります。[MRB_ENV]Log = (C:\TMP\LOG\REQ.LOG Y S)「Log =」 に 続 くパラメータとしては、 以 下 のものを 空 白 文 字 で 区 切 って 指 定 します。パラメータ 順 番 説 明 例1 ログファイル 名 ( 混 乱 を 避 けるため、フルパスで 指 定 するのが 良 いでしょう)C:\TMP\LOG\REQ.LOG2 ファイルの 同 期 の 有 無 を 指 定 します。ログの 同 期 につ Y ( 同 期 あり)いては、2.13 「ログの「 同 期 」とは?」を 参 照 してください。3 ログ 出 力 のレベル: ログの 詳 細 さを 設 定 します。ログ 出力 のレベルについては、2.12 「ログ 出 力 のレベルとは?」を 参 照 してください。S (サポート)第 3 章 リクエスタログ 31


以 下 に、MRB 通 信 ログの 例 を 示 します。これは、MyApp1 という 名 前 のアプリケーションを 実 行 しているエンタープライズサーバで、MyProg1 という 公 開 プログラム 名 のプログラムを 実 行 させたときのログです。- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -,2892,2908 15:39:59,28437,2068,2056 15:52:22,71406 Version <strong>uniPaaS</strong> 1.8 SP1a, Log = C:\TMP\LOG\MRB.LOG, Level = Support/QA, Sync = Reopen,Date = 01/09/2010,2068,2056 ,71406 ==> Version <strong>uniPaaS</strong> 1.8 SP1b Broker (build Mar 3 2010) : starting INITIALIZATION,2068,2056 ,71406 BrokerPort = /5215,2068,2056 ,71406 CommTimeout = 1000,2068,2056 ,71406 ReLoad = TRUE,2068,2056 ,71406 FloatingLicense = FALSE,2068,2056 ,71421 Exe Entry : Online,2068,2056 ,71421 command line : uniRTE.exe /DeploymentMode=R,2068,2056 ,71421 start directory : C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>,2068,2056 ,71421 username, password : ,,2068,2056 ,71421 on startup count : 0,2068,2056 ,71421 on autoload count : 0,2068,2056 ,71421 mrb_incoming_msg(),2068,2228 ( 5 sec),77093 Message ENGINE, -OK (0),2068,2228 ,77093 From engine : MyServer/1501, 192.168.0.1 (pid 660),2068,2228 ,77093 INITIALIZATION,,2068,2228 ,77093 Opened application : "MyApp1",2068,2228 ,77093 pool_app_insert ("MyApp1"),2068,2228 ,77093 mrb_incoming_msg(),2068,2176 15:52:37,86796 ==> mrb_incoming_msg(),2068,2176 (10 sec),86796 Message REQUEST SERVICE, -OK (0),2068,2176 ,86796 Reqid : 0,2068,2176 ,86796 Program : MyProg1 ("MyApp1"), context -1, session 0,2068,2176 ,86796 Priority : 0,2068,2176 ,86796 Client : 127.0.0.1 (pid 2232),2068,2176 ,86796 Filter :,2068,2176 ,86796 ==> Message ENGINE : MyServer/1501 (pid 660),2068,2176 ,86796 log_update(1) IN_PROGRESS, 0, 0, 0,2068,2176 ,86796 log_update(1) DONE, 0, 0, 0,2068,2228 ,86828


3.4. MRB イベントログとは?MRB イベントログというのは、MRB の 活 動 の 中 で、 特 に 重 要 なイベント(MRB の 起 動 、 終 了 、アプリケーションサーバの 起 動 ・ 登 録 ・ 削 除 など)が 記 録 されているログファイルで、MRB のモジュール(uniRQBroker.exe) が 存在 するディレクトリに、mrb_event.log という 名 前 で 保 存 されます。ここには、• MRB の 起 動 と 終 了• [MRB_EXECUTABLES_LIST] に 指 定 したプログラム 自 動 起 動• <strong>Magic</strong> アプリケーションサーバの MRB への 登 録 と 登 録 削 除 ( 異 常 終 了 の 場 合 も 含 む)などの 情 報 が、 日 時 、プロセス ID、その 他 のパラメータと 共 に 記 録 されます。Web 対 応 アプリケーションあるいはリモートコールを 使 うアプリケーションにおいて、<strong>Magic</strong> や MRB の 動 作 に 問題 がある 場 合 にここの 記 録 を 見 ることにより、 問 題 原 因 の 手 がかりを 得 ることができます。MRB イベントログを 出 力 させるための 設 定 はありません。 設 定 せずとも 自 動 的 に 出 力 されます。 逆にいうと、「 出 力 させない」あるいは「ログレベルを 変 更 する」ということはできません。例 : 以 下 に mrb_event.log の 例 を 示 します。 赤 字 で 示 したところは、<strong>Magic</strong> のアプリケーションサーバが 異 常 終了 したエラー 記 録 の 部 分 です。1548 23:21:56,81718 28/08/2010 Startup (Version <strong>uniPaaS</strong> 1.8 SP1a, build Dec 2 2009)1548 ,81718 28/08/2010 BrokerPort = /52151548 ,81718 28/08/2010 CommTimeout = 10001548 ,81718 28/08/2010 ReLoad = TRUE1548 23:21:59,84448 28/08/2010 Remote Spawn on "192.168.1.3/5225" ("MyApp1") : "OK" (0) (args: -[MAGIC_SERVERS]__internal_broker=2,MyEntServer/5215,,[[[RemoteApp1]]]********,,,1 -MessagingServer=__internal_broker-ActivateRequestsServer=Y)1548 23:22:01,86975 28/08/2010 Remote Spawn on "192.168.1.3/5235" ("MyApp1") : "OK" (0) (args: -[MAGIC_SERVERS]__internal_broker=2,MyEntServer/5215,,[[[RemoteApp3]]]********,,,1 -MessagingServer=__internal_broker-ActivateRequestsServer=Y)1548 23:22:03,89299 28/08/2010 Remote Spawn on "192.168.1.3/5245" ("MyApp1") : "OK" (0) (args: -[MAGIC_SERVERS]__internal_broker=2,MyEntServer/5215,,[[[RemoteApp5]]]********,,,1 -MessagingServer=__internal_broker-ActivateRequestsServer=Y)3544 ,89299 28/08/2010 Error: "TCP/IP: Connection reset" (-144) (/0)2880 23:22:04,89970 28/08/2010 Enterprise Server MyEntServer/1612 : Inserted (pid 2424 , UniCacklePlus ,license 0 threads | 0 requests, "RemoteApp1")3424 23:22:06,91514 28/08/2010 Enterprise Server MyEntServer/1515 : Inserted (pid 4016 , UniCacklePlus ,license 0 threads | 0 requests, "RemoteApp2")3244 23:22:07,93106 28/08/2010 Enterprise Server MyEntServer/1607 : Inserted (pid 3332 , UniCacklePlus ,license 0 threads | 0 requests, "RemoteApp3")2380 23:32:41,26517 28/08/2010 ...... Enterprise Servers shutdown: ......2380 ,26641 28/08/2010 Enterprise Server MyEntServer/1515 : Instructed to terminate : "OK" (0)2380 ,26641 28/08/2010 Enterprise Server MyEntServer/1515 : Removed : "OK" (0)3424 ,26719 28/08/2010 Enterprise Server MyEntServer/1515 : Notified termination2380 ,27016 28/08/2010 Enterprise Server MyEntServer/1612 : Instructed to terminate : "OK" (0)2380 ,27016 28/08/2010 Enterprise Server MyEntServer/1612 : Removed : "OK" (0)2880 ,27094 28/08/2010 Enterprise Server MyEntServer/1612 : Notified termination2380 ,27265 28/08/2010 Enterprise Server MyEntServer/1830 : Instructed to terminate : "OK" (0)2380 ,27265 28/08/2010 Enterprise Server MyEntServer/1830 : Removed : "OK" (0)2380 ,27265 28/08/2010 ...... Broker shutdown: ......1548 23:32:48,33989 28/08/2010 ...... Shutdown completed ......第 3 章 リクエスタログ 33


3.5. <strong>uniPaaS</strong> サーバログの 目 的 と 設 定 は?<strong>uniPaaS</strong> サーバログは、<strong>uniPaaS</strong> サーバが 出 力 するログファイルで、インターネットリクエスタや MRB との 通 信 の 状 況 を 記 録 しています。<strong>uniPaaS</strong> サーバ 動 作 中 に、 接 続 が 不 安 定 になってエラーが 発 生 するなど、ネットワークレベルの 問 題 が 疑 われる 場 合 に 収 集 して 確 認します。MRB 通 信 ログを 出 力 させるには?WEBサーバインターネットリクエスタMRBUniPaaS サーバログは、<strong>uniPaaS</strong> サーバモジュール uniRTE.exe が存 在 するディレクトリ (<strong>uniPaaS</strong> のインストールディレクトリ) と 同 じディレクトリにある、MGREQ.INI ファイルで 指 定 します。<strong>uniPaaS</strong>サーバログ<strong>uniPaaS</strong>サーバ1. <strong>uniPaaS</strong> ディレクトリ 中 に、MGreq.ini というファイルがありますので、テキストエディタで 開 きます。2. 「Log = ・・・」パラメータの 行 を 探 します。3. デフォルトでは、 行 の 最 初 にセミコロン「;」が 入 っていて、コメントアウトされていますので、セミコロンをはずします。4. 「Log =」 に 続 けて、ログファイル 名 、 同 期 の 有 無 、ログレベルを 指 定 します。5. ファイルを 保 存 します。6. 設 定 を 有 効 にするためには、<strong>uniPaaS</strong> サーバを 再 起 動 する 必 要 があります。例 :[REQUESTER_ENV]Log = C:\TMP\LOG\REQ.LOG Y S「Log =」 に 続 くパラメータとしては、 以 下 のものを 空 白 文 字 で 区 切 って 指 定 します。パラメータ 順 番 説 明 例1 ログファイル 名 ( 混 乱 を 避 けるため、フルパスで 指 定 するのが 良 いでしょう)C:\TMP\LOG\REQ.LOG2 ファイルの 同 期 の 有 無 を 指 定 します。ログの 同 期 につ Y ( 同 期 あり)いては、2.13 「ログの「 同 期 」とは?」を 参 照 してください。3 ログ 出 力 のレベル: ログの 詳 細 さを 設 定 します。ログ 出力 のレベルについては、2.12 「ログ 出 力 のレベルとは?」を 参 照 してください。S (サポート)第 3 章 リクエスタログ 34


3.6. インターネット リクエスタ ログの 目 的 と 設 定 は?インターネット リクエスタ ログは、インターネット リクエスタが MRBや <strong>uniPaaS</strong> サーバにリクエスト 処 理 を 依 頼 するために 行 う 通 信 内 容を 記 録 するものです。Web サーバ 経 由 でクライアントから 受 け 取 ったリクエストを 処 理 する際 に、MRB や <strong>uniPaaS</strong> サーバとの 接 続 が 不 安 定 になってエラーが発 生 するなど、ネットワークレベルの 問 題 が 疑 われる 場 合 に 収 集 して 確 認 します。インターネット リクエスタ ログを 出 力 させるには?WEBサーバインターネットリクエスタインターネットリクエスタログMRB1. インターネットリクエスタのあるスクリプト ディレクトリの 位 置を 確 認 します。デフォルトでは、<strong>uniPaaS</strong> をインストールしたディレクトリの 直 下 にある Scripts という 名 前 のサブディレクトリです。2. そのディレクトリにある MGREQ.INI ファイルを 開 きます。3. 「Log = ・・・」パラメータの 行 を 探 します。4. デフォルトでは、 行 の 最 初 にセミコロン「;」が 入 っていて、コメントアウトされていますので、セミコロンをはずします。5. 「Log =」 に 続 けて、ログファイル 名 、 同 期 の 有 無 、ログレベルを 指 定 します。 全 体 を 括 弧 「(・・・)」でくくってください。6. ファイルを 保 存 します。7. 設 定 を 有 効 にするためには、IIS を 再 起 動 する 必 要 があります。<strong>uniPaaS</strong>サーバ例 :[REQUESTER_ENV]Log = C:\TMP\LOG\INETREQ.LOG Y S「Log =」 に 続 くパラメータは、<strong>uniPaaS</strong> サーバログの 場 合 と 同 じです (3.5 「<strong>uniPaaS</strong> サーバログの 目 的 と 設 定は?」 参 照 )。ここで 指 定 するログファイル 名 は、<strong>Magic</strong> ディレクトリの MGreq.ini あるいは MGrb.ini に 指 定 したのとは 別 のファイルを 指 定 することをお 勧 めします。 同 じファイルを 指 定 しても 同 期 は 取 られますが、多 くのプログラムからのログが 混 在 することになり、ログを 読 むのが 難 しくなってしまうからです。第 3 章 リクエスタログ 35


第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ本 章 では、<strong>uniPaaS</strong> 製 品 に 添 付 されている 各 種 ユーティリティの 目 的 と 使 い 方 について 説 明 します。種 類 出 力 内 容 設 定 GUI ツール CMD ツールMRB/リクエストの 状 態 コマンドラインリクエスタ (コマンドライン 引 数 ) ○ライセンス 利 用 状 況(FlexLM)ライセンス 利 用 状 況(<strong>uniPaaS</strong>)MRB モニタFlexLM ユーティリティ Lmtools ○ライセンス チェック ユーティリティmgstations○○このうち、FlexLM ユーティリティについては、インストールガイドの「トラブルシューティング」に 詳 しい 解 説 があるので、 本 書 では 省 略 します。また、ライセンス チェック ユーティリティ (mgstations) については、リファレンスガイド 「ユーティリティ →MGSTATIONS」 に 説 明 があるので、これも 本 書 では 省 略 します。第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 36


4.1. コマンドラインリクエスタの 目 的 と 利 用 方 法 は?4.1.1. コマンドラインリクエスタとは?コマンドラインリクエスタというのは、MRB に 対 してリクエストを 発 行 するプログラムで、コマンドライン(DOS プロンプト)から 実 行 するので、「コマンドライン」という 名 がついています。このプログラムは <strong>Magic</strong> をインストールしたディレクトリにインストールされ、 名 前 は MGRQCMDL.EXE です。コマンドラインリクエスタを 使 って、MRB モニタで 表 示 されるのと 同 様 な 情 報 を 表 示 させることができます。 一 般には、MRB モニタは MRB に 大 きな 負 荷 を 掛 ける 傾 向 にあるのに 対 し、コマンドラインリクエスタは MRB にかける 負 荷 が 小 さくすることができますので、MRB の 状 態 を 監 視 するには、MRB モニタを 使 うより、コマンドラインリクエスタを 推 奨 します。コマンドラインリクエスタが 持 つ 機 能 には 多 くのものがありますが、ここでは MRB の 情 報 を 取 得 するための 基 本的 なコマンド 使 用 法 について 説 明 します。 詳 しくは、<strong>Magic</strong> 添 付 のマニュアルを 参 照 してください。4.1.2. 現 在 実 行 中 の <strong>uniPaaS</strong> サーバの 一 覧 を 見 るには?現 在 実 行 中 (MRB の 管 理 下 にある)<strong>Magic</strong> アプリケーションサーバの 一 覧 を 見 るには、「-query=rt」オプションを使 います。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>> mgrqcmdl -query=rtEnterprise Servers of (MyServer/5215)----------------------------------------------------------------------------# EnterpriseServer Pid Status License Application============================================================================================1| MyServer/1501 192.168.0.1 3120 Avail Idle : 0 5 5 , 0 , 51 | MyApp12| MyServer/1797 192.168.0.1 1648 Avail Idle : 0 5 5 , 0 , 49 | MyApp1この 例 では、 次 のことがわかります。• 二 つのエンタープライズサーバが 起 動 している。• それぞれ MyApp1 というアプリケーションを 実 行 している (Application 欄 )各 行 は、ひとつのエンタープライズサーバについての 情 報 を 表 していて、それぞれ、 次 のことを 意 味 しています。(「 値 」は 例 の1 行 目 )。欄 値 意 味# 1 実 行 エンジンの 番 号Enterprise Server MyServer/1501 192.168.0.1 実 行 エンジンが 実 行 されているホスト 名 と、エンジンの 待 ち受 けポート 番 号 、IP アドレス。Pid 3120 実 行 エンジンのプロセス ID。Status Avail Idle 実 行 エンジンの 実 行 状 態 。License 0 5 5 , 0 , 51 ( 後 述 )Application MyApp1 実 行 エンジンが 開 いているアプリケーション 名 。第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 37


「License」 欄 の 数 字 は、5つの 数 字 ( 上 記 の 例 の1 番 目 のサーバでは、「0 5 5 , 0 , 51」 )からなっていますが、それぞれ、 次 のことを 意 味 しています。欄 値 意 味1 0 現 在 実 行 中 のスレッド 数 : 実 行 中 のスレッドはなし。2 5 ピークスレッド 数 : 最 大 5 スレッドまで 実 行 された。3 5 ライセンスで 割 り 当 てられているスレッド 数 : 5 スレッドまで 割 り 当 てられている。4 0 利 用 可 スレッド 数 : 0 の 場 合 には、 割 り 当 てられている 最 大 スレッド 数 まで。5 51 処 理 したリクエスト 数 : 現 在 までに、51 リクエストを 処 理 した。4.1.3. リクエストの 統 計 情 報 を 見 るには?リクエストによってマシンに 掛 かっている 統 計 情 報 を 見 るには、「-query=load」 オプションを 利 用 します。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>> mgrqcmdl -query=loadStatistics of (MyServer/5215, 10:51:24)----------------------------------------------------------------------------AverageQueue Time Total Pending Executing Completed Failed==========================================================================0.09 112 0 0 110 2この 例 では、 次 のことがわかります。欄 値 説 明Queue Time 0.09 リクエストの 平 均 待 ち 時 間 は 0.09 秒 (すぐに 処 理 されているということなので、かなり 余 裕 がある 状 態 )Total 112 今 までに 受 け 付 けたリクエスト 数Pending 0 待 ち 行 列 に 待 たされているリクエスト 数 はなし。Executing 0 現 在 実 行 中 のリクエストはなし。Completed 110 成 功 して 完 了 したリクエスト 数 は 110。Failed 2 何 らかの 理 由 で 失 敗 したリクエスト 数 は 2。4.1.4. 個 々のリクエストについて 表 示 させるには?MRB 内 に 記 録 されているリクエストを 表 示 するには、「-query=log」オプションを 利 用 します。ここに 表 示 されるリクエストは、 処 理 が 完 了 ( 成 功 、 失 敗 を 問 わず)したもの、 処 理 中 のもの、 未 処 理 のものすべてが 含 まれます。一 般 にはリクエスト 数 は 何 千 何 万 という 数 になるので、 出 力 するリクエスト 数 に 制 限 をつけるのが 一 般 的 です。ここでは、• 最 近 の 20 個 のリクエストだけを 表 示 する• リクエスト ID を 特 定 して、 一 つのリクエストに 関 する 情 報 だけを 表 示 させる• リクエスト ID の 範 囲 を 指 定 して、 複 数 のリクエストに 関 する 情 報 を 表 示 させる第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 38


という 場 合 のやりかたを 示 します。例 1: 最 近 のリクエスト 20 個 の 表 示最 近 の 20 個 のリクエストを 表 示 させるには、 単 に 「-query=log」と 指 定 します。リクエストの 古 い 順 に(リクエストID の 昇 順 で) 表 示 されます。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>>mgrqcmdl -query=logLog of requests (MyServer/5215, 16:38:46)----------------------------------------------------------------------------# Request Status Start Elapsed Completion CodesId Time (sec.) (Mri, Runtime, Dbms)===============================================================================1 | 100 |DONE | 01/09 16:31:40 | 0 | -OK (0) 0 0Program : "e" ("MyApp1")Priority : 0Client : MyServer (pid 3576), EnterpriseServer : MyServer/1501= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =2 | 99 |DONE | 01/09 16:31:40 | 0 | -OK (0) 0 0Program : "e" ("MyApp1")Priority : 0Client : MyServer (pid 3576), EnterpriseServer : MyServer/1797= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =・・・ ( 以 下 省 略 )例 2: リクエスト ID を 指 定 して 表 示調 べたいリクエストのリクエスト ID がわかっている 場 合 には、そのリクエスト ID を 指 定 して 表 示 させます。これには、「-query=log=(リクエスト ID)」というパラメータを 使 います。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>>mgrqcmdl -query=log=132Log of requests (MyServer/5215, 16:52:40)----------------------------------------------------------------------------# Request Status Start Elapsed Completion CodesId Time (sec.) (Mri, Runtime, Dbms)===============================================================================1 | 132 |DONE | 01/09 16:51:13 | 0 | -OK (0) 0 0Program : "e" ("MyApp1")Priority : 0Client : MyServer (pid 2420), EnterpriseServer : MyServer/1782= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 39


C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>> mgrqcmdl -query=appApplications supported by (MyServer/5215)----------------------------------------------------------------------------# Application EnterpriseServer========================================================1 | MyApp1 | MyServer/15012 | MyApp1 | MyServer/15944.1.7. 別 マシンの MRB を 指 定 するには?今 までの 例 では、 同 一 サーバマシン 上 で 実 行 している MRB に 対 してコマンドラインリクエスタを 使 っていました。もし、 別 マシンに MRB がある 場 合 、あるいは 同 一 サーバ 上 でも 別 ポート 番 号 で 複 数 の MRB が 動 作 している 場合 には、MRB のホスト 名 ・ポート 番 号 を 明 示 的 に 指 定 してやる 必 要 があります。デフォルトの 設 定 (つまり、MRB を 明 示 的 に 指 定 しない 場 合 )では、コマンドラインリクエスタは、カレントディレクトリ 内 にある MGREQ.INI に MessagingServer パラメータで 指 定 されている MRB に 対 してリクエストを 発 行 します。例 1: 以 下 の MGREQ.INI の 例 は、MRB はホスト 名 MyServer のサーバマシン 上 で、ブローカポート 5215 で 実行 している 場 合 です。[REQUESTER_ENV]Gateway = 1MessagingServer = MyServer/5215MRB が 同 一 の PC 上 で 実 行 している 場 合 には、ホスト 名 およびその 直 後 のスラッシュ 文 字 「/」は 省 略 することができます。例 2: 以 下 の 例 は、MRB が 同 一 の PC 上 で、ブローカポート 番 号 5215 で 実 行 している 場 合 の 例 です。[REQUESTER_ENV]Gateway = 1MessagingServer = 5215もし、MGREQ.INI に 指 定 してある MRB 以 外 の MRB を 指 定 して、 要 求 を 発 行 するには、「-host=(ホスト 名 )」および「-port=(ブローカポート 番 号 )」で 指 定 します。例 3: ホスト 名 MyServer、ブローカポート 番 号 5215 で 実 行 している MRB の 配 下 で 実 行 中 のサーバエンジンの一 覧 を 表 示 させるには、 次 のようにします。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>> mgrqcmdl -host=MyServer -port=5215 -query=rtEnterprise Servers of (MyServer/5215)----------------------------------------------------------------------------# EnterpriseServer Pid Status License Application============================================================================================1| MyServer/1501 192.168.0.1 3120 Avail Idle : 0 0 5 , 0 , 0 | MyApp12| MyServer/1797 192.168.0.1 1648 Avail Idle : 0 0 5 , 0 , 0 | MyApp1C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>>第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 41


4.1.8. コマンドラインリクエスタのパラメータ 一 覧 を 見 るには?コマンドラインリクエスタには、このほかにも 多 くのパラメータを 指 定 できます。MGRQCMDL.EXE をパラメータなしで 起 動 すると、 下 記 のような 簡 単 なヘルプが 出 てきます。コマンドラインリクエスタの 詳 細 な 情 報 については、<strong>uniPaaS</strong> 製 品 のリファレンスマニュアルで 「 分散 アプリケーション > アプリケーションパーティショニング > コマンドラインリクエスタ」を 参 照 してください。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>> mgrqcmdlCommand Line Requester, Version <strong>uniPaaS</strong> 1.8 SP1a-0 12-345-6789-APPNAME -PRGNAME : Application and program names[-ARGUMENTS ] : Program arguments, separated by commas[-VARIABLES ] : Named variables, separated by commas[-PRIORITY ] : Priority of execution (0 - 9)[-USERNAME ] : Username required by the application[-PASSWORD ] : Password required by the application or by the Broker[-FILENAME ] : Name of a file to contain the request results[-NOWAIT ] : Asynchronous request mode[-HOST, -PORT] : Broker's addressData types : -A : alphanumeric -U : NULL -L : logical (True/False)-N : integer -F : float -D : doubleExample : -APPNAME=Pet Shop Demo -PRGNAME=Orders List -PRIORITY=4-USERNAME=supervisor -PASSWORD=mypass -FILENAME=MGRQCMDL.OUT-ARGUMENTS=string value,-N1000,-LTRUE,-U-VARIABLES=var 1=string value,var 2=-N1000,var 3=-LTRUE-QUERY : Query requests -RT : [(appname)] Registered Enterprise ServersAPP : [(host/port)] Applications supported by Enterprise Server(s)CTXS : (host/port) Contexts supported by Enterprise ServerQUEUE : [(appname)] Requests in queueLOG : [(appname)][=reqid[-reqid]] Historic informationLOAD : [(appname)] Statistics about application or the BrokerPENDING : = : Number of requests pending before the request-REQID : = : Request manipulation (priority, removal)-CLEAR : Removing a request from the queue-EXE : =[/] Activating an executable by the Broker-TERMINATE : Termination requests -ALL : all Enterprise Servers, including the BrokerRTS : all Enterprise Servers, but not the Brokerhost/port : a specific Enterprise ServerTIMEOUT : terminate the engine within this time period (seconds)Examples : -QUERY=RT -QUERY=RT(Pet Shop Demo) -QUERY=APP(my_server/1500)-QUERY=QUEUE -QUERY=LOG=100-90 -QUERY=LOAD(Pet Shop Demo)-EXE=Background//StartApplication=1-TERMINATE=ALL -TERMINATE=my_server/1500-CLEAR -REQID=1第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 42


4.2. ブローカモニタ (MRB モニタ)で 何 ができますか?ブローカモニタ (MRB モニタ)は、ブローカの 状 態 を 監 視 するためのツールです。 前 述 のコマンドラインリクエスタが、コマンドラインからのツールであったのに 対 し、ブローカモニタは GUI を 備 えたツールとなっていて、 一 定 間隔 で 表 示 を 自 動 的 に 更 新 しますブローカモニタは 便 利 なツールではありますが、 定 期 的 に 多 くの 情 報 を 取 得 するため、MRB にかかる 負 担 は 大 きく、 運 用 に 支 障 を 来 たすことがあります。 基 本 的 に 開 発 環 境 やテスト 環 境 で 利 用 し、運 用 環 境 では 常 時 使 わないようにしてください。ブローカモニタを 常 時 利 用 している 際 に、サーバで 不 定 期 に 問 題 が 起 こるようなことがあったら、まずはブローカモニタの 利 用 を 停 止 して 様 子 を 見 てください。ブローカモニタをどうしても 使 いたい 場 合 には、 次 の 設 定により MRB にかかる 負 担 を 軽 減 することができます。 メニュー 「オプション → 再 表 示 設 定 」から、「 再 表 示間 隔 」を 長 くとる ( 例 : 300 秒 )。また、「 表 示 リクエスト 数 」を 少 なめにする ( 例 : 30) 「コンテキスト」 画 面 を 閉 じる。ブローカモニタの 使 い 方 の 詳 細 については、リファレンスマニュアル 「 分 散 アプリケーション →Broker モニタ」を 参 照 してください。4.2.1. 起 動 方 法ブローカモニタは、Windows の「スタート」メニューから 「<strong>uniPaaS</strong> Enterprise Server <strong>V1Plus</strong> (インストールした<strong>uniPaaS</strong> 製 品 名 ) → ブローカとリクエスタ → Broker モニタ」 を 選 んで 起 動 します。起 動 直 後 には、 次 のような 画 面 が 表 示 されます。第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 43


4.2.2. アプリケーションサーバ現 在 この MRB の 配 下 で 実 行 中 のアプリケーションサーバ (Enterprise Server、あるいは Richclient Server) の一 覧 を 表 示 します。コマンドラインリクエスタでの -query=rt に 相 当 します。4.2.3. リクエストこの MRB が 受 け 付 けたリクエストの 一 覧 を 表 示 します。コマンドライアンリクエスタでの -query=log に 相 当 します。4.2.4. 統 計この MRB が 受 け 付 けたリクエストの 状 態 についての 統 計 グラフを 表 示 します。コマンドラインリクエスタでの -query=load に 相 当 します。第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 44


4.2.5. 利 用 可 能 アプリケーションこの 画 面 は、「アプリケーションサーバ」 画 面 と 連 動 しています。「アプリケーション サーバ」 画 面 に 表 示 されている <strong>uniPaaS</strong> サーバのインスタンスをマウスクリックで 選 択 します。すると、そのアプリケーションサーバで 実 行 されているアプリケーションが 「 利 用 可 能 アプリケーション」 画 面 に表 示 されます。コマンドラインリクエスタでの -query=app に 相 当 するものです。4.2.6. コンテキスト「コンテキスト」 画 面 も「アプリケーションサーバ」 画 面 と 連 動 しています。「アプリケーション サーバ」 画 面 に 表 示 されている <strong>uniPaaS</strong> サーバのインスタンスをマウスクリックで 選 択 します。すると、そのアプリケーションサーバで 保 持 されているコンテキストの 一 覧 が 表 示 されます。ブローカモニタが MRB に 大 きな 負 荷 を 与 えて 動 作 を 不 安 定 にすることがあるので、「コンテキスト」画 面 はできるだけ 閉 じておくことを 推 奨 します。第 4 章 <strong>uniPaaS</strong> 製 品 添 付 のユーティリティ 45


第 5 章 ダンプファイルダンプファイルというのは、Windows 上 で 実 行 しているプログラムについて、ある 特 定 の 時 点 でのプロセスのメイン メモリの 状 態 と、プロセスに 関 連 する 情 報 をハードディスクに 保 存 したものです。ダンプファイルの 種 類 にもよりますが、プロセスの 仮 想 空 間 のデータを 保 存 するので、 最 大 数 百 MB にもなることがあります。ダンプファイルは、プログラムの 実 行 に 異 常 ( 異 常 終 了 、ハングアップ、 不 明 なエラーなど)があった 場 合 に、 原因 を 解 析 するのに 非 常 に 有 効 ですので、<strong>uniPaaS</strong> システム 実 行 中 に 問 題 が 起 きた 場 合 に、MSJ のサポートセンターからダンプファイルの 取 得 を 依 頼 することがあります。本 章 では、ダンプファイルの 取 得 の 方 法 について 説 明 します。ダンプファイルの 解 析 には、プログラムのソースコードをはじめとして、さまざまな 内 部 情 報 が 必 要になるので、ダンプファイルの 解 析 は MSJ において 行 ないます。<strong>uniPaaS</strong> アプリケーションの 開 発者 が 解 析 を 行 うことはできません。ダンプファイルの 作 成 は、Windows の 機 能 ですので、 技 術 的 詳 細 については、Microsoft 社 の Webサイト、あるいはインターネットの 検 索 で「Windows ダンプファイル」などをキーワードとして 検 索 すれば 多 数 見 つけることができます。第 5 章 ダンプファイル 46


5.1. ダンプファイルを 取 得 するタイミングと 方 法 は?ダンプファイルは、プログラムの 実 行 中 にある 一 時 点 におけるプロセスの 状 態 をファイルに 保 存 するものですが、効 果 的 に 解 析 するには、 取 得 するタイミングが 重 要 です。一 般 には、 問 題 が 起 こった 時 点 でのプロセスの 状 態 をダンプファイルにとります。 例 えば、• プログラムが 異 常 終 了 する。(クラッシュ)• プログラムが 反 応 しなくなる。(ハングアップ)• エラーダイアログが 表 示 される。などです。ダンプファイルを 取 得 するための 方 法 は、Windows のバージョンにより 異 なります。• Windows XP および Windows Server 2003 では、ワトソン 博 士 を 使 います。• Windows Vista、Windows Server 2008、Windows 7 では、タスクマネージャを 使 います。以 下 、(1) 異 常 終 了 時 にダンプファイルを 作 成 させる 方 法 、(2) ハングアップ 時 にダンプファイルを 作 成 させる 方法 、のそれぞれについて、 各 Windows バージョンに 分 けて 説 明 します。エラーダイアログが 表 示 される 場 合 には、ハングアップの 場 合 と 同 じ 方 法 により、ダンプファイルを 作 成 することができます。第 5 章 ダンプファイル 47


5.2. サーバモジュールのダンプファイル 取 得 時 の 注 意 事 項<strong>uniPaaS</strong> のサーバ 製 品 (Enterprise Server、RichClient Server) をマルチスレッドのバックグラウンドモードで 実行 している 場 合 には、 以 下 のパラメータを MAGIC.INI に 設 定 してください。[MAGIC_SPECIALS]ExceptionMessageBoxDisplay = Yこのパラメータは、<strong>uniPaaS</strong> 実 行 エンジンのエラー 処 理 の 方 法 を 制 御 します。N の 場 合 (デフォルト)では、<strong>uniPaaS</strong> 実 行 エンジンがマルチスレッドでアプリケーションを 実 行 中 に、あるスレッドで 実 行 を 継 続 できなくなるような 例 外 状 態 (メモリアクセス 違 反 など) が 発 生 した 場 合 、そのスレッドは 終 了 させるけれども、エンジン 自 体 はリカバリー 処 理 を 行 って、 継 続 して 他 のスレッドの 処 理 の 実 行 を続 けます。これは、 通 常 の 運 用 時 に 適 当 な 設 定 であり、 一 つのスレッドの 異 常 が 他 のスレッドの 実 行 に 影響 を 与 えないようになり、 可 用 性 が 向 上 します。Y の 場 合 には、 例 外 状 態 が 発 生 した 場 合 には、その 後 の 処 理 は Windows のデフォルトのエラー 処 理 に任 せます。メモリアクセス 違 反 などの OS レベルでの 例 外 が 起 こった 場 合 には、 通 常 、Windows はダンプファイルを 作 成 してそのプロセスを 停 止 します。このとき、 同 時 に 実 行 していた 他 のスレッドや、そのプロセス(インスタンス)に 格 納 されていたコンテキストなどは、プロセスの 終 了 と 同 時 に 中 断 ・ 破 棄 されます。このため、 運 用 上 の 可 用 性 は 低 くなります。通 常 の 運 用 時 には N に 設 定 しておくのが 適 当 ですが、この 設 定 では 異 常 事 態 が 発 生 した 場 合 にリカバリ 処 理が 働 いてダンプファイルが 作 成 されず、「ダンプファイルを 調 査 して 原 因 を 追 求 する」という 方 法 が 使 えなくなってしまいます。このため、デバッグ 時 に 限 っては、クラッシュダンプを 作 成 するために、Y に 設 定 して、あえてプロセスを 強 制 終 了 させるようにする 必 要 があります。ただし、この 設 定 では、 上 記 のように 運 用 上 の 可 用 性 が 低 くなるため、デバッグ 時 に 限 り 設 定 するようにして、調 査 が 終 わったら、 元 通 り N にする (あるいはパラメータをコメントアウトする)ようにしてください。第 5 章 ダンプファイル 48


5.3. 異 常 終 了 時 にダンプファイルを 作 成 させるには?(Windows XP および Windows Server 2003 の 場 合 )Windowx XP および Windows Server 2003 では、ワトソン 博 士 drwtsn32.exe をデフォルトのデバッガとしてWindows に 登 録 しておくことにより、プログラムが 異 常 終 了 した 際 に 自 動 的 にダンプファイルを 作 成 するように設 定 しておくことができます。ワトソン 博 士 をデフォルトのデバッガとして 登 録 するには4. Administrator 権 限 のあるユーザとしてログインします。5. コマンドプロンプト(DOS 窓 )で、「drwtsn32 -i 」とタイプします。 右 図 のようなダイアログが 表 示 されます。6. コマンドプロンプトから、 今 度 は 引 数 なしで「drwtsn32」 を 実 行 すると、 右 図 のような 設 定 ダイアログが 表 示 されます。次 のような 設 定 を 行 ってください:「ログファイルパス」のファイル 名 、および「クラッシュダンプ」 欄 のパス 名 は、 十 分 な 空 き 容 量 のあるディスク 上 にあることを 確 認 してください。クラッシュダンプの 種 類 : 完 全メッセージボックスによる 通 知 : チェックするクラッシュダンプファイルの 作 成 : チェックするこれで 設 定 は 終 了 です。この 設 定 は Windows のレジストリに 登 録 されますので、 一 度 だけ 行 えば、その 後 ずっと 有 効 です。この 設 定 を 行 って、 実 際 にプログラムのテスト・ 運 用 を 行 ないます。 実 行 中 に、アクセス 違 反 、ハンドルされない例 外 などが 発 生 してプロセスが 異 常 終 了 したら、 次 の 手 順 でダンプファイルを 採 取 してください。第 5 章 ダンプファイル 49


プログラムが 異 常 終 了 した 場 合 には・・・1. プログラムが 異 常 終 了 した 場 合 には、Windowsは 自 動 的 にワトソン 博 士 を 起 動 し、 右 図 のようなダイアログが 表 示 されます。ここのボタンが「キャンセル」になっている 間 は、ログファイルを 作 成 中 ですので、ボタンを 押 さないでください。2. しばらくすると ( 最 大 1 分 程 度 )、ボタンが「キャンセル」から「OK」に 変 わります。ボタンが「キャンセル」から「OK」に 変 わったら、ログファイルおよびクラッシュダンプファイルの 作 成は 完 了 ですので、OK を 押 してワトソン 博 士 を 終了 させてください。作 成 されたダンプファイルは、ワトソン 博 士 の「クラッシュダンプ」 欄 に 指 定 されたディレクトリに 保 存 されています。デフォルトでは、Windows XP ではC:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson\user.dmpあるいは、Windows Server 2003 ではC:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Dr Watson\user.dmpです。第 5 章 ダンプファイル 50


5.4. 異 常 終 了 時 にダンプファイルを 作 成 させるには?(Vista、Windows 7、Windows Server 2008 の 場 合 )Windows Vista、Windows 7、Windows Server 2008 の 場 合 には、ワトソン 博 士 はなく、レジストリにデフォルトのデバッガを 設 定 します。ダンプファイル 作 成 の 設 定 を 登 録 するには1. レジストリエディッタを 開 いて、 次 のようにキーを 設 定 します。キー: HKEY_LOCAL_MACHINE\<strong>Software</strong>\Microsoft\Windows\Windows Error Reporting\LocalDumpsダンプファイルを 格 納 する 場 所 値 の 名 前 : DumpFolder上 記 場 所 に 格 納 できるダンプファイルの 最 大 数 。種 類 :値 のデータ:値 の 名 前 :種 類 :値 のデータ:REG_EXPAND_SZc:\CrashDumpsDumpCountREG_DWORDダンプのレベル 値 の 名 前 : DumpType種 類 :値 のデータ:0xaREG_DWORD0x2ここで、「ダンプファイルを 格 納 する 場 所 」が c:\CrashDumps になっていますが、 任 意 の 場 所 で 構 いません。 空き 容 量 が 十 分 にあるハードディスク 上 のディレクトリを 選 択 してください。レジストリエディタを 使 わず、.reg ファイルから 登 録 することもできます。上 の 設 定 のままならば、 次 のような 内 容 を tmp.reg など( 名 前 は 任 意 で 構 いませんが、 拡 張 子 は.reg とします)に 保 存 してから、ダブルクリックしてレジストリに 登 録 してください。Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]"DumpFolder"=hex(2):63,00,3a,00,5c,00,43,00,72,00,61,00,73,00,68,00,44,00,75,\00,6d,00,70,00,73,00,00,00"DumpCount"=dword:0000000a"DumpType"=dword:00000002設 定 はこれだけで、すぐに 有 効 になります。この 設 定 を 行 ってから、<strong>uniPaaS</strong> アプリケーションをテスト 実 行 ・ 運 用 実 行 します。プログラムが 異 常 終 了 した 場合 には、 自 動 的 にダンプファイルが 作 成 されます。第 5 章 ダンプファイル 51


プログラムが 異 常 終 了 した 場 合 には・・・1. 例 外 が 起 こったら、「・・・は 動 作 を 停 止 しました」というダイアログが 出 ます。2. すぐに「プログラムを 終 了 します」ボタンを 押 します。ダンプファイルは、レジストリに 設 定 したディレクトリ ( 今 の 例 では C:\CrashDumps)に 作 成 されます。この 方 法 では、 自 動 的 にダンプファイルが 作 成 されますが、 予 めレジストリを 設 定 しておく 必 要 があります。レジストリの 変 更 をせずに、 異 常 終 了 時 にダンプファイルを 作 成 するには、 手 作 業 になりますが、ハングアップの 時 にダンプファイルを 作 成 する 方 法 を 使 うことができます ( 5.6 「ハングアップ 時 にダンプファイルを 作 成 させるには? (Vista、Windows 7、Windows Server 2008 の 場 合 )」を 参 照 )第 5 章 ダンプファイル 52


5.5. ハングアップ 時 にダンプファイルを 作 成 させるには?(Windows XP および Windows Server 2003 の 場 合 )Windows XP では、ハングアップ 時 /エラー 時 にダンプファイルを 作 成 させるには、ダンプを 取 ろうとするプロセスのプロセス ID を 指 定 してワトソン 博 士 を 呼 び 出 します。このための 前 準 備 として、タスクマネージャでプロセス ID を 見 つけることができるようにしておく 必 要 があります。この 方 法 は、5.7 「タスクマネージャにプロセス ID を 表 示 させるには?」 を 参 照 してください。この 設 定 をしてから、<strong>uniPaaS</strong> プログラムをテスト 実 行 / 運 用 開 始 します。実 行 中 にハングアップが 発 生 した 場 合 には、まず、ダンプをとるべきプロセスを 特 定 する 必 要 があります。プロセスを 特 定 する 方 法 は、5.8 「ダンプを 取 るプロセスのプロセス ID を 特 定 するには?」を 参 照 してください。ダンプを 取 るべきプロセスのプロセス ID がわかったら、そのプロセス ID を 指 定 して、ワトソン 博 士 のコマンドにより 作 成 します。プロセス ID を 指 定 して、ダンプファイルを 作 成 させるには1. コマンドプロンプト(DOS 窓 )を 開 きます。2. drwtsn32 -p (プロセス ID) と 入 力 し、Enter キーを 押 します。右 図 は、プロセス ID = 2232 を 指 定した 場 合 です。3. 右 図 のようなダイアログが 出 るので、しばらく 待 ちます。4. しばらくすると(1 分 以 下 )、「キャンセル」ボタンが「OK」ボタンに 変 わります。この 後 、OK ボタンを 押 します。このとき、リッチクライアントの 画 面 も消 えるはずです。第 5 章 ダンプファイル 53


作 成 されたダンプファイルは、Windows XP の 場 合 にはC:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watsonにあり、Windows Server 2003 の 場 合 にはC:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Dr Watsonにあります。第 5 章 ダンプファイル 54


5.6. ハングアップ 時 にダンプファイルを 作 成 させるには?(Vista、Windows 7、Windows Server 2008 の 場 合 )Windows XP の 場 合 と 異 なり、タスクマネージャにプロセス ID を 表 示 させるための 前 準 備 は 必 要 ありません。<strong>uniPaaS</strong> プログラムをテスト 実 行 / 運 用 している 途 中 で、ハングアップが 起 きた 場 合 には、 問 題 のプロセスを 特定 する 必 要 があります。これは Windows XP の 場 合 と 同 様 、5.8 「ダンプを 取 るプロセスのプロセス ID を 特 定 するには?」を 参 照 してください。ダンプを 取 るべきプロセスが 特 定 できたら、 次 の 手 順 でダンプファイルを 作 成 します。1. タスクマネージャで、ダンプを 取 るプロセスにカーソルを 置 きます。2. 右 クリックしてメニューを 開 き、「ダンプ ファイルの 作 成 (C)」を 選 びます。第 5 章 ダンプファイル 55


3. ダンプを 書 き 込 んでいる 旨 のダイアログが 出 て 来 ますので、しばらく待 ってください。( 通 常 1 分 以 内 )4. しばらくすると、 右 図 のような 画 面 になります。ファイル 名 を 控 えてから、「OK」ボタンを 押 します。ダンプファイルは、 上 記 のダイアログに 示 された 場 所 にあります。ここに 説 明 した、タスクマネージャからダンプファイルを 作 成 する 方 法 は、 異 常 終 了 時 にダンプファイルを 作 成 させる 場 合 にも 使 うことができます。異 常 終 了 時 には、 右 図 のようなダイアログが出 ますので、このダイアログが 出 たら、タスクマネージャを 開 き、 上 記 の 手 順 でダンプファイルを 作 成 できます。その 後 、「プログラムを 終了 します」ボタンを 押 します。この 方 法 を 使 うと、 毎 回 手 作 業 でダンプファイルを 作 成 する 必 要 がありますが、5.4 「 異 常 終 了 時 にダンプファイルを 作 成 させるには? (Vista、Windows 7、Windows Server 2008 の 場 合 )」に 説 明 したような、レジストリの 変 更 を 伴 なう 前 準 備 は 必 要 ありません。第 5 章 ダンプファイル 56


5.7. タスクマネージャにプロセス ID を 表 示 させるには?タスクマネージャにプロセス ID を 表 示 させるには( 前 準 備 として、 一 度 だけ 実 行 します)1. タスクバーから、タスクマネージャを 起 動 します。2. 「プロセス」タブを 開 きます。3. メニュー 「 表 示 → 列 の 選 択 」を 選 びます。第 5 章 ダンプファイル 57


4. 「PID (プロセス ID) にチェックを 入 れ、「OK」を押 します。5. 「PID」という 欄 が 追 加 されたことを 確 認 します。この 後 、タスクマネージャは 閉 じてかまいません。タスクマネージャの 設 定 は、レジストリに 保 存 されるので、この 操 作 は 一 度 実 行 すれば、その 後 ずっと 有 効 になります。第 5 章 ダンプファイル 58


5.8. ダンプを 取 るプロセスのプロセス ID を 特 定 するには?ハングアップを 起 こしているプロセスを 特 定 するには、タスクマネージャのプロセスの 一 覧 から 状 況 をみて 判 断する 必 要 があります。プロセスを 特 定 したら、タスクマネージャの「PDI」 欄 からプロセス ID を 知 ることができます。プロセスを 特 定 するには、 最 初 に「イメージ 名 」により、 区 別 します。タスクマネージャの「イメージ 名 」 欄 には、プロセスの 実 行 可 能 ファイル 名 が 表 示 されます。<strong>uniPaaS</strong> 製 品 のモジュールでは、 次 のような 名 前 になっています。製 品<strong>uniPaaS</strong> Studio<strong>uniPaaS</strong> 実 行 エンジン (Client、EnterpriseServer、RichClient Server)リッチクライアントのクライアントモジュールMRBイメージ 名uniStudio.exeuniRTE.exeuniRC.exeuniRQBroker.exe例 えば、Enterprise Server を 使 っているシステムで、サーバエンジンが 動 作 を 停 止 してしまっているようであれば、「イメージ 名 」が「uniRTE.exe」であるものを 探 します。タスクマネージャに 表 示 されているプロセスで、イメージ 名 が 一 致 するものが 一 つしかなかった 場 合 には、これだけでタスクを 特 定 できますが、イメージ 名 が 一 致 するプロセスが 複 数 ある 場 合 には、その 中 から 真 犯 人 を 区別 しなければなりません。これには 確 実 な 方 法 はなく、プロセスの 挙 動 を 見 て 推 測 する 必 要 があります。MRB (uniRQBroker.exe) の 場 合 、プロセスは 二 つありますが、 区 別 は 簡 単 です。 一 つは 監 視 用 のプロセスであり、メモリ 使 用 量 が 少 なく、もう 一 つは実 際 のブローカとしての 仕 事 を 行 っているプロセスであり、メモリ 使 用 量 は 多 いです。ですので、メモリ 使 用 量 が 大 きいものを 選 べばよいということになります。実 行 エンジン (uniRTE.exe)の 場 合 には、「CPU」 欄 を 見 て 推 測 します。ハングアップしているプロセスは、CPU が 100% 近 くになっているか( 無 限 ループに 陥 っている 場 合 )、あるいはいつまでたっても 0% のままか ( 待 ち 状 態が 永 遠 に 続 いている 場 合 など)のいずれかになっています。そのようなプロセスがあれば、それを 選 びます。右 図 の 例 では、プロセス ID が 2024 であるuniRTE.exe が CPU 99% となっているので、これを 選 びます。もし 状 況 から 判 別 するのが 難 しいようであれば、 該 当 するプロセスのすべてについて、ダンプファイルを 作 成 するのが 一 番 確 実 です。第 5 章 ダンプファイル 59


第 6 章 <strong>uniPaaS</strong> デバッガデバッガとは、アプリケーションのエラーを 修 正 するために、 開 発 者 がアプリケーションを 実 行 しながら、 実 行 エンジンの 状 態 やフローの 流 れなどを 確 認 したり、 手 動 で 強 制 的 に 変 更 したりすることのできる、スタジオの 機 能です。<strong>uniPaaS</strong> では、 開 発 用 のスタジオと、 実 行 用 のエンジンが 分 離 されているため、デバッガが 非 常 に 使 いやすく、かつ 堅 牢 になっています。本 章 では、 以 下 のような <strong>uniPaaS</strong> でのデバッガの 基 本 機 能 について 解 説 します。 ブレイクポイントを 設 定 する。 ブレイク 時 にタスクの 項 目 の 値 を 確 認 する。 ブレイクポイントに 条 件 を 設 定 する。 ウォッチリストを 作 成 し、 実 行 時 に 特 定 の 項 目 の 値 を 確 認 する。 実 行 時 に 項 目 の 値 を 手 動 で 変 更 する。 スタジオ 内 で、 実 行 フローを 確 認 する。 コールスタックを 見 る。 複 数 のコンテキストの 実 行 状 況 を 見 る。本 章 の 内 容 については、 以 下 の 技 術 文 書 に 基 本 的 な 事 項 についての 説 明 がありますのでご 参 照 ください。 本 書 の 内 容 は、 主 に、これらの 補 足 説 明 をするものです。デバッガ 一 般デバッガの 使 い 方「リファレンスマニュアル」 アプリケーションのテスト → デバッガ「マスタリング <strong>Magic</strong> <strong>uniPaaS</strong>」 第 29 章 アプリケーションのデバッグ重 要 : RichClient プログラムのデバッガについて:<strong>uniPaaS</strong> <strong>V1Plus</strong> Ver1.8 の RichClient プログラムは、デバッガに 対 応 していません。このため、RichClient プログラムを 実 行 中 にデバッガを 使 って、ブレイクをかけたり 項 目 をウォッチしたりすることができません。この 制 限 は 将 来 のバージョンで 対 応 される 予 定 です。アクティビティモニタは RichClient プログラムでも 対 応 しています。このため、RichClient プログラムの 実 行 の 様 子 をアクティビティモニタで 追 っていくことは 可 能 です。アクティビティモニタはリモートデバッグでも 利 用 することができます。(7.4 「アクティビティモニタを 表 示 するためだけに 使 うには?」を 参 照 )第 6 章 <strong>uniPaaS</strong> デバッガ 60


6.1. デバッガを 開 始 するデバッガを 利 用 するには、<strong>Magic</strong> <strong>uniPaaS</strong> Studio が デバッグモード で 動 作 している 必 要 があります。デバッグモードに 入 るには・・・デバッグモード は、メニュー デバッグ(D) から デバッグモード(D) を 選 択 します。デバッグモードは、ツールバーで 設 定 することもできます。デバッグモードを 解 除 するには・・・デバッグモード を 解 除 するには、 同 じく デバッグ(D) メニューから デバッグモード(D) を 再 度 選 択 します。このメニューは、 選 択 するたびにデバッグモードがトグルします。第 6 章 <strong>uniPaaS</strong> デバッガ 61


6.2. ブレイクポイントブレイクポイントは、プログラム 中 に 開 発 者 が 設 定 するもので、プログラムが 実 行 時 にその 位 置 に 到 達 したら、エンジンはプログラムの 実 行 を 一 時 的 に 中 断 (ブレイク)し、 開 発 者 がそのときのプログラムの 状 態 を 調 査 することができるようになります。6.2.1. ブレイクポイントを 追 加 する<strong>Magic</strong> <strong>uniPaaS</strong> でのブレイクポイントは、プログラムリポジトリ 中 の 任 意 のタスクのデータビューエディタ、あるいはロジックエディタ 上 の 行 に 設 定 することができます。ただし、コメント 行 には 設 定 することはできません。ブレイクポイントを 設 定 するには・・・1. データビューエディタ、あるいはロジックエディタを 開 きます。2. ブレイクポイントを 設 定 したい 行 にカーソルを 置 きます。3. デバッグ(D) メニューから、ブレイクポイント(T) を 選 びます。F9 キーで 設 定 することもできます。 ブレイクポイントが 設 定 された 行 には、 左 側 に 赤 色 の ● 印 が 表 示 されます。 ブレイクポイントの 設 定 は、デバッグ(D)→ ブレイクポイント(T) メニュー (あるいは F9 キー)によりトグルします。右 図 は、ロジックエディタにブレイクポイントが 設 定 された 例です。右 図 は、データビューエディタにブレイクポイントが 設 定 された 例 です。第 6 章 <strong>uniPaaS</strong> デバッガ 62


ブレイクポイントの 設 定 は、プロジェクトファイルに 記 録 されます。このため、プロジェクトを 閉 じた 後に 再 度 開 いたときにも、 前 に 設 定 されたブレイクポイントはそのまま 有 効 になっています。6.2.2. プログラムを 実 行 するブレイクポイントの 設 定 されているプログラムを 実 行 すると、 次 のときにプログラムの 実 行 がブレイク( 一 時 中 断 )します。 データビューエディタに 設 定 されているブレイクポイントの 場 合 には、ブレイクポイントの 設 定 されている 行 で 定 義 されている 項 目 の 値 に 変 更 があったとき。 ロジックエディタにブレイクポイントが 設 定 されている 場 合 には、ブレイクポイントの 設 定 されている 行 まで 実 行 が 進 んだとき。ブレイクポイントから 実 行 を 再 開 するには、デバッグ(D) メニューから、 次 のようなオプションを 選 択 できます。メニュー キー 意 味継 続 F7 実 行 を 継 続 する。停 止プログラムを 強 制 的 に 終 了 する。ステップ F10 現 在 の 行 を 実 行 し、 次 の 行 で 再 度 ブレイクする。ステップイン F11 ステップ と 同 じだが、 現 在 の 行 がコールコマンドやイベント 実 行 コマンドの 場 合 、あるいは 開 発 者 定 義 関 数 を 含 む 場 合 には、それにより呼 ばれるプログラム、タスク、イベントハンドラ、 関 数 などの 最 初 の行 まで 進 んだところで 再 度 ブレイクする。ステップアウト Shift+F11 現 在 実 行 中 のタスク、ハンドラなどを 最 後 まで 実 行 し、 呼 出 元 に戻 った 時 点 で 再 度 ブレイクする。6.2.3. 実 行 中 に 強 制 的 にブレイクするプログラムの 実 行 に 予 想 以 上 に 時 間 がかかる 場 合 とか、 期 待 していた 動 作でない 場 合 には、 強 制 的 にブレイクをかけて、 現 在 のプログラムの 状 態 を 調査 したい 場 合 があります。このような 場 合 には、プログラム 実 行 中 に、デバッグ(D) メニューから、ブレイク(B) を 選 択 します。その 時 点 で 強 制 的 にブレイクが 起 こり、スタジオでは、実 行 中 のタスクが 自 動 的 に 開 いて、 以 下 のように、 現 在 実 行 中 の 行 にカーソルが 移 動 します。 オンラインタスクでユーザのデータ 入 力 待 ちの 場 合 には、データビューエディタが 開 き、 現 在 フォーカスのある 項 目 に 対 応 する C=カラム あるいは V= 変 数 などの 行 のカーソルが 移 動 します。 その 他 の 場 合 (バッチタスクの 実 行 中 、あるいはオンラインタスクでもタスク 前 ・ 後 処 理 やレコード 前 ・ 後 処 理 実 行 中 の 場 合 など)には、ロジックエディタ 上 で、 現 在 実 行 中 の 行 にカーソルが 移 動 します。第 6 章 <strong>uniPaaS</strong> デバッガ 63


6.2.4. ブレイクポイントリポジトリ設 定 したブレイクポイントは、ブレイクポイント リポジトリ で 一 覧 表 示 できます。ブレイクポイント リポジトリは、 表 示 (V) メニューから、ブレイクポイント(B) を 選択 すると 表 示 されます。ここには、 設 定 されたブレイクポイントが 一 覧 で 表 示 されます。有 効 欄 は、ブレイクポイントの 有 効 性 を 示 すチェックボックスです。 開 発 者 はチェックボックスをクリックすることにより、 設 定 をトグルさせることができます。 有 効 にチェックが 入 っていないブレイクポイントは 一 時 的 に 無 効 となったブレイクポイントで、 設 定 された 行 まで 実 行 が 進 んでもブレイクはかかりません。ブレイクポイント リポジトリで、 右 マウスクリックすると、コンテキストメニューが 表 示 されます。メニュー 項 目削 除 (D)ソースに 移 動 (G)特 性 (P)意 味ブレイクポイントを 削 除 します。ブレイクポイントの 設 定 されているタスクが 開 き、その 行 にカーソルが 移 動 します。ブレイクが 起 こる 詳 細 な 条 件 を 設 定 することができます。 詳 しくは、 後 述 の「 条 件 付 ブレイクポイント」で 説 明 します。ブレイクポイントオプションブレイクポイントリポジトリにはツールバーがあり、 次 のような 操 作 を 行 うことができます。アイコン 対 応 するメニュー 機 能削 除 (D)現 在 カーソルのある 行 のブレイクポイントが 削 除 されます。現 在 設 定 されているすべてのブレイクポイントが 削 除 されます。すべてのブレイクポイントが 有 効 化 されます。第 6 章 <strong>uniPaaS</strong> デバッガ 64


すべてのブレイクポイントが 無 効 化 されます。特 性 (P)ブレイクが 起 こる 詳 細 な 条 件 を 設 定 することができます。 詳 しくは、 後述 の「 条 件 付 ブレイクポイント」で 説 明 します。条 件 付 ブレイクポイントブレイクポイントリポジトリでは、 各 ブレイクポイントに 対 し、ブレイクする 条 件 を 設 定 することができます。ブレイクポイントの 条 件 を 設 定 するには・・・1. ブレイクポイントリポジトリで、 条 件 を設 定 したいブレイクポイントにカーソルを 合 わせます。2. 右 マウスボタンをクリックし、コンテキストメニューから 特 性 (P) を 選 びます。3. ブレイクポイント 特 性 ダイアログが開 きますので、ここでブレイクの 条 件 を、 次 のオプションから 選 んで 設 定 します。ブレイク 値 意 味 ダイアログイメージA= 常 時 (デフォルト) ブレイクポイントに 達 したら 常 にブレイクします。C=カウント回 数 欄 に 設 定 された 回 数 だけ、このブレイクポイントを 通 過 するたびにブレイクします。N= 条 件 条 件 欄 に 式 を 設 定 し、ブレイクポイントに 達 したときに、この 式 を 評 価 した 結 果 、 真 になった 場 合にのみブレイクします。条 件 欄 に 設 定 するには、プログラムリポジトリで、ブレイクポイントの 設 定 されているタスクを開 いておく 必 要 があります。その 状 態 で、 条 件欄 からズームして、 式 テーブルで 設 定 します。条 件 は、ロジックビューで 定 義 されたブレイクポイントに 対 してだけ 設 定 することができます。データビューに 設 定 されたブレイクポイントには、 条 件 を 設 定 することはできません。第 6 章 <strong>uniPaaS</strong> デバッガ 65


6.3. 行 の 無 効 化デバッグを 行 っている 段 階 で、コールコマンドや 項 目 更 新 コマンドなどを 一 時 的 に 実 行 しないようにして、 結 果がどう 違 ってくるかを 確 認 したい 場 合 があります。また、 実 行 結 果 に 影 響 を 与 えないと 分 かっているプログラムの 実 行 を 一 時 的 に 省 略 したいときがあります。このような 場 合 、 今 までは 処 理 コマンドの「 条 件 」 欄 を No に 設 定 したり、あるいは「デバッグフラグ 論 理 変 数 」のようなものを 定 義 しておいて、コマンドの「 条 件 」 欄 にその 変 数 を 設 定 したりしていました。しかし、これはプログラムの 変 更 を 伴 なう 作 業 であり、デバッグが 終 了 した 後 に 設 定 を 戻 し 忘 れたりする 可 能 性 がありました。<strong>uniPaaS</strong> <strong>V1Plus</strong> では、デバッガで 実 行 中 に、 特 定 の 処 理 コマンドを 一 時 的 に 無 効 化 する 機 能 があります。この機 能 はデバッグ 途 中 でダイナミックに 設 定 ・ 解 除 することができるので、いちいちプログラムを 変 更 する 必 要 がなくなりました。行 を 無 効 化 するには6. プログラムリポジトリを 開 き、 無効 化 したい 行 にカーソルを 置 きます。7. 右 マウスクリックでコンテキストメニューを 開 き、「 行 を 無 効 化 」を 選 択 します。無 効 化 された 行 は、 無 効 化 されていることがわかるように、 薄 い 灰 色で 表 示 されます。無 効 化 は、メニュー 「 編 集 →行 を 無 効 化 」を 選 択 しても 行えます。第 6 章 <strong>uniPaaS</strong> デバッガ 66


無 効 化 された 行 を 元 に 戻 すには、 無 効 化 の 場 合 と 同 様 に、コンテキストメニューから「 行 を 有 効 化 」を 選 択 するか、メニュー「 編 集 → 行 を 有 効 化 」を 選 択 します。第 6 章 <strong>uniPaaS</strong> デバッガ 67


6.4. ブレイクポイントと 行 の 無 効 化 についての 注 意グレイクポイントやウォッチリストなどのデバッグ 設 定 情 報 は、プロジェクトファイルには 保 存 されません。プロジェクトの .EDP ファイルと 同 じディレクトリにある .OPT ファイルに 保 存 されます。この .OPT ファイルは 次 のような 性 質 があります。プロジェクトに 必 須 のものではありません。Studio がプロジェクトををオープンする 際 に 見 つからなければ、Studio が 自 動 的 に 作 成 します。ブレイクポイントやウォッチリストなど、デバッガの 設 定 情 報 を 保 存 します。.ECF ファイルやリポジトリ 出 力 ファイルには、この 情 報 は 反 映 されません。このため、(1) ECF ファイルで実 行 時 には 影 響 がありません、(2) リポジトリ 出 力 ・ 入 力 でプロジェクトを 移 行 すると、デバッグ 情 報 は 消 えます。.OPT ファイルを 削 除 すると、デバッグ 設 定 情 報 はクリアされます。一 方 、 行 の 無 効 化 の 設 定 情 報 は、プロジェクトファイル ( 各 プログラムに 対 応 した、Sources\Prg_xxxx.xml ファイル) に 記 録 されます。このため、無 効 化 されている 状 態 で ECF ファイルを 作 成 し 実 行 すると、 実 行 時 にも 無 効 化 されたままとなります。プロジェクトをコピー (リポジトリ 出 力 ・ 入 力 ) しても、 無 効 化 情 報 はそのまま 移 行 されます。デバッグが 終 了 した 時 には、 無 効 化 されている 行 を 元 に 戻 すことを 忘 れないように 注 意 してください。第 6 章 <strong>uniPaaS</strong> デバッガ 68


6.5. 項 目 一 覧項 目 オプションでは、 現 在 実 行 中 のコンテキスト 中 の、 項 目 の 値 を 調 べ、 必 要 に 応 じて 強 制 的 に 変 更 することができます。6.5.1. 項 目 一 覧 の 表 示項 目 一 覧 は、 表 示 (V) メニューから 項目 (V) を 選 択 して 表 示 させます。右 図 に 示 すように、 現 在 有 効 な 項 目 名 、型 、データソース 名 、 現 在 の 値 が 表 示されます。項 目 一 覧 は、プログラムがブレイクしている 状 態 でだけ 有 効 です。6.5.2. 項 目 一 覧 のオプション項 目 一 覧 画 面 では、 次 のようなオプションが、 右 マウスボタンのコンテキストメニュー、あるいはツールバーから操 作 することができます。第 6 章 <strong>uniPaaS</strong> デバッガ 69


ツールバーコンテキストメニューアイコン メニュー 意 味ウォッチに 追 加 この 変 数 を、ウォッチリスト に 追 加します。ウォッチリスト については、6.6 ウォッチリスト を 参 照 してください。ソースに 移 動 この 変 数 が 定 義 されている、データビューエディタの 行 に 移 動 します。データの 設 定 この 項 目 の 値 を 手 動 で 変 更 します。データに Null を 設 定この 項 目 の 値 を、Null に 設 定 します。データの 設 定 (S) あるいは データに Null を 設 定 (N)によって 項 目 の 値 が 変 更 された 場 合 には、「 新 しい 値 によって 影 響 する 全 ての 式 を 再 計 算 しますか?」という 確 認 ダイアログが 表 示 されます。「はい」と 答 えたら 再 計 算 ルールに 従 って 再 計 算 が起 こり、「いいえ」ならば 再 計 算 が 起 こりません。「キャンセル」と 答 えると、 変 更 した 内 容 が 元 の 値に 戻 されます。第 6 章 <strong>uniPaaS</strong> デバッガ 70


6.6. ウォッチリストウォッチリスト は、 項 目 一 覧 と 同 様 、 項 目 の 現 在 の 値 を 調 査 したり 設 定 したりするものですが、 項 目 一 覧 の 場合 、 現 在 有 効 な 項 目 がすべて 表 示 されるのに 対 し、ウォッチリストは、 開 発 者 が 指 定 した 項 目 だけを 表 示 するところが 異 なります。6.6.1. 項 目 をウォッチに 追 加 するウォッチリストは、 初 期 状 態 では 空 になっています。ウォッチリストに 項 目 を 追 加 するには、 次 のいずれかによります。プログラムリポジトリのデータビューエディタで 項 目 定 義 をしている 行 にカーソルを 置き、 右 マウスボタンでコンテキストメニューを 出 して、ウォッチに 追 加 (A) を 選 びます。項 目 一 覧 から、コンテキストメニューでウォッチに 追 加 (A) を 選 択 します。ウォッチリストでは、 項 目 一 覧 と 同 じように、ソースに 移 動 、データの 設 定 、データに Null を 設 定 、などの 操 作 を、ツールバー、あるいはコンテキストメニューから 行 うことができます。第 6 章 <strong>uniPaaS</strong> デバッガ 71


6.6.2. ウォッチリストの 表 示ウォッチリストは、 表 示 (V) メニューから ウォッチ(H) を 選 んで 表 示 させます。ウォッチリストには、 項 目 一 覧 と 同 じように、 項 目 名 、 型 、データソース 名 、および、 現 在 の 値 が 表 示 されます。項 目 一 覧 の 場 合 と 同 様 、これらの 表 示 は、プログラムがブレイクしている 場 合 にのみ 有 効 です。第 6 章 <strong>uniPaaS</strong> デバッガ 72


6.7. コールスタックコールスタックは、メインプログラムから 現 在 実 行 中 のプログラムまでの、 呼 び 出 しの 経 路 を 表 示 します。6.7.1. コールスタックの 表 示コールスタックは、 表 示 (V) メニューから コールスタック(S) を 選 んで 表 示 させます。コールスタック ウィンドウには、モジュール 名 (プロジェクト 名 )、タスク 名 、ハンドラ 名 、およびそのハンドラ 中 での 行 数 が 表 示 されます。ここでの 表 示 は、プログラムがブレイクされて、 実 行 が 中 断 している 状 態 でのみ 有 効 です。6.7.2. コールスタックのオプションコールスタックウィンドウでは、コンテキストメニューから ソースに 移 動 (G) を 選 ぶと、そのタスクで 現 在 実 行 中 の 行 を、プログラムリポジトリ 上 で 表 示 します。第 6 章 <strong>uniPaaS</strong> デバッガ 73


オンラインプログラムで、ユーザからのデータ 入 力 待 ちの 状 態 のとき、あるいは、データビュー 上 でカラムや 変 数 にブレイクポイントが 設 定 されている 場 合 にブレイクがかかったときには、ソースに 移 動 (G) を 行 うと、データビューエディタが 開 き、その 項 目 を 定 義 している 行 が 表 示 されます。ロジックエディタ 設 定 されているブレイクポイントでブレイクしたときには、ソースの 移 動(G) を 行 うと、ロジックエディタが 開 き、ブレイクの 起 こった 行 が 表 示 されます。第 6 章 <strong>uniPaaS</strong> デバッガ 74


6.8. 実 行 コンテキスト<strong>uniPaaS</strong> の 実 行 エンジンはマルチスレッドで 並 行 実 行 をサポートしています。並 行 実 行 を 使 わないアプリケーションならば、 実 行 コンテキストは 一 つなので、コンテキストの 選 択 について 気を 使 う 必 要 はありませんが、 並 行 実 行 を 使 うアプリケーションでは、 複 数 のコンテキストが 同 時 に 実 行 されていることがあります。今 まで 見 てきたコールスタック、 項 目 一 覧 などは、 各 コンテキスト 毎 に 独 立 して 存 在 するものなので、 正 しい 値 を調 査 するには、 正 しいコンテキストを 選 択 することが 必 要 です。6.8.1. 実 行 コンテキストの 表 示実 行 コンテキストは、 表 示 (V) メニューから、 実 行 コンテキスト(C) を 選 択 して 表 示させます。実 行 コンテキスト ウィンドウには、コンテキスト ID (<strong>Magic</strong> 実 行 エンジンが 内 部 で管 理 している 番 号 )、コンテキスト 名(CtxSetName 関 数 で 設 定 された 名 前 )、およびコンテキストの 状 態 が 表 示 されます。右 図 は、TravelAgency プロジェクトを 実行 して、いくつかの 並 行 実 行 プログラムを 起 動 した 状 態 で、ブレイクをかけたときの 実 行 コンテキスト ウィンドウの 例 です。この 中 で、# の 欄 に 矢 印 が 表 示 されている 行 がありますが、これは 現 在 選 択 されているコンテキストを 表 しています。 項 目 一 覧 、ウォッチリスト、コールスタックなどの 表 示 は、 現 在 選 択 されているコンテキストのものが表 示 されます。第 6 章 <strong>uniPaaS</strong> デバッガ 75


6.8.2. コンテキスト 切 替 え選 択 されているコンテキストを 切 り 替 えるには、 実 行 コンテキスト ウィンドウのコンテキストメニューあるいはツールバーから、コンテキストの 切 り 替 え(S) を 選 択 します。コンテキストを 切 り 替 えると、 項 目 一 覧 、ウォッチリスト、コールスタックなどの 表 示が 更 新 され、 新 しく 選 択 されたコンテキストについての 情 報 が 表 示 されるようになります。コンテキストを 切 り 替 えるには、状 態 が 停 止 済 になっている 必要 があります。 状 態 が 停 止 中になっている 場 合 には、いったん、 停 止済 状 態 にあるコンテキストに 対 して、コンテキストの 切 り 替 え(S) をおこなってください。 停 止 可 能 な 状 態 であれば、 停 止 中が 停 止 済 に 変 更 されます。第 6 章 <strong>uniPaaS</strong> デバッガ 76


第 7 章 リモートデバッガリモートデバッガは、<strong>uniPaaS</strong> Studio 製 品 のデバッガ 機 能 の 一 部 として 実 装 されていて、 運 用 環 境 で、Client あるいは サーバ (Enterprise Server、RichClient Server) 製 品 を 実 行 している 環 境 でデバッグを 行 うための 機 能です。開 発 が 終 了 し 運 用 開 始 した 後 に、 問 題 が 発 生 した 場 合 、 問 題 が 運 用 環 境 でだけしか 起 こらないとか、 問 題 の 再現 が 非 常 に 難 しい、ということがよくあります。このような 場 合 には、 運 用 環 境 でのデバッグが 必 要 になってくることがあります。しかし、 運 用 環 境 では Studio 製 品 が 動 いているわけではないので、 前 章 で 説 明 したような、Studio 製 品 を 使 ってテスト 実 行 しながらデバッグすることができません。このような 状 況 のために、<strong>uniPaaS</strong> では、 通 常 の 運 用 環 境 で 運 用 をしながら、 別 PC にある Studio を 使 ってデバッグを 行 う、という 方 法 をサポートしています。これを「リモートデバッガ」と 呼 びます。本 章 では、リモートデバッガのしくみと 使 い 方 について 説 明 します。リモートデバッガについては、リファレンスマニュアルの 「アプリケーションのテスト > デバッガ > リモートデバッガ」の 項 も 参 照 してください。第 7 章 リモートデバッガ 77


7.1. リモートデバッガのしくみはどうなっていますか?前 章 で 説 明 した 通 常 のデバッガは、 開 発 環 境 で Studio 製 品 を 使 って、プロジェクトを 実 行 しているときの 機 能でした。リモートデバッガについて 説 明 する 前 に、 通 常 のデバッグ 環 境 における 動 作 をより 詳 しく 見 ていきましょう。7.1.1. ローカルデバッグのしくみStudio を 起 動 すると、 開 発 環 境 としての Studio のプロセス (uniStudio.exe) の 他 に、 背 後 では、テスト 実 行 用 に 実行 エンジン (uniRTE.exe) のプロセスが 立 ち 上 がっています。 実 行 エンジンのプロセスは、 開 発 状 態 では 隠 れていて 表 には 現 れませんが、F7 でテスト 実 行 を 行 うときに 表示 されます。テスト 実 行 の 際 には、Studio と 実 行 エンジンの 間 でTCP/IP による 通 信 セッションが 作 成 され、デバッグの 情報 (ブレイクポイント、 項 目 の 値 、アクティビティモニタの出 力 、その 他 の 制 御 信 号 )がそのセッションを 通 してやりとりされています。この 時 に 使 われる TCP/IP のポートを「デバッグポート」と 呼 びます。通 常 のデバッグでは、デバッグポートは <strong>uniPaaS</strong> が 自 動的 に 決 定 するので、 開 発 者 はデバッグポートについて 気にする 必 要 はありません。なお、 通 常 のデバッグの 場 合 には、Studio はプロジェクトファイルを 編 集 し、 実 行 エンジンは、プロジェクトファイルを 直 接 実 行 します。7.1.2. リモートデバッグのしくみリモートデバッグでは、このうちの 実 行 エンジンが 別 マシン 上 で 実 行 されるような 形 となります。ここでは、 次 のようになります。実 行 環 境 では、 実 行 エンジンだけが 動 作 しており、 実 行 エンジンはプロジェクトのキャビネットファイル (ECF ファイル)を 実 行 しています。実 行 エンジンはデバッグポートを 開 いており、ECF ファイルの 実 行 を 行 うと 並 行 して、リモートデバッグで Studio から 接 続 されるのを待 機 しています。開 発 環 境 は、 実 行 環 境 とは 異 なる PC 上 で、Studio を 起 動 しています。ここには、ECFファイルを 作 るもととなった プロジェクトファイル (EDP ファイルおよびその Souces ディレクトリ 下 のファイル) があります。通 常 のデバッグ 状 態開 発 環 境<strong>uniPaaS</strong>Studioプロジェクトファイルリモートデバッグのしくみ開 発 環 境<strong>uniPaaS</strong>Studioプロジェクトファイルデバッグポート実 行エンジンデバッグ 用 TCP/IP セッションデバッグポート実 行 環 境実 行 エンジンECFファイルStudio はプロジェクトを 開 き、 実 行 エンジンのデバッグポートに 対 して、デバッグ 用 の TCP/IP 接 続 を 行 ないます。その 後 は、 通 常 のデバッグの 場 合 と 同 じように、Studio と 実 行 エンジンとがデバッグ 情 報 をやりとりしながら、実 行 を 進 めていきます。第 7 章 リモートデバッガ 78


7.2. リモートデバッグにはどんな 準 備 が 必 要 ですか?リモートデバッグを 行 うには、アプリケーションを 実 行 している 実 行 環 境 の 他 に、 次 の 準 備 が 必 要 です。開 発 環 境 用 の PC: Studio をインストールして 利 用 するのに 十 分 な 性 能 を 持 った PC を1 台 用 意 します。この PC は、 実 行 環 境 の LAN に 接 続 可 能 で、TCP/IP が 正 しく 設 定 されている 必 要 があります。Studio 製 品 : その PC に <strong>uniPaaS</strong> Studio をインストールし、ライセンスを 正 しく 設 定 します。プロジェクト: 実 行 している ECF ファイルのもととなったプロジェクトファイル (EDP ファイルおよびそのSources ディレクトリ 下 にある 全 XML ファイル)を、 開 発 環 境 PC にコピーします。Studio で 正 常 にプロジェクトを 開 けることを 確 認 しておいてください。このプロジェクトは、ソースファイルを 参 照 するためだけのものですので、 開 発 環 境 PC 上 で 実 行 できるように 設 定 しておく 必 要 はありません。ファイアウォールの 設 定 : リモートデバッガは TCP/IP の 通 信 を 行 うので、 実 行 環 境 の 側 で、ファイアウォールのポートを 開 けておく 必 要 があります。(7.3 「リモートデバッグはどのように 設 定 しますか?」 参照 )。デバッグユーザの ID とパスワード: セキュリティのために、リモートデバッグを 行 うためには、<strong>uniPaaS</strong> のセキュリティ 機 能 を 用 いたユーザ 認 証 が 必 要 です(7.6 「リモートデバッグのセキュリティは?」 参 照 )。このために、リモートデバッガ 権 利 を 持 つユーザの ID とパスワードを 知 っている 必 要 があります。第 7 章 リモートデバッガ 79


7.3. リモートデバッグはどのように 設 定 しますか?7.3.1. デバッグポートの 決 定最 初 に、デバッグ 用 の TCP/IP 通 信 に 使 う、デバッグポートを 決 めます。デバッグポートの 番 号 について 特 に 制限 はありません。 未 使 用 のポートのなかから 適 当 に 選 びます。ここでは、 説 明 の 例 のために、4040 番 を 利 用 するようにします。エンタープライズサーバやリッチクライアントサーバなどで、 複 数 のインスタンスを 起 動 する 場 合 には、 個 々のインスタンスごとに 異 なるデバッグポートを 割 り 当 てる 必 要 があります。 同 一 デバッグポートを 指 定 して 複 数 のインスタンスを 起 動 すると、 実 行 時 のエラーやハングアップが 起 こることがあります。7.3.2. ファイアウォールの 設 定リモートデバッグでは、TCP/IP を 通 して、 実 行 エンジンと Studio とが 通 信 するので、 実 行 環 境 の 側 のファイアウォールで、 次 のポートを 開 いておく 必 要 があります。ポート 説 明 例デバッグポート 未 使 用 のポートのなかから 適 当 に 選 びます。 4040通 信 GW ポート「 通 信 ゲートウェイ」テーブルの TCP/IP のエントリで、「パラメータ」 欄 に 定 義 されたポート 番 号 の 範 囲 。1500-2000「 通 信 ゲートウェイ」テーブルは、 実 行 エンジンをフォアグラウンドモードで 開 いて、メニュー 「オプション(O) →設 定 (S) → 通 信 ゲートウェイ (M)」 で 開 くことができます。また、MAGIC.INI ファイルでは、[MAGIC_COMM] セクションの TCP/IP の 行 に 設 定 があります。[MAGIC_COMMS]NONE = 1, 0, NO Parameters neededTCP/IP = 2, 30, 1500-2000第 7 章 リモートデバッガ 80


Windows ファイアウォールの 場 合 には、 例 外 のプログラムとして 実 行 エンジン uniRTE.exe が 登 録 されていれば、 上 記 のようにポートを 別 途 開く 必 要 はありません。7.3.3. 実 行 エンジンの 設 定実 行 エンジンでは、デバッグポートを 開 いて、Studio からの 接 続 を 待 機 するように、 環 境 設 定 を 行 ないます。デバッグ 用 に 実 行 エンジンを 設 定 するには8. 実 行 エンジンを 起 動 して、メニュー 「オプション (O) → 設 定 (S) → 動 作 環 境 (E)」を開 きます。9. 「システム(S)」タブを 開 きます。10. 「リモートデバッガ」 パラメータを Yes に、「リモートデバッガの 使 用 ポート」として、 先に 決 定 したデバッグポート 番 号 を 指 定 します。この 例 では 4040 としています。この 設 定 は、MAGIC.INI の [MAGIC_ENV] セクションでも 設 定 できます。[MAGIC_ENV]EnableRemoteDebugger = YRemoteDebuggerPort = 4040以 上 で、 実 行 エンジン (サーバ) 側 の 設 定 は 終 わりです。 設 定 を 有 効 にするには、 実 行 エンジンの 再 起 動 が 必要 です。第 7 章 リモートデバッガ 81


7.3.4. Studio からの 接 続開 発 用 PC では、Studio から 実 行 エンジンに 接 続 を 行 ないます。Studio から 実 行 エンジンにリモート 接 続 するには1. 実 行 エンジンを 起 動 した 後 に、 開 発 用 PC で Studio を 起 動 します。2. 実 行 エンジンで 実 行 しているアプリケーションの ECF ファイルのもととなった、プロジェクトファイル (EDP ファイル)を 開 きます。3. メニュー 「デバッグ (D) → リモートエンジンに 接 続 (C)」 を 選 択します。4. 「 接 続 先 の 指 定 」ダイアログで、 実 行 エンジンのあるサーバマシンのホスト 名 (あるいは IP アドレス)、デバッグポート 番 号 、および 接 続 権 限 のあるユーザ ID とパスワードを 指 定 します。接 続 時 のユーザ ID/パスワードは、デバッグ 時 のセキュリティの 確 保 のために 指 定 する 必 要 があります。デバッグ 時 のセキュリティについて 特 に 設 定 していない 場 合 には、supervisor として 接 続すれば 良 いでしょう。 デバッグ 時 のセキュリティについては、7.6 「リモートデバッグのセキュリティは?」を 参 照 してください。5. OK ボタンを 押 すと、 実 行 エンジンに 接 続 されます。実 行 エンジンで 実 行 しているアプリケーションの ECF ファイルと、Studioで 開 いているプロジェクトの 対 応 が 一致 していないと、 右 のようなエラーメッセージが 出 て、 接 続 に 失 敗 します。プロジェクトと ECF ファイルの 対 応 について 確 認 してから、 再 接 続 してください。第 7 章 リモートデバッガ 82


7.3.5. デバッグ 作 業Studio から 実 行 エンジンに 正 しく 接 続 できれば、デバッグを 行 うことができます。リモートデバッグの 場 合 には、ローカルのデバッグの 場 合 と 同 様 、ブレイクポイントの 設 定 、ステップ 実 行 、アクティビティモニタの 設 定 と 表 示 、 項 目 、コールスタック、 実 行 コンテキストの 表 示 などを 行 うことができます。リモートデバッグの 場 合 に 利 用 できない 機 能 も 一 部 あります。 例 えば、リモートデバッグの 場 合 、 実 行 エンジンの 停 止 を Studio から 行 うことはできません。また、リモートデバッグ 中 には、プロジェクトはすべて 読 み 込 み 専用 となり、 修 正 することはできません。7.3.6. 実 行 エンジンの 切 断デバッグ 作 業 が 終 了 して、これ 以 上 接 続 しておく 必 要 がなければ、Studio と 実 行 エンジンの 接 続 を 切 断 します。デバッガを 実 行 エンジンから 切 断 するには1. メニュー 「デバッグ(D) → リモートエンジンを 切 断 (H) 」を 選 択します。2. 確 認 画 面 がでるので、「はい(Y)」を 押 します。これで、 実 行 エンジンとの 接 続 が 切 断 されます。第 7 章 リモートデバッガ 83


7.4. アクティビティモニタを 表 示 するためだけに 使 うには?リモートデバッグ 機 能 は、アクティビティモニタの 表 示 のためだけに 使 う、 特 別 なモードがあります。このモードでは、 通 常 のデバッガとしての 機 能 (ブレイクポイントの 設 定 、 項 目 値 の 確 認 や 設 定 、ステップ 実 行 など)は 行 うことができませが、アクティビティモニタをリアルタイムで 見 ることができます。また、アクティビティモニタの 表 示 内容 の 設 定 も 動 的 に 変 更 することができます。アクティビティモニタのみとしてリモート 接 続 するには1. メニュー 「デバッグ(D) → リモートエンジンに接 続 (C)」で 接 続 する 際 の「 接 続 先 の 指 定 」ダイアログで、「アクティビティモニタのみ」にチェックを 入 れます。その 他 のパラメータは、 通 常 のリモートデバッグの 場 合 と 同 じです。2. メニュー 「 表 示 (V) → アクティビティモニタ(M)」 を 選 んで、アクティビティモニタ 画 面 を 開きます。第 7 章 リモートデバッガ 84


7.5. アクティビティモニタの 内 容 を 変 更 するには?リモートデバッガで 接 続 すると、 実 行 エンジンの 実 行 のようすをアクティビティモニタに 表 示 させることができますが、ここに 出 力 する 内 容 の 詳 細 を、ロギング ダイアログで 動 的 に 変 更 することができます。アクティビティモニタに 出 力 する 内 容 を 変 更 するには1. メニュー 「オプション (O) → 設 定 (S) → ロギング」を 選 び、ロギング ダイアログを 開 きます。2. ロギングダイアログで、 設 定 を 変 更 します。設 定 した 内 容 は、 即 座 に 反 映 されます。ロギング ダイアログの 設 定 については、2.5 「ロギングダイアログでフィルタを 設 定 するには?」あるいは、リファレンスマニュアルの 「 設 定 → ロギング → [ 設 定 ] タブ、および [DBMS] タブ」を 参 照してください。第 7 章 リモートデバッガ 85


7.6. リモートデバッグのセキュリティは?デバッガでは、 実 行 中 のアプリケーションについてほとんど 全 ての 情 報 を 取 得 することができます。 例 えば、プログラムのデータビューやロジックはもちろん、 現 在 実 行 中 のプログラムの 項 目 の 値 やコールスタックなども 見ることができます。また、 項 目 の 値 やプログラムのコントロールもステップ 実 行 により1ステップづつ、 手 作 業 で強 制 的 に 変 更 することも 可 能 です。このため、デバッガは 大 きなセキュリティホールになる 可 能 性 があります。これを 防 ぐには、デバッガのリモート接 続 についても、 誰 でも 自 由 にできてしまうのは 不 適 当 であり、デバッガの 接 続 のための 権 限 設 定 を 行 って、 一定 の 認 証 にパスした 人 だけが 接 続 できるようにしておくべきです。<strong>uniPaaS</strong> のリモートデバッガでは、セキュリティを 確 保 するために、プロジェクトの「アプリケーション 特 性 」で「リモートデバッガ 権 利 」を 設 定 できるようになっています。リモートデバッガでのセキュリティの 設 定 の 設 定 にあたり、リモードデバッガ 権 利 キーと、その 権 利 を 有 するユーザを 決 定 しておく 必 要 があります。 リモートデバッガ 権 利 のキーを、 半 角 英 数 字 10 文 字 以 内 で 決 定 します。ここでは 例 として、「DEBUGCON」というキーを 使 いますが、 実 際 にはなるべく 推 測 しにくいキーを 使 ってください。 リモートデバッガ 権 利 を 有 するユーザの ID、パスワードを 決 定 します。ここでは 例 として、ID は「debugusr」、パスワードは「debug」とします。 実 際 にはなるべく 推 測 しにくい ID/パスワードを 使 ってください。セキュリティの 設 定 は、 次 の3ステップで 行 ないます。 リモートデバッガ 権 利 をプロジェクトに 設 定 します。( 開 発 環 境 ) 実 行 環 境 で、リモートデバッグ 用 のユーザを 登 録 します。 ( 実 行 環 境 ) リモートデバッグ 接 続 時 に、ユーザ ID/パスワードを 指 定 します。 ( 開 発 環 境 )それぞれについて、 以 下 に 説 明 します。7.6.1. リモートデバッガ 権 利 の 設 定最 初 に、リモートデバッガの 権 利 を 定 義 し、プロジェクトに 設 定 します。これは Studio で 行 ないます。リモートデバッガ 権 利 をプロジェクトに 設 定 するには ( 開 発 環 境 )1. 開 発 環 境 で Studio を 起 動 します。2. プロジェクトの 権 利 リポジトリを 開 き、リモートデバッグ 用の 権 利 を 定 義 します。第 7 章 リモートデバッガ 86


3. アプリケーション 特 性 を 開 き、「セキュリティ」タブの「リモートデバッガ 権 利 」からズームします。「 利 用 可 能 権 利 一覧 」が 表 示 されます。4. 一 覧 の 中 から、 上 記 ステップ2で 作 成 したリモートデバッガ 権 利 を 選 択 します。5. アプリケーション 特 性 を 閉 じ、キャビネットファイル (ECFファイル) を 再 作 成 します。6. 作 成 した ECF ファイルを、 実行 環 境 にコピーします。7.6.2. リモートデバッグ 用 のユーザの 定 義次 に、リモートデバッグ 時 にログインするためのユーザを、 実 行 環 境 で 定 義 します。このユーザには、リモートデバッガ 権 利 を 割 り 当 てます。実 行 環 境 で、リモートデバッグ 用 のユーザを 登 録 するには1. 実 行 エンジンをフォアグランドモードで 起動 します。2. 「オプション (O) → 設 定 (S) → ユーザID (U) 」を 選 んで、ユーザ ID テーブルを開 きます。3. 新 規 ユーザを 作 成 し、ユーザ ID(debugusr) とパスワード (debug) を 設 定します。4. 「 権 利 」 欄 からズームして、1 行 作 成 します。5. リモートデバッガ 権 利 のキー(DEBUGCON) を 割 り 当 てます。7.6.3. リモートデバッガの 接 続以 上 の 準 備 ができたら、Studio から 実 行 エンジンにリモート 接 続 します。第 7 章 リモートデバッガ 87


ユーザ ID/パスワードを 指 定 してリモートデバッグ 接 続 するには? ( 開 発 環 境 )1. 接 続 の 方 法 は、7.3.4 「Studio からの 接続 」と 同 じですが、「 接 続 先 の 指 定 」ダイアログで、ユーザ ID とパスワードとして、デフォルトの supervisor ではなく、 先 に定 義 したデバッグ 用 のユーザ ID とパスワード (この 例 では debugusr/debug) を指 定 するところが 異 なります。第 7 章 リモートデバッガ 88


第 8 章 DBMS のユーティリティ本 章 では、DBMS が 提 供 しているユーティリティ 群 のうち、<strong>uniPaaS</strong> アプリケーションのデバッグの 段 階 で 便 利 に使 えるツールを 紹 介 します。ここでは、<strong>uniPaaS</strong> アプリケーションのデバッグの 段 階 において 有 用 と 思 われるツールの 機 能 にフォーカスして説 明 します。それぞれのツールの 機 能 としては、 本 章 で 紹 介 する 以 上 に、 非 常 に 豊 富 な 機 能 を 持 っているものも 多 いのですが、 本 章 では 割 愛 します。また、 各 ツールの 具 体 的 な 利 用 方 法 の 説 明 も 省 略 しています。これらについて、 詳 しくは、 各 DBMS ユーティリティのマニュアルなどを 参 照 してください。第 8 章 DBMS のユーティリティ 89


8.1. Pervasive PSQL のツール8.1.1. Pervasive Control CenterPervasive Control Center は Pervasive PSQL ( 以 下 、Pervasive と 略 称 )のエンジン、クライアント、データベース情 報 などの 確 認 ・ 設 定 のみならず、 添 付 技 術 文 書 やログの 確 認 など、Pervasive に 関 する 作 業 の 中 心 となるユーティリティです。ここでトラブルシューティング 時 に 良 く 使 うのは、 次 の 二 つです:ローカルエンジンの 構 成 : この PC上 で 実 行 されている Pervasive のDBMS エンジンに 関 するパラメータの 設 定 。「エンジン」の 下 にある、PC 名 ( 上 の例 では MyServer) のノードから、コンテキストメニューで「プロパティー」を 選 択 するか、あるいは「ようこそ」画 面 の「ローカルエンジンの 構 成 」をクリックすると、 構 成 画 面 が 表 示 されます。第 8 章 DBMS のユーティリティ 90


MicroKernel ルータの 構 成 : 他 のPC にデータベースエンジンがある場 合 、データベースエンジンに 接 続する 際 の、クライアント 側 のパラメータの 設 定 。「MicroKernel ルータ」ノードからコンテキストメニューで「プロパティー」を 選 択 するか、あるいは「ようこそ」 画 面 の「MicroKernel ルータの 構 成 」 をクリックすると、 構 成 画面 が 表 示 されます。8.1.2. <strong>Magic</strong> 実 行 時 の 標 準 的 な 設 定Pervasive では、<strong>uniPaaS</strong> の 実 行 にあたって、 安 全 性 を 高 めてトラブルを 極 力 回 避 するという 意 味 で、 一 般 に 推奨 している 標 準 的 な 設 定 があります。Pervasive のテーブルのアクセスに 問 題 があると 思 われる 状 況 では、Pervasive の Control Center において 以 下 のような 設 定 をしてみてください。これは 各 サーバおよびクライアントにおいて 設 定 することになります。ローカルエンジンの 構 成カテゴリ パラメータ 標 準 設 定 備 考通 信 プロトコル サポートプロトコル 不 要 なものは 削 除 通 常 は TCP/IP のみでよい自 動 再 接 続 の 有 効 化オン自 動 再 接 続 タイムアウト 1800 秒 (30 分 )などの 大 き 目 の 値データ 整 合 性 トランザクション 一 貫 性 保 守 オン <strong>Magic</strong> では 必 須 の 設 定メモリの 使 用 非 アクティブ 時 、 最 小 の 状 態 に 戻 す オン 長 時 間 未 使 用 時 に 応 答 なしとなる 場 合パフォーマンスチューニングMicrokernel ルーターの 構 成セグメントサイズを 2GB に 制 限 オフ ファイルを 分 割 したくない 場 合カテゴリ パラメータ 標 準 設 定 備 考通 信 プロトコル サポートプロトコル 不 要 なものは 削 除 通 常 は TCP/IP のみでよいパフォーマンスチューニング自 動 再 接 続 の 有 効 化オンキャッシュエンジンの 使 用 オフ 更 新 処 理 が 多 い 場 合第 8 章 DBMS のユーティリティ 91


8.1.3. ログPervasive のレベル (DBMS エンジンおよびクライアントモジュール)に 重 要 なエラーが 発 生 した 場 合 には、ログファイルに 記 録 されます。このログファイルは pvsw.log という 名 前 で、Pervasive のバージョンやエディション、Windows のバージョンなどにより 格 納 されている 場 所 が 異 なりますが、Pervasive Control Center のメニュー 「ヘルプ(H) → PVSW ログ」を 選 んで 表 示 させることができます。8.1.4. トレース<strong>uniPaaS</strong> の Pervasive ゲートウェイは、Pervasive のクライアントライブラリに 対 して、Pervasive が 提 供 する APIを 介 してアクセスしています。<strong>uniPaaS</strong> のプログラム 実 行 中 に、Pervasive テーブルへのアクセス 時 に 問 題 が 起こる 現 象 が 見 られたら、 詳 細 調 査 のために、この API レベルでのトレースを 確 認 してみたくなることがあります。Pervasive では API レベルのトレース 機 能 を 提 供 しており、これを 使 って API のアクセスの 様 子 を 確 認 することができます。Pervasive のトレースを 有 効 にするには2. Pervasive のデータベースエンジンが実 行 されている PC 上 (DBMS サーバ 上 )で、Pervasive Control Centerを 開 きます。3. 「ローカルエンジンの 構 成 」 画 面 を 開きます。4. 「デバッグ」 画 面 で、「トレースオペレーションの 実 行 」をオンにします。トレースするオペレーションはすべてオンにしておいてください。 他 の 設 定はデフォルトのままで 構 いません。第 8 章 DBMS のユーティリティ 92


Pervasive の「 開 発 者 用 ドキュメント → PSQL Programmer's Guide → Btrieve アプリケーションのデバッグ」に、「トレース ファイル」のサンプルがいくつかあり、その 読 み 方 も 説 明 されています。API のインターフェースはバイナリデータで 行 われており、またトレース 結 果 もかなり 詳 細 なものになるため、トレースをとってのデバッグ 調 査 は、かなり 現 象 が 絞 り 込 めてきてからのことになると 思 われます。8.1.5. ButilButil は、Pervasive が 提 供 するコマンドラインツールで、 次 のような 幅 広 い 機 能 を 持 っています。 サーバーのバックアップに 使 用 する Continuous オペレーションの 開 始 と 終 了 。 最 後 のバックアップからシステム エラーが 発 生 するまでの 間 に 行 ったファイルへの 変 更 の 回 復 。ASCII 形 式 、シーケンシャル 形 式 、および SDF 形 式 のデータのインポートとエクスポート。データ ファイル 間 のデータのコピー。 MKDE バージョン 情 報 の 取 得 。トラブルシューティング 時 には、 次 のような 使 い 方 があります。Pervasive 製 品 バージョンの 確 認引 数 として -ver とすると、Pervasive ソフトウェアモジュールのバージョンについての 情 報 を 表 示 します。C:\>butil -verBtrieve Maintenance ユーティリティ 10.30.017.000Copyright (C) Pervasive <strong>Software</strong> Inc. 2009All Rights Reserved.BUTIL-33: Btrieve リクエスターのバージョンは 10.30 です。BUTIL-138: Btrieve のバージョンは 10.30 で、Workgroup Engine 版 です。コマンドが 完 了 しました。ファイルのヘッダ 情 報 の 確 認Pervasive テーブルへのアクセス 時 に、 問 題 が 起 こるファイルと 起 こらないファイルがある 場 合 、Butil -stat においてヘッダの 部 分 の 情 報 に 差 異 がないかを 確 認 することで、 原 因 を 見 つけられることがあります。 以 下 に 実 行例 を 示 します。C:\>butil -stat "C:\Program Files\<strong>uniPaaS</strong>\Studio <strong>V1Plus</strong>\Projects\MyApp1\TREECTLTAB1"Btrieve Maintenance ユーティリティ 10.30.017.000Copyright (C) Pervasive <strong>Software</strong> Inc. 2009All Rights Reserved.File Statistics for C:\Program Files\<strong>uniPaaS</strong>\Studio <strong>V1Plus</strong>\Projects\MyApp1\TREECTLTAB1File Version = 9.50Page Size = 4096Page Preallocation = NoKey Only = NoExtended = No第 8 章 DBMS のユーティリティ 93


Total Number of Records = 10Record Length = 66Record Compression = NoPage Compression = NoVariable Records = NoAvailable Linked Duplicate Keys = 0Balanced Key = NoLog Key = SYSKEYSystem Data = YesSYSKEY Status = PresentTotal Number of Keys = 1Total Number of Segments = 1Key Position Type Null Values* ACSSegment Length Flags Unique Values0 1 1 8 Float M -- 0 --Pervasive のファイルを 比 較 する 場 合 、Butil -stat で 比 較 する 他 に、エクスプローラのファイルのプロパティの 情 報 (「 詳 細 設 定 」ボタン 押 下 時 に 表 示 される 内 容 も 含 め) も 比 較 してください。8.1.6. Function ExecutorPervasive テーブルに 対 して、レコードの 更 新 ・ 削 除 等 を 行 っても、 思 った 通 りにならない 場 合 、Pervasive が 提供 する Function Executor を 使 って、Pervasive の API レベルで 直 接 オペレーションを 行 って 見 て、<strong>uniPaaS</strong> の 側の 問 題 なのか、Pervasive の 側 の 問 題 なのかの、 切 り 分 けを 行 うことができます。例 えば、Pervasive のテーブルをオープンし、 先 頭 のレコードを 取 得 し、そのレコードを 削 除 する、という 一 連 のオペレーションがうまくいかない 場 合 、Function Executor を 使 って、 次 のような 操 作 を 行 ないます。第 8 章 DBMS のユーティリティ 94


1. メニュー 「ファイル → 開 く」で 該 当 ファイルをオープン2. オペコードを 12 (GET FIRST)にして、 実 行 。( 最 初 のレコードに 位 置 づけされる)3. オペコードを 4 (DELETE) にして、 実 行 ( 位 置 付 けしているレコードが 削 除 される)Function Executor を 使 って、Pervasive ファイルのバージョンを 調 べることもできます。ファイルをオープンしてから、メニュー 「 表 示 → ファイル 統 計 情報 」を 選 ぶと、ファイルについての 情 報 が 表 示 されますが、その 中 の「ファイル バージョン」にバージョンが 表 示 されます。右 図 の 例 では、ファイルバージョンは 4.0 です。8.1.7. Pervasive System AnalyzerPervasive System Analyzer とは、インストールされている Pervasive 製 品 について、 以 下 のような 一 連 のテストを 行 い、レポートするツールです。Pervasive のクライアントとデータベースエンジン 間 のネットワーク 接 続 をテストする。Pervasive の API を 通 してデータベース 処 理 を 行 い、 正 しく 機 能 しているかをテストする。インストールされている Pervasive コンポーネントの 情 報 を 表 示 する。Pervasive System Analyzer は、ウィザード 形 式 でテスト 項 目 を 選 択 していき、 最 後 にテキストファイルでレポートを 保 存 します。Pervasive の DBMS エンジンやネットワーク 接 続 の 動 作 異 常 が 疑 われる 場 合 には、このテストを 行 ってエラー 等が 発 生 していないかをレポートで 確 認 してください。8.1.8. License AdministratorPervasive のテーブルを 使 っているとき、「ファイルマネージャの 異 常 #161 エラー」が 発 生 した 場 合 には、Pervasive のライセンスが 不 足 していたり 期 限 切 れになっていることを 意 味 します。第 8 章 DBMS のユーティリティ 95


このような 場 合 、Pervasive に 付 属 の「License Administrator」を 使 用 すれば、 有 効 なライセンスが 存 在 するかをご 確 認 できます。8.1.9. Pervasive <strong>Software</strong> MonitorPervasive <strong>Software</strong> Monitor は、Pervasive のデータベースエンジン (MicroKernel) の 活 動 の 状 況 を 表 示 するユーティリティです。このユーティリティで 次 のような 情 報 を 確 認 することができます。 接 続 しているユーザ(クライアント)の 一 覧 、および、 各 接 続 ごとの 情 報 。 現 在 オープンされているファイルの 一 覧 、および、 各 ファイルごとの 情 報 。 データベースエンジンのリソース 使 用 状 況 の 統 計 。 クライアントとの 接 続 の 通 信 統 計 情 報 。これらの 情 報 は、 例 えば、 次 のような 状 況 で 確 認 のために 使 うことができます。レコードロックの 解 除 待 ちが 発 生 する 場 合 、どのユーザが 使 っているのか?ライセンスエラーが 発 生 する 場 合 、 誰 がどこから 接 続 しているのか?通 信 障 害 が 起 こるときに、 通 信 状 況 がどうなっているのか?次 の 図 は、Pervasive <strong>Software</strong> Monitor ユーティリティの 画 面 例 です。ここでは、アクティブファイルと、アクティブユーザについての 情 報 が 表 示 されています。第 8 章 DBMS のユーティリティ 96


8.1.10. 再 インストールPervasive が 正 しく 動 作 しない 場 合 、いろいろと 試 しても 正 常 に 戻 らない 場 合 には、 最 後 の 手 段 として、Pervasive の 再 インストールを 行 うことがあります。この 場 合 、アンインストールしても、レジストリに 情 報 が 残 っていて、 設 定 がそのまま 残 っていると、 再 インストールした 後 にもそれが 有 効 になって、 本 当 の 意 味 で「クリーンな 環 境 に 再 インストール」とはなっていないこともあります。このため、Pervasive の 再 インストール 時 にはレジストリもクリアするようにしてみてください。具 体 的 には、 次 のような 手 順 を 行 ってください。Pervasive をクリーンに 再 インストールするには4. Pervasive のアンインストール5. マシンの 再 起 動6. PSA(Pervasive System Analyzer)を 起 動 して「コンポーネントまたはアーカイブを 削 除 する」を 実 行(Pervasive PSQL 10 では 不 要 )。7. マシンの 再 起 動8. PSA のアンインストール9. マシンの 再 起 動10. 以 下 のフォルダの 削 除• C:\PVSW• C:\BTI• C:\Program Files\BTI11. 以 下 のファイルの 削 除 ( 特 にパスの 通 っているフォルダにないかを 確 認 )• wbtrv32.dll第 8 章 DBMS のユーティリティ 97


• w3btrv7.dll12. Windows のインストールフォルダ\pvsw.log13. レジストリエディタの 起 動 (コマンドプロンプトから「regedit」を 実 行 )14. レジストリエディタの「レジストリ/レジストリファイルの 書 き 出 し」を 実 行 (バックアップ 用 )15. 以 下 のレジストリの 削 除• HKEY_LOCAL_MACHINE/SOFTWARE/Pervasive <strong>Software</strong>• HKEY_LOCAL_MACHINE/SOFTWARE/Btrieve Technologies16. Pervasive の 再 インストール8.1.11. ファイルの 互 換 性Pervasive のファイルには、フォーマットにバージョンがあり、4.x ~ 10.x まで 数 種 類 があります。このうち 5.x およびそれ 以 前 のバージョンはトランザクション 処 理 などが 異 なり、 最 新 の Pervasive エンジン (9.x 以 降 )では 読 み込 み 専 用 としてのみアクセスすることができます。もし、4.x、5.x のバージョンのファイルを、9.x 以 降 のエンジンを 使 ってアクセスし、 書 き 込 み ( 挿 入 、 修 正 、 削 除 )を 行 おうとすると、ステータス #46 のエラーとなります。このため、 古 いバージョンのエンジンで 作 成 したファイルを 新 しいバージョンのエンジンでアクセスするような 状況 では、 次 の 点 に 注 意 してください。1. システムの 移 行 などで、 古 いエンジンを 使 って 新 たにファイルを 作 成 することがない 場 合 には、BUTILなどを 使 って、ファイルを 新 しいバージョンで 再 作 成 してください。2. 古 いエンジンを 使 うシステムと 新 しいエンジンを 使 うシステムとが 共 存 し、ファイルコピーなどを 行 ってデータ 共 有 を 行 うような 構成 の 場 合 には、 古 いエンジンの「 作 成 ファイルのバージョン」を 6.x 以 上 に 設 定 してください。Control Center で 設 定 → サーバ →ファイル 互 換 性 → 作 成 ファイルのバージョン で 設 定 します。( 右 図 は Pervasive.SQL2000i での 設 定 です)Pervasive ファイルのバージョンは、BUTIL や Function Executor を 使 って 調 べることができます。8.1.5 「Butil」 および 8.1.6 「Function Executor」 を 参 照 してください。第 8 章 DBMS のユーティリティ 98


8.2. MS SQL Server のツール8.2.1. SQL Server Management StudioSQL Server Manageent Studio は、SQL Server を 管 理 するための 基 本 的 なツールです。これ 自 身 にはトラブルシューティングの 機 能 はありませんが、データベースの 構 成 や 設 定 、テーブルに 関 する 情 報 等 を 細 かく 確 認 ・ 設定 することができますので、 運 用 時 の 管 理 目 的 だけでなく、テスト・デバッグ 時 にも 必 須 のツールです。例 1: 範 囲 付 の 結 果 が 予 想 と 異 なるUniPaaS で MS SQL Server のテーブルをアクセスする 場 合 、 範 囲 付 や 位 置 づけを 行 っているが、 予 期 したのとは 異 なるレコードが 検 索 されることがあります。このような 場 合 には、データベースの「 照 合 順 序 」が 影 響 している 可 能 性 がありますので、 SQL Server Management Studio から 照 合 順 序 を 確 認 してください。1. データベースを 選 択 して、ポップアップメニューから「プロパティ」を 選 択 します。第 8 章 DBMS のユーティリティ 99


2. 「オプション」を 選 択 します。「 照合 順 序 」で、 設 定 を 確 認 できます。MS SQL Server の 照 合 順 序 の 意 味 については、Microsoft 社 の Web サイトhttp://msdn.microsoft.com/ja-jp/library/ms143515.aspx などを 参 照 してください。例 2: テーブルのプロパティを 確 認 する<strong>uniPaaS</strong> のデータベース 特 性 の「 開 発 モードでのテーブル 変 換 」がオフの 場 合 、<strong>uniPaaS</strong> のテーブルリポジトリを変 更 すると、<strong>uniPaaS</strong> での 定 義 と SQL Server 上 での 実 際 のテーブルの 定 義 とが 異 なることで 問 題 が 発 生 することもあります。例 えば、<strong>uniPaaS</strong> でカラムを 追 加 した 場 合 、 新 しいカラムは SQL Server のテーブルには 存 在 していないので、「 列 名 : ( 列 名 ) が 無 効 です」というエラーが 出 ます。このような 場 合 には、SQL Server ManagementStudio を 使 って、SQL Server 上 でのテーブル 定義 ( 列 やキーのプロパティ) を 確 認 してください。また、<strong>uniPaaS</strong> の 日 付 型 は SQL Server 上 ではdatetime 型 にマッピングされますが、SQLServer の datetime 型 では「0000/00/00」という日 付 は 不 正 であり、<strong>uniPaaS</strong> から 入 力 しようとするとエラーとなります( 右 図 )。このような 場 合 にもカラムの 特 性 を 確 認 して、CHAR 型 でテーブルを 作 成 するか、あるいは 0000/00/00 という 日付 が 入 らないようにプログラム 上 改 修 を 行 ってください。8.2.2. SQL Server ProfilerSQL Server Profiler は、SQL Server に 付 属 しているユーティリティで、DBMS が 実 行 するステートメント、 実 行の 内 部 処 理 を 経 過 時 間 などをトレースします。 本 来 はパフォーマンスチューニングのためのツールですが、DBMS で 実 行 される SQL 文 をリアルタイムで 観 察 することができるために、デバッグのツールとしても 有 効 です。下 図 は、デフォルトの 設 定 で <strong>uniPaaS</strong> から APG でテーブル 参 照 を 行 ったときのトレース 結 果 の 一 部 です。ここで 見 るように、SELECT 文 の 発 行 、レコードのフェッチ、トランザクションの 開 始 、 終 了 などが 行 われたことがわかります。第 8 章 DBMS のユーティリティ 100


設 定 を 変 えることにより、トレースする 情 報 を 細 かく 指 定 することができます。 詳 しくは SQL Server Profiler のヘルプなどを 参 照 してください。<strong>uniPaaS</strong> ではサーバカーソルを 利 用 しているために、Profiler 上 ではストアドプロシージャへの 呼 び出 しを 行 う、 一 見 複 雑 な SQL 文 が 発 行 されています。 例 えば、 次 のようなものです。declare @p1 intset @p1=180150003declare @p3 intset @p3=2declare @p4 intset @p4=1declare @p5 intset @p5=-1exec sp_cursoropen @p1 output,N'SELECT ID,LN,PRICE FROM MAGIC.dbo.MI_DTL ORDER BYID ASC ,LN ASC ',@p3 output,@p4 output,@p5 outputselect @p1, @p3, @p4, @p5この SQL 文 は、SQL Server のライブラリが 作 成 しているもので、<strong>uniPaaS</strong> の SQL Server ゲーにも説 明 があります。トウェイが 実 際 に 発 行 している SQL 文 は、 最 後 から 2~3 行 目 にある 以 下 のSELECT 文 です。SELECT ID,LN,PRICE FROM MAGIC.dbo.MI_DTL ORDER BY ID ASC ,LN ASCProfiler を 使 って、<strong>uniPaaS</strong> が 発 行 している SQL 文 を 確 認 したい 場 合 には、このことに 留 意 してください。SQL Server Profiler は、 無 償 の Express Edition には 含 まれていません。Developer Edition などをご 利 用 ください。第 8 章 DBMS のユーティリティ 101


第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール本 章 では、<strong>uniPaaS</strong> のデバッギングに 役 立 つ、サードパーティ 製 品 やフリーソフトなどのツールの 使 い 方 を 説 明します ( 下 表 )。プロセス 状 態種 類 機 能 設 定各 プロセスの CPU/メモリ 等 の 利 用 状 況 の表 示Windows タスクマネージャ、リソースモニタシステム イベント ログ Windows レベルでのイベントの 記 録 Windows システムイベントログHTTP 通 信 HTTP 通 信 データのキャプチャ 横 取 り 丸ネットワーク 通 信 ネットワーク 通 信 キャプチャ ネットワークモニタキーボードマクロ キーボード/マウス 操 作 の 記 録 と 再 生 ( 各 プログラム)第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 102


9.1. Windows タスクマネージャWindows のタスクマネージャは、Windows に 標 準 に 装 備 されているユーティリティで、 現 在 実 行 中 のプロセスに関 する 情 報 およびシステムの 状 況 をリアルタイムで 表 示 することができます。9.1.1. STEP 1. タスクマネージャを 起 動 するタスクマネージャは、デスクトップのタスクバーで右 クリックメニューから「タスクマネージャ」を 選 択することにより 起 動 します。初 期 画 面 は 次 のように、 現 在 デスクトップ 上 に 出ているプログラムの 一 覧 が 表 示 されます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 103


9.1.2. STEP 2. プロセス 一 覧 を 見 るWindows で 実 行 されているプロセスは、「アプリケーション」タブで 一 覧 表 示 されているものばかりではありません。 内 部 的 にバックグラウンドで 多 くのプロセスが 実 行 されています。それを 見 るには、「プロセス」タブを 押 します。 一 覧 の「イメージ 名 」タイトルをマウスでクリックすると、イメージ 名 でソートされるので、 目 的 とするタスクを 探 しやすくなります。<strong>uniPaaS</strong> で 使 うプログラムの 主 なものは 次 の 通 りです。<strong>uniPaaS</strong> 製 品開 発 版 (<strong>uniPaaS</strong> Studio)実 行 版 (<strong>Magic</strong> Client)、および<strong>uniPaaS</strong> サーバ(Enterprise, RichClient)リッチクライアント クライアント 側 モジュール<strong>Magic</strong> リクエストブローカモジュール 名uniStudio.exe、uniRTE.exeuniRTE.exeuniRC.exeuniRQBroker.exe9.1.3. STEP 3. 表 示 項 目 を 追 加 する「プロセス」タブのデフォルトの 設 定 では• イメージ 名• ユーザ 名• CPU 利 用 %が 各 プロセスごとに 表 示 されますが、より 詳 細 な 情 報 を 知 るために、これに 加 えて• プロセス ID• メモリ 使 用 量• 仮 想 メモリサイズも 表 示 させるようにします。このほか、プロセスの 活 動 状 況 をうかがうには、• I/O 読 み 取 りバイト 数• I/O 書 き 込 みバイト 数なども 役 に 立 ちます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 104


メニュー 「 表 示 」→「 列 の 選 択 」メニューを 選 択 します。右 図 のような「 列 の 選 択 」ダイアログが 表 示 されますので、 必 要 な 項 目 を 選 択 してください。この 設 定 はレジストリに 記 憶 されるので、 以 後 、タスクマネージャを 再 起 動 しても 有 効 です。9.1.4. システムの 全 体 的 な 状 況 を 見 るシステムの 全 体 的 な 状 況 は、「パフォーマンス」タブで 見 ることができます。ここでメモリや CPU の 利 用状 況 を 確 認 することができます。9.1.5. プロセスを 強 制 終 了 させるプログラムがハングアップしたり 無 限 ループに 陥 ったりしてしまったときに、どうしても 停 止 させることができない場 合 には、 最 後 の 手 段 として、タスクマネージャからプログラムを 強 制 終 了 させることができます。この 方 法 を 使 うと、 必 要 な 終 了 処 理 などが 一 切 行 われずにプログラムが 強 制 的 に 終 了 させられるので、データの 破 損 や 他 のプログラムの 動 作 への 影 響 などが 起 こる 可 能 性 があります。したがって、プログラムの 強 制 終 了はあくまで、やむを 得 ず 行 う 最 後 の 手 段 としてください。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 105


プロセスを 強 制 終 了 させるには、タスクマネージャの「プロセス」タブを 開 き、 強 制 しようとするプログラムにカーソルを 合 わせ、「プロセスの 終 了 」ボタンを 押 します。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 106


9.2. リソースモニタリソースモニタはタスクマネージャと 同 じく、Windows に 備 わっている Microsoft 社 のユーティリティで、タスクマネージャよりもより 細 かく、プロセス 単 位 で CPU 利 用 率 、メモリ 利 用 量 、ディスク IO、ネットワーク 活 動 などをリアルタイムで 監 視 することのできるユーティリティです。Windows Vista 以 降 の Windows (WindowsVista、Windows Server 2008、Windows 7) では、タスクマネージャから「リソースモニタ」を 起 動 することができます。タスクマネージャを 起 動 し、「パフォーマンス」タブを開 き、「リソースモニタ」ボタンを 押 します。コマンドラインから、「resmon」 を 実 行 しても、 起 動させることができます。リソースモニタが 開 きます。9.2.1. 「CPU」タブ「CPU」タブを 開 くと、 各 プロセスごとの CPU 利 用 率 、スレッド 数 等 が 表 示 されます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 107


9.2.2. 「メモリ」タブ「メモリ」タブを 開 くと、システム 全 体 のメモリ 使 用 量 とその 内 容 、および 各 プロセスごとのメモリ 使 用 量 の 内 訳 を見 ることができます。9.2.3. 「ディスク」タブ「ディスク」タブを 開 くと、 各 プロセスごとのディスク IO の 活 動 状 況 、およびシステムの 各 論 理 ディスク(ドライブ)ごとの 活 動 状 況 が 表 示 されます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 108


9.2.4. 「ネットワーク」タブ「ネットワーク」タブを 開 くと、 各 プロセスごとの、TCP/IP による 通 信 活 動 状 況 、 利 用 しているポート 番 号 、 接 続の 確 立 したコネクションの 情 報 が 表 示 されます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 109


9.3. システムイベントログ9.3.1. システムイベントログとは?システムイベントログとは、Windows オペレーティングシステムが 備 えるログ 機 構 で、「コンピュータの 管 理 」ユーティリティの 一 部 として 統 合 されています。ここには、Windows がさまざまなアプリケーションを 実 行 していくうちに 遭 遇 するイベントを 記 録 していきます。<strong>uniPaaS</strong> を 実 行 しているうちに、プログラムの 実 行 に 異 常 があった 場 合 にも、 異 常 についての 簡 単 な 情 報 がシステムイベントログに 記 録 されます。9.3.2. システムイベントログの 使 い 方システムイベントログは、 特 に 設 定 をしなくとも、デフォルトで 有 効 になっています。システムイベントログを 見 るには、まず、「コンピュータの 管 理 」ツールを 開 きます。これは、デスクトップの「マイコンピュータ」アイコンを 右 クリックして 開 くメニューから「 管 理 」を 選 択 します。「システムツール」 → 「イベントビューア」 → 「アプリケーション」を 開 くと、 右 図 のようなイベント 一 覧 が 表 示されます。<strong>uniPaaS</strong> でエラーが 起 こった 場 合 には、「アプリケーション」に、IIS でエラーが 起 こった 場 合 には「システム」のイベントに 記 録 されることが 多 いようです。IIS のエラーは、「ソース」として「WAM」あるいは「W3SVC」という 名 前 となります。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 110


9.4. その 他 のシステムモニタツール9.4.1. Process ExplorerProcess Explorer は、Sysinternals (http://technet.microsoft.com/ja-jp/sysinternals/default.aspx) からダウンロードできるユーティリティの 一 つです。Process Explorer は、Windows のタスクマネージャより 細 かな 情 報 を 見 ることができます。 各 プロセスごとに、プロセスツリーや、イメージ・メモリ・ネットワーク・ディスク 等 の 活 動 状 況 の 詳 細 をリアルタイムで 見 ることができます。例 1: <strong>uniPaaS</strong> 実 行 エンジンのメモリ 消 費 の 推 移 を 見 る実 行 中 の <strong>uniPaaS</strong> 実 行 エンジン (uniRTE.exe) のメモリ 消 費 量 は、システム 安 定 稼 働 に 影 響 を 与 えます。タスクマネージャなどでも 各 プロセスのメモリ 使 用 量 の 瞬 間 値 、およびシステム 全 体 の 使 用 量 の 推 移 は 見 ることができますが、 各 プロセスごとのメモリ 使 用 量 の 推 移 は 見 ることができません。Process Explorer を 使 えば、 各 プロセスごとにメモリ 消 費 量 の 推 移 を 見 ることができます。例 えば、uniRTE.exe のメモリ 消 費 量 を 見 るには、 次 のようにします。Process Explorer を 開 いて、uniRTE.exeを 探 します。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 111


ダブルクリックしてプロセスのプロパティダイアログを 開 き、Performance Graphタブを 開 きます。右 の 図 は、メモリテーブルに 大 量 のレコードを 作 成 していったときの 推 移 です。上 から、CPU 利 用 率 、メモリ 使 用 量 、ディスクへの 入 出 力 バイト 数 の 推 移 を表 したグラフです。例 2: mglock.dat を 掴 んでいるプロセスを 探 す<strong>uniPaaS</strong> の 実 行 中 に、 自 分 以 外 は 誰 も 使 っていないはずなのにファイルやレコードロックが 発 生 する、ということがあります。 原 因 はいろいろ 考 えられますが、<strong>uniPaaS</strong> 独 自 のロック 機 能 を 実 現 している mglock.dat ファイルを、 他 のプロセスがつかんだままになっている、という 可 能 性 があります。このような 場 合 に、どのプロセスがmglock.dat をオープンしているかを 調 べられると 便 利 です。Process Explorer を 使 うと、 特 定 のファイル (ファイル 名 の 一 部 だけでも 良 い) をオープンしているプロセスを 探し 出 すことができます。3. Process Explorer を 開 きます。4. メニュー 「Find → Find Handler orDLL」 を 選 びます。 ProcessExplorer Search ダイアログが 開 きます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 112


5. 「Handle or DLL substring」 欄 に、探 したいファイル 名 ( 今 の 場 合mglock.dat) を 指 定 し、「Search」ボタンを 押 します → 結 果 が 表 示 されます。6. ダブルクリックします → ダイアログが 閉 じ、そのファイルをオープンしているプロセスに 位 置 づけられます。例 3: ロードされている DLL を 確 認 する。システム 上 に 同 一 名 の DLL がある 場 合 、 設 定 などの 間 違 いにより、 名 前 は 同 じだが、 意 図 していたものと 異 なる DLL がロードされて、 動 作 が 意 図 したとおりにならないことがあります。たとえば、 異 なったバージョンの <strong>uniPaaS</strong> をインストールしていると、 同 一 名 のゲートウェイ DLL が 異 なったバージョンのインストールディレクトリに 存 在 します。 異 なるバージョンのゲートウェイがロードされると、 動 作 が 微 妙に 異 なったり 異 常 終 了 したりしま。また、「 外 部 コール U=UDP」コマンドで 呼 び 出 す、ユーザ 定 義 プロシージャの DLL として、 同 名 だが 異 なったものがロードされることもあります。いずれもこのような 状 況 は、なかなか 原 因 をみつけにくい 問 題 になります。このような 問 題 は、ProcessExplorer を 使 うと、 特 定 のプロセスでロードしている DLL の 一 覧 を 見 て 確 認 することができます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 113


ProcessExplorer を 起 動 し、 確 認 したいプロセスを 見 つけます。右 図 では、Studio のプロセスuniStudio.exe を 選 択 しています。実 行 時 の 動 作 の 不 正 に 関 する 場 合 には、 実 行 モジュール uniRTE.exe を 選 択します。メニューから、View → Show Lower Pane、を 選 択 した 後 、View → Lower Pane View → DLLsを 選 択 します。 右 図 のように、プロセスがロードしている DLL の 一 覧 が 表 示 されます。DLL のパスが 表 示 されていない 場 合 には、タイトル 行 (「Name」など)で 右 クリックしてポップアップメニューから「SelectColumns」を 選 択 し、ダイアログで「Path」にチェックを 入 れます。(この 設 定 は、 次 回 以 降 にも 記 憶 されます)Name または Path でソートして、 間 違 った DLL がロードされていないかを 確 認してください。右 図 の 例 では、MGORACLE.DLL が 異なったインストールディレクトリD:\MAGIC\150SP1 からロードされていることがわかります。これは、MAGIC.INI の[MAGIC_GATEWAYS] の 設 定 で 誤 ったDLL が 指 定 されているときに 起 こりますので、MAGIC.INI を 再 確 認 することで 対応 する、ということになります。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 114


Process Explorer、および 下 記 の Process Monitor, VmMap を 含 め、Sysinternals から 提 供 されるユーティリティをすべてまとめたものとして、「Sysinternals Suite」が 無 償 でダウンロードできます。(http://technet.microsoft.com/ja-jp/sysinternals/bb842062.aspx )9.4.2. Process MonitorProcess Monitor も Sysinternals から 提供 されるユーティリティで、 各 プロセスについて、ファイルアクセス、レジストリ 操作 、ネットワーク 活 動 などを、オペレーション 単 位 で 監 視 することができます。利 用 例 1: MAGIC.INI の 確 認<strong>uniPaaS</strong> 起 動 時 に、 標 準 の <strong>uniPaaS</strong> ディレクトリ 上 にある MAGIC.INI を 使 うのではなく、 別 の 箇 所 にあるMAGIC.INI を 指 定 して 起 動 することがあります。また、コマンドラインに @(ファイル 名 ) の 形 式 で、 追 加 設 定 を 指定 することもできます。このときに、ちゃんと 指 定 しているはずであるにもかかわらず、 思 ったように 設 定 がされていない ( 論 理 名 が 定義 されていない、など) という 場 合 があり、この 場 合 には「どこの MAGIC.INI を 参 照 しているのか?」あるいは「@(ファイル 名 ) で 指 定 したファイルがちゃんと 読 み 込 まれているのか?」ということを 確 認 したくなります。このような 場 合 に、Process Monitor のファイルアクセス 活 動 を 監 視 すると、チェックすることができます。例 えば、ショートカットを 作 成 し、「リンク 先 」として、"C:\Program Files\<strong>uniPaaS</strong>\Studio <strong>V1Plus</strong>\uniRTE.exe" /ini=MYMAGIC.INI @ENV\MGADD.INIと 指 定 した uniRTE.exe を 起 動 したときに、 設 定 ファイル MYMAGIC.INI および ENV\MGADD.INI が 正 しく 読 み 込まれているかを 確 認 するには、 次 のようにします。Process Monitor を 起 動 し、メニュー「Filter → Filter」 を 選 択 します。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 115


「Image Path」 「is」 「C:\ProgramFiles\<strong>uniPaaS</strong>\Studio <strong>V1Plus</strong>\uniRTE.exe」 then 「Include」として、「Add」ボタンを 押 します。この 設 定 は、 記 憶 されます。ツールバーで、「Show File SystemActivity」 ( 右 図 のアイコン) のみを 有 効にしておきます。作 成 した uniRTE.exe のショートカットを起 動 します。uniRTE.exe が 起 動 して、Process Monitor にファイル IO 活 動 のログが 記 録 されます。最 初 に、MYMAGIC.INI が 正 しく 読 まれているかを 調 べます。メニュー 「Edit → Find」で、MYMAGIC.INI を 指 定 します。Result が SUCCESS となっているので、正 しく 読 み 取 れていることがわかります。その 後 のログを 見 ても、CreateFile (ファイルオープン)、ReadFile (ファイル 読 み込 み) など SUCCESS ( 最 後 は END OFFILE) になっていることを 確 認 します。ENV\MGADD.INI についても、 同 様 に 調べます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 116


利 用 例 2: 書 き 込 んだはずのファイルが 作 成 されていないバッチタスクでテキストファイルを 出 力 したはずなのだが、ファイルが 作 成 されていない、というような 場 合 に、 原因 を 追 求 するために、ProcessMonitor を 使 うことができます。例 えば、「%MYTMPDIR%NA.TXT」 というファイルにデータを 出 力 するバッチタスクを 実 行 するとします。前 記 の 例 と 同 様 にして、ProcessMonitor で、uniRTE.exe の ファイル IO活 動 をモニタさせます。この 状 態 で、<strong>uniPaaS</strong> のバッチタスクを実 行 します。Process Monitor に、IO 活 動 のログが記 録 されます。「NA.TXT」をキーワードをして 検 索 をします。この 例 では、Result が PATH NOTFOUND となっていました。パス 名 を 見てみると、C:\tmpp\NA.TXT となっていました。C:\tmp ディレクトリに 書 き 込 むつもりだったのであれば、ディレクトリ 名 が 間違 っていた、というこになります。 結 局 、ファイルが 作 成 されなかった 原 因 は、 論理 名 MYTMPDIR の 定 義 の 間 違 い、ということになります。フィルタとしては、 次 のような 設 定 が 便 利 と 思 います。 UniPaaS 関 連 のプロセスを 監 視 するには、 「Company」「contains」 「<strong>Magic</strong> <strong>Software</strong> Enterprises」 特 定 のモジュール ( 例 えば uniRTE.exe) を 監 視 するには、 「Image Path」「is」「(uniRTE.exe のフルパス 名 )」、あるいは 「Process Name」「is」「uniRTE.exe」 実 行 中 の 特 定 のインスタンスを 監 視 するには、 「PID」 「is」 「(プロセス ID)」ProcessMonitor は Windows の API レベルのログをとるので、 簡 単 な 操 作 でも 大 量 のログが 作 成 され、 実 行 速 度 にも 影 響 を 与 えます。 従 って、ProcessMonitor を 使 った 調 査 は、 実 運 用 に 影 響 を 与えないテスト 環 境 で、 十 分 に 問 題 が 絞 り 込 まれてから 行 うようにしてください。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 117


9.4.3. VmMapvmmap は、プロセスが 使 っているメモリ内 容 をかなり 細 かく 見 ることができます。メモリリークが 疑 われる 場 合 に 詳 細 に調 査 することができます。9.4.4. SystemExplorerSystemExplorer も、システム 診 断 のためのユーティリティで、タスクマネージャよりも 詳 細 な 情 報 を 表 示 することができます。 非 常 に 多 くの 機 能 があります。http://www.systemexplorer.net/ からダウンロードすることができます。9.4.5. Process Walkerやました 工 房 (http://www001.upp.so-net.ne.jp/yamashita/index.htm ) からも、システムやプロセスの 状 況 監視 ツールが 公 開 されていますが、ProcessWalker Express が 多 くの 情 報 を 収 集 することができ、 便 利 と 思 います。このユーティリティでも、 各 プロセスに 関 して 非 常 に 多 くの 情 報 を 表 示 させることができます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 118


第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 119


9.5. パケットキャプチャプログラム9.5.1. 横 取 り 丸横 取 り 丸 というのは、HTTP プロトコルに 基 づく 通 信 の 要 求 と 応 答 の 内 容 を 記 録 しておくフリーウェアのユーティリティです。Web 対 応 アプリケーションや、<strong>uniPaaS</strong> リッチクライアントシステムの 動 作 に 問 題 がある 場 合 、 原 因調 査 に 役 立 ちます。横 取 り 丸 は、ベクター(http://www.vector.co.jp/)などのダウンロードサイトや、 開 発 者 のサイト(http://hidemaru.xaxon.co.jp/index.html) から 無 料 でダウンロードすることができます。横 取 り 丸 は、プロキシサーバとして 動 作 し、パケットのデータを 保 存 します。 一 覧 には、リクエスト 時 刻 、 応 答 時刻 、メソッド、リクエスト・ 応 答 サイズなどが 表 示 されます。各 リクエストをダブルクリックすると、その 内 容 が 表 示 されます。また、キャプチャしたデータはファイルに 保 存 し、 後 からそのファイルを 開 いて 調 査 することもできます。例 1: リッチクライアント 起 動 時 のエラーリッチクライアント 関 係 の 設 定 が 間 違 っていると、リッチクライアントプログラムを 起 動する 際 にエラーが 出 ます。例 えば、 「リモートサーバがエラーを 返 しました」が 出 る 場 合 を 見 てみます。横 取 り 丸 で 通 信 を 監 視 すると、 右 図 のようなパケットでした。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 120


中 身 を 見 てみると、 応 答 の 結 果 が、「404Object Not Found」でした。これは、 指 定 された URL を、Web サーバが認 識 できなかったことを 意 味 します。そこで URL を 再 度 良 く 見 てみると、 仮 想ディレクトリが uni18Script になっていました。 本 当 は uni18Scripts ( 最 後 の「s」がある)なので、これが 誤 りであることがわかります。この 仮 想 ディレクトリは、MAGIC.INI ファイルの InternetDispatcherPath から 取 られるものなので、MAGIC.INI を 確 認 し、 修 正 します。例 2: ブラウザコントロールやイメージが 表 示 されないリッチクライアントプログラムの 起 動 は OKだが、ブラウザコントロールに PDF ファイルや HTML ファイルを 表 示 する 際 にエラーになる 場 合 や、イメージファイル( 背 景 、イメージコントロール、イメージボタン) が 表示 されないなどの 問 題 がある 場 合 を 見 てみます。このようなエラーが 出 る 場 合 には、しばらく(1~2 分 )だんまりになって、その 後 にエラーとなる、という 場 合 もしばしばあります。横 取 り 丸 で 見 てみると、 次 のような 応 答 が 見 られます。「 応 答 サイズ」に 表 示 がなく、ダブルクリックして「 応 答 情報 」を 見 ても 空 白 でした。このような 状 況 は、URL に 指 定 されたサーバ 名 が 認 識 できなかったか、 指 定 の Web サーバが 起 動 していなかった 場 合 に 起 こります。 今 の 例 では、URL は http://myserver01/… でしたが、この myserver01 の Web サーバが 認 識 されなかったということです。ネットワークの 設 定 の 問 題 になるので、(1) myserver01 が 起 動 しているか、(2) ping myserver01 で 返 答 が 返 っ第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 121


てくるか、(3) Web サーバが 起 動 しているか?などを 確 認 してください。サーバの 移 行 や、システムの 移 行 などで、 設 定 と 実 際 のホスト 名 とが 異 なった 可 能 性 も 考 えられます。例 3: 起 動 ・ 動 作 が 遅 いリッチクライアントプログラムが 動 くは 動 くのだが、 起 動 ・ 動 作 が 異 常 に 遅 いので、 原 因 を 突 き 止 めたいということがあります。リッチクライアントプログラムのパフォーマンスに 関 しては、 多 くの 要 因 がありますが、その 一 つとして、クライアントとサーバ 間 の 通 信 量 や 回 数 が 多 い、という 可 能 性 があります。これについて 確 認 するときにも、横 取 り 丸 が 使 えます。ここの 例 では、2 項 目 だけの 簡 単 なリッチクライアントプログラムですが、コントロール検 証 でわざと 多 数 のサーバアクセスが 発生 するようなロジックを 入 れてみました。起 動 して、 項 目 間 を 移 動 すると、もたつき感 があります。横 取 り 丸 を 見 てみると、カーソル 項 目 N から A に 移 動 するたびに、 多 くの 通 信 が 起こっている 状 況 が 見 て 取 れます。カーソルが 項 目 A から 項 目 N に 移 動 する際 にはこのような 通 信 はありませんでした。このように、 横 取 り 丸 で 通 信 の 状 況 を 観 察 することにより、「 遅 い」と 感 じられる 場 所 で、 裏 でどのような 処 理 が起 こっているのかを、 推 測 することができます。 確 認 すべきは、 次 のようなところでしょう。通 信 の 回 数 : 回 数 が 多 いと 動 作 が 遅 くなります。この 場 合 不 要 なサーバアクセスが 発 生 しないよう、プログラムロジックを 見 直 す 必 要 性 があります。「 応 答 時 刻 」「 終 了 時 刻 」: 1 回 のリクエストの 応 答 時 間 に 時 間 がかかると、 全 体 の 時 間 も 遅 くなります。 応答 時 間 のかかっているリクエストに 対 応 するコマンドを 特 定 し、ロジックを 見 なおしてください。「リクエストサイズ」および「 応 答 サイズ」: リクエストのデータ 量 が 多 いと、 特 に 細 い 回 線 を 使 っている 場合 には、 処 理 が 遅 くなります。データサイズを 少 なくするようにプログラム 上 の 工 夫 をする 必 要 があります。( 例 : チャンクサイズの 調 整 など)また、「 例 2: ブラウザコントロールやイメージが 表 示 されない」であったように、PDF ファイルやイメージファイルの URL が 間 違 っていると、サーバからのエラーの 検 出 に 時 間 がかかるので、リッチクライアントプログラムの 動作 が 非 常 に 遅 くなってしまう 場 合 があります。 例 えば、 指 定 した URL のサーバ 名 が 間 違 っていた 場 合 、TCP/IPレベルでの 名 前 解 決 のための1~2 分 かかり、その 間 、リッチクライアントプログラムはハングアップしたような状 態 になります。このような 場 合 でも、「 例 2: ブラウザコントロールやイメージが 表 示 されない」で 説 明 したように、 横 取 り 丸 で 通信 状 況 を 観 察 すれば、 問 題 の 起 こる URL を 突 き 止 めることができますので、URL を 修 正 することで、 応 答 速 度の 問 題 を 解 決 できます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 122


例 4: キーボード 割 付 を 取 得 できませんリッチクライアントの 起 動 時 に、「キーボード 割 付 を 取 得 できません」というエラーが 出 て、 起 動 できないことがあります。このエラーは 横 取 り 丸 を 漠 然 と 観 察してもわかりにくいエラーとなりますが、とにかく、 横 取 り 丸 で 観 察 すると、次 のような 内 容 になっていました。これだけでは 何 が 悪 いのかよくわかりませんが、3 番 目 のパケットの 内容 を 見 てみました。すると、 随 所 に「(null)」という 設 定 が 見 つかりました。その 中 に、という、それらしい 記 述 もありました。その 他 に、なども 見 られます。このことから、「キーボードマップテーブルなどの URL に 何 か 問 題 がある」ということが 推 測 されます。横 取 り 丸 からは、これ 以 上 のことを 読 み 取 ることはできませんが、キーボードマップテーブルは RIA キャッシュに 作 られるものなので、RIA キャッシュに 何 か 問 題 があるのではないかと 思 われます。今 回 の 例 では、MAGIC.INI の RIACacheFilesPath が 間 違 っていた( 存 在 しない 場 所 をさしていた) のが 問 題 の原 因 で、 正 しいディレクトリを 指 定 することにより 解 決 しました。9.5.2. ネットワークモニタネットワークモニタと は、ネットワーク 上 を 流 れるパケットをキャプチャするソフトウェアです。横 取 り 丸 との 大 きな 違 いは、 横 取 り 丸 は HTTP プロトコル 上 を 流 れる 通 信 パケットに 特 化 したユーティリティであったのに 対 し、ネットワークモニタは PC 上 の 特 定 のネットワークカードを 監 視 して、そこを 通 過 する HTTP 以外 のプロトコルのデータも 含 むすべてのデータをキャプチャできるところにあります。キャプチャするデータ 量 を 減 らすために、フィルタを 定 義 して 特 定 の 条 件 が 成 立 するパケットのみをキャプチャするということもできます。また、キャプチャしたデータに 対 して、 表 示 のフィルタをかけて、 表 示 内 容 を 絞 り 込 むこともできます。ネットワークモニタの 代 表 的 なものとしては、 次 のようなものがあります。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 123


Microsoft Network Monitor は、Microsoftの Web サイト から 無 償 でダウンロードできるネットワークモニタです。WireShark は、もと Ethereal と 呼 ばれていたネットワークキャプチャツールで、オープンソースソフトウェアです。 機 能 としてはMicrosoft Network Monitor と 同 様 で、ネットワーク インターフェース カードを 特 定 して、そこを 通 るデータをすべてキャプチャします。Web サイト http://sourceforge.net/projects/wireshark/ からダウンロードすることができます。Packetyzer は、Ethereal ( 現 WireShark) の流 れをくむネットワークキャプチャツールで、操 作 法 も 似 ています。WireShark に 比 べて、パケットの 分 析 機 能 が 多 くあります。現 在 はアップデートが 中 止 され、 商 用 のソフトウェアに 吸 収 されたようですが、Webサイト http://sourceforge.net/projects/packetyzer/ からダウンロードすることができます。いずれも 機 能 や 操 作 法 は 似 ているので、いずれか 一 つを 選 んで 使 えばよいでしょう。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 124


9.6. キーボードマクロキーボードマクロというのは、PC ユーザのキー 操 作 やマウス 操 作 をキャプチャ・ 記 録 して、 後 で 同 じ 操 作 を 自 動で 再 生 することができるユーティリティです。一 般 には、 決 まった 操 作 手 順 を 自 動 化 するために 使 われるものですが、テスト 段 階 において、 同 じ 操 作 を 繰 り返 し 行 ないストレスをかけるようなテスト(リグレッションテスト)に 応 用 することができます。キー 入 力 のシミュレーションを 行 うものなので、オンライン、リッチクライアントいずれのプログラムにも 利 用 することができます。9.6.1. ReckeyReckey はキーボード 入 力 のみをキャプチャ・ 再 生 することができるユーティリティです。マウス 操 作 は 利 用 できませんので、カーソルの 移 動 には TAB キーあるいはショートカットを 使 い、メニューも Alt+X のショートカットキーを 用 いることになります。キャプチャした 内 容 はテキストファイルに 格 納 されるので、 適 当 に 手 で 編 集 して、ループ 構 造 を 持 つような 独 自のスクリプトを 作 成 することも 可 能 です。機 能 的 には 比 較 的 単 純 ですが、それだけに 覚 えるのも 簡 単 で、 単 純 なリグレッションテストに 活 用 することができると 思 います。RecKey は、Web ページ http://www.hi-ho.ne.jp/kyagi/ からダウンロードすることができます。利 用 例 : アプリケーションの 定 形 入 力 の 繰 り 返 しRecKey の 利 用 は、(1) 記 録 、(2) スクリプトの 修 正 、(3) 再 生 ( 実 行 ) という 3 段 階 で 行 ないます。最 初 に 記 録 を 行 ないます。アプリケーションを 起 動 し、テストしたい 画 面 を 表 示 します。RECKEY を 起 動 し、「 記 録 」ボタンを押 します。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 125


キーボードを 使 って、 一 連 の 処 理 を行 い、RecKey に 記 録 させます。操 作 では、 文 字 データの 入 力 の 他 、ズームからの 一 覧 選 択 やファンクションキー(F3、F4)、Enter キーなども 使 うことができます。終 わったら、RecKey の 記 録 を 停 止し、 適 当 な 名 前 でファイルに 保 存 しておきます。記 録 の 段 階 で 重 要 なことは、 次 のことです。 キーボードのみで 操 作 すること。RecKey はマウス 動 作 を 記 録 できません。 従 って、ボタンなどは Tab でパークできるようになっているか、あるいはショートカットキーでクリックすることができるようになっている必 要 があります。 最 初 と 最 後 とを 合 わせること。 例 えば、データ 入 力 プログラムであれば、まっさらの 初 期 状 態 から 始 まり、一 連 の 入 力 と 確 定 とを 行 い、 次 の 入 力 のためのまっさらの 状 態 で 終 わる、というようにします。これが 合 っていないと、 繰 り 返 しを 正 しく 行 えなくなります。記 録 が 終 わったら、スクリプトの 編集 を 行 います。スクリプトの 編 集 は、「 編 集 」メニューを 選 ぶと、ノートパッドが 開 きます。記 録 直 後 のスクリプトは、 右 図 のようなものです。スクリプトの 意 味 については、 直 観的 にも 理 解 しやすいですが、 正 確 には RecKey のマニュアルを 参 照 してください。100 回 の 繰 り 返 しを 行 わせるために … で 囲 みます。また、キー 入 力 に 適 当 な 間 隔を 置 くため、 を 入 れています。3 秒 のウェイトを 置 きたいところにを 入 れました。編 集 が 終 わったら、ノートパッドを 閉じます。これで 変 更 が RecKey に 反映 されます。ここで、スクリプトをまたファイルに保 存 してください。//*** 修 正 したら 上 書 き 保 存 してください。>//*** この 行 の 次 から 修 正 してください。{Tab 3}{F5}{Down 2}{Enter}{Tab 2}123{Tab}abc{Tab}qwe{Tab}{F5}{Down 2}{Enter}{Tab 2}{F5}{Down 2}{Enter}{Tab}2{Down}{F5}{Down 3}{Enter}{Tab}2{Tab}{Escape}{ 2}//*** 修 正 したら 上 書 き 保 存 してください。>//*** この 行 の 次 から 修 正 してください。{Tab 3}{F5}{Down 2}{Enter}{Tab 2}123{Tab}abc{Tab}qwe{Tab}{F5}{Down 2}{Enter}{Tab 2}{F5}{Down 2}{Enter}{Tab}2{Down}{F5}{Down 3}{Enter}{Tab}2{Tab}{Escape}{ 2}第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 126


以 上 で、スクリプトができあがりです。あとは、「 再 生 」ボタンを 押 せば、スクリプトに 従 って、 自 動 的 にキー 入力 が 行 われるようになります。RecKey 再 生 時 の 注 意 事 項 として、 次 のようなことがあります。 再 生 中 はマウスやキーボード 等 の 操 作 を 一 切 行 ってはいけません。RecKey はスクリプトに 従 って、 馬 車馬 のようにキー 入 力 をどんどんシミュレートして 行 くだけであり、フォーカスがどのウィンドウにあるかとか、<strong>uniPaaS</strong> の 状 態 がどうなっているかとかは 一 切 わかりません。このため、マウス 操 作 によりフォーカスのあるウィンドウが 変 わったりすると、 意 図 していたようなストレステストを 行 うことができなくなってしまいます。 複 雑 な 操 作 だと、スクリプトが 思 ったように 再 生 されないことがあります。デバッグ 機 能 はありませんので、再 生 しながら 動 作 を 確 認 する 試 行 錯 誤 が 必 要 になります。タイミング 的 に 厳 しい 場 合 には、Interval でキー 入 力 間 隔 に 余 裕 を 持 たせるとか、Wait で 待 ちを 入 れるなどの 調 整 が 必 要 になります。RecKey の 再 生 は 中 断 することができますが、 中 断 するとキーボードが 中 途 半 端 な 状 態 になってしまい、Alt キーを 押 していないのに Alt キーを 押 したのと 同 じような 状 態 になってしまうことなどがあります。このような 場 合 には、キーボードの Alt キー、Ctrl キー、Shift キーなどを 押 して 離 す、ということを 行 うと 直 ることがあります。これらのキーはキーボードの 左 右 にある 場 合 もあるので、 両 方のキーで 行 ってみてください。9.6.2. UWSCUWSC はシェアウェア (Free バージョンもあり) のキーボードマクロユーティリティで、キー 入 力 とマウス 入 力 とをキャプチャ・ 再 生 することができます。http://www.uwsc.info/ からダウンロードすることができます。BASIC に 似 たスクリプト 言 語 を 持 ち、 多 くの 組 み 込 み 関 数 や 制 御 構 造 があり、かなり 機 能 の 高 いもので、 単 純な 繰 り 返 しだけでなく、 条 件 分 岐 やデータを 毎 回 変 えることなどもできます。RecKey と 比 べると、RecKey は 単 純 な 機 能 しかありませんが、 理 解 しやすく 手 軽 に 使 うことができます。UWSCは 機 能 が 高 いので 応 用 範 囲 が 広 いですが、 理 解 して 使 いこなすのにやや 壁 が 高 いように 思 われます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 127


9.7. その 他9.7.1. Dependency WalkerDependency Walker は、EXE や DLL モジュールの 依 存 関 係 をチェックするユーティリティです。Windows の 実 行可 能 モジュール (EXE)は、 通 常 、 多 くの 共 有 DLL モジュールを 呼 び 出 して 実 行 を 行 うので、もし 利 用 しているDLL モジュールがシステムにインストールされていなければ、 起 動 時 にエラーとなって、 実 行 することができません。<strong>uniPaaS</strong> の 場 合 には、 次 のような 時 にこのようなエラーが 起 こります。• <strong>uniPaaS</strong> モジュール (uniStudio.exe や uniRTE.exe など)が 必 要 とする DLL が 見 つからないとき ( 誤 って削 除 してしまったとか、 必 要 なサブシステムがインストールされていなかった、など)• ゲートウェイをロードしようとしたときに、 必 要 な DBMS クライアントモジュールがインストールされていなかったとき。Dependency Walker は、 依 存 関 係 のある EXE/DLL ファイルをシステム 内 で 確 認 し、 欠 損 している 場 合 にはエラーを 表 示 します。http://www.dependencywalker.com/ からダウンロードすることができます。例 : ゲートウェイのロードに 失 敗 する 場 合MAGIC.INI ファイルで 指 定 されているゲートウェイのロードに 失 敗 すると、 下 記 のようなエラーが <strong>uniPaaS</strong> 起 動時 に 表 示 されます。これは Oracle のゲートウェイ (mgoracle.dll) がロードできなかった 例 です。このような 場 合 に、ゲートウェイ MGOracle.dll がロードされなかった 原 因 を 調 べるために、Dependency Walkerを 使 います。1. ゲートウェイ (エラーメッセージにフルパスが 記 述 されています。 通 常 、<strong>uniPaaS</strong> のインストールディレクトリの 下 の Gateways サブディレクトリにあるはずです) が 存 在 するかどうかを 確 認 します。もしなければ、<strong>uniPaaS</strong> のインストーラを 起 動 して、 追 加 インストールします。2. あるのにエラーが 出 ている 場 合 には、Dependency Walker を 起 動 します。3. Dependency Walker で、ゲートウェイの MGOracle.dll を 開 きます。→ 次 の 図 のような 画 面 が 表 示 されます。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 128


4. これを 見 ると、「Error opening file:…」として、3 つの DLL が 見 つからなかったことがわかります。◦ MGXERCES-C_2_6.DLL というのは、<strong>uniPaaS</strong> インストールディレクトリにあり、uniStudio.exe/uniRTE.exe も 利 用 するものです。このファイルは 実 行 時 には uniStudio/uniRTE でロードされているので、Gateway ディレクトリで 見 えなくても 大 丈 夫 です。◦ OCI.DLL というのは、Oracle のクライアントモジュールです。これが 欠 損 しているということは、Oracle のクライアントモジュールがインストールされていないか、インストールされていても PATHが 通 っていないために 見 つけることができなかったことを 意 味 します。Oracle のクライアントモジュールを 再 インストールすることで 解 決 できるかもしれません。◦ DWMAPI.DLL というものも 欠 損 していますが、これはシステム 内 部 で 使 われているものであり、また、「delay-load」という 特 性 を 持 っているものなので、 見 つからなくても 実 際 上 は 問 題 になりません。第 9 章 <strong>uniPaaS</strong> 製 品 以 外 のツール 129


第 10 章 プログラミングの 小 技<strong>uniPaaS</strong> アプリケーション 実 行 時 の 問 題 調 査 やデバッグは、 今 まで 説 明 してきたようなツールを 使 うことにより効 率 化 することもできますが、<strong>uniPaaS</strong> アプリケーションにちょっとした 工 夫 をすることにより 更 に 効 率 化 することもできます。本 章 では、そのような <strong>uniPaaS</strong> プログラムでの 小 技 をいくつか 紹 介 します。ここで 示 したプログラムは、 弊 社 HP スキルアップセンターよりダウンロードできます。第 10 章 プログラミングの 小 技 130


10.1. Logging 関 数第 2 章 「<strong>uniPaaS</strong> 実 行 エンジンの 出 力 ログ」で、アクティビティモニタによる 問 題 追 跡 の 方 法 について 説 明 しました。アクティビティモニタに 出 力 する 内 容 は、「ロギングダイアログ」 (2.5 「ロギングダイアログでフィルタを 設 定するには?」 参 照 ) で 設 定 しますが、ここで 設 定 するとアプリケーション 実 行 の 最 初 から 最 後 まで、この 設 定 に従 ってログが 出 力 され、 不 要 な 部 分 のログが 大 量 に 出 てきます。そうなると 本 当 に 見 たいところを 大 量 のログの中 から 見 つけるのが 難 しい、 実 行 速 度 が 遅 くなり 調 査 に 支 障 を 来 す、などが 問 題 になることもあるでしょう。<strong>Magic</strong> <strong>uniPaaS</strong> では、Logging 関 数 を 使 って、 記 録 するログの 内 容 を、プログラムから 動 的 に 変 更 することができるようになりました。これにより、ログ 取 りの 不 要 な 部 分 の 実 行 中 はログをオフにしておき、 本 当 に 必 要 な 部 分に 入 ったときに 有 効 にする、というようなログレベルのコントロールが 可 能 になります。この 関 数 を 実 行 すると、 即 時 に 変 更 内 容 が 有 効 になります。MAGIC.INI やロギング ダイアログでの 設 定 には 影響 を 与 えません。構 文 :Logging ( 開 始 / 停 止 , フィルタ)パラメータ: 開 始 / 停 止 … フィルタの 開 始 / 停 止 を 指 定 する 論 理 値 True…フィルタを 開 始 します。 False … フィルタを 停 止 します。 フィルタ( 文 字 ) … フィルタオプションを 表 す 文 字 列 。 以 下 のオプションが 指 定 できます。戻 り 値 :例 :Task Levels DataViewRecompute Flow EventsLogBrowser Gateway TransCacheBackgroundMsg BeginEndMsg LogSynchALLExecutionLogFileName=(ファイル 名 )Btrieve= (N,D,S,C のどれか)DB2400= (N,D,S,C のどれか)Oracle= (N,D,S,C のどれか)AS400= (N,D,S,C のどれか)ODBC= (N,D,S,C のどれか)RESETMicrosoftSQLServer = (N,D,S,C のどれか)Memory= (N,D,S,C のどれか)論 理 値 … 処 理 が 成 功 した 場 合 「True」が 返 ります。Logging (‘FALSE’LOG,’Oracle’)注 意 事 項 : [フィルタ]の 指 定 が 正 しくない 場 合 、「False」が 返 ります。 「ExecutionLogFileName」で 外 部 ログファイル 名 が 設 定 され、ファイルが 作 成 できなかった 場 合 、「False」が 返 ります。メッセージは mgerror.log に 書 き 込 まれます。(ログファイル 名 は、MAGIC.INI ファイルの GeneralErrorLog パラメータで 変 更 できます。) 外 部 ログが 設 定 されず、デバッグモードも 設 定 されていない 場 合 、「False」が 返 ります。 [ 開 始 / 停 止 ]パラメータが「True」で DBMS パラメータが「N」と 評 価 された 場 合( 例 :’True’,’ODBC=N’)、ゲートウェイオプションは 無 視 され、「False」が 返 ります。第 10 章 プログラミングの 小 技 131


開 発 エンジンがデバッグモードでない 場 合 、( 指 定 されていれば) 外 部 ログファイルのみに 反 映 されます。この 関 数 は、MAGIC.INI を 更 新 しません。 設 定 された 値 は、 現 在 のコンテキストでのみ有 効 です。 開 発 エンジンに 戻 ると、 値 は MAGIC.INI に 設 定 されているデフォルト 値 に 戻ります。[フィルタ]パラメータの「ALL」が 停 止 (False)とともに 使 用 された 場 合 、 全 ての 値 は Falseに 設 定 されます。[フィルタ]パラメータの「ALL」が 開 始 (True)とともに 使 用 された 場 合 、 全 ての 非 ゲートウェイ 値 は True に 設 定 されます。「RESET」フィルタは、INI の 値 を 全 てリセットします。この 場 合 、 第 一 パラメータは、Trueとします。False が 設 定 された 場 合 、 無 視 され「False」が 返 ります。この 関 数 を 使 うと、アクティビティモニタの 出 力 内 容 をコントロールできるので、 欲 しい 情 報 だけを 的 確 に 採 取 することができるようになります。例 : ゲートウェイログ 出 力 を 特 定 のタスク 実 行 中 にだけ 限 定 する例 として、あるタスクに 関 してだけ、ゲートウェイのログを 調 査 したいときがあるとします。「ロギング」ダイアログや MAGIC.INI の 設 定 でゲートウェイログを 出 力 するようにしておくと、アプリケーションの 最 初 から 最 後 まですべてゲートウェイのログがアクティビティモニタやログファイルに 記 録 されるようになり、 複 雑 なロジックのアプリケーションでは、 膨 大 なログ 出 力 となることがあります。しかし、 本 当 にゲートウェイログを 採 取 したいタスクが 特 定 されている 場 合 には、 次 のようにして、そのタスクの実 行 期 間 中 だけログを 記 録 するようにできます。「メインプログラム」のタスク 前 処 理 で、Logging ('FALSE'LOG, 'ALL') を 実 行 し、すべてのログ 出 力 を 抑 制します。ログを 記 録 したいタスクのタスク 前 処 理 で、Logging ('TRUE'LOG, 'Gateway')、および Logging('TRUE'LOG,'MicrosoftSQLServer=D') を「アクション」コマンドで 実 行 します。(DBMS が SQL Server で、ログのレベルが D ( 開 発 者 ) の 場 合 )タスク 後 処 理 で、 再 度 Logging ('FALSE'LOG, 'ALL') を 実 行 し、ログ 出 力 を 抑 制 します。第 10 章 プログラミングの 小 技 132


10.2. FlwMtr 関 数実 行 の 記 録 のために、アクティビティモニタに 任 意 のメッセージを 記 録 しておくことができます。これには FltMtr関 数 を 使 います。構 文 :FlwMtr ( 文 字 列 , 論 理 ブレイク)パラメータ: 文 字 列 ( 文 字 型 /Unicode 型 ) … アクティビティモニタに 表 示 させる 文 字 列 論 理 ブレイク ( 論 理 型 ) … <strong>V1Plus</strong> では 無 効 です。戻 り 値 :常 に False が 返 ります。FlwMtr 関 数 を 実 行 すると、 指 定 した「 文 字 列 」がアクティビティモニタに 記 録 されます。アクティビティモニタには、他 のログ (タスク 起 動 ・ 終 了 、フロー、DBMS 活 動 ) なども 記 録 されるので、 例 えば「このコマンドはどのタイミングで 実 行 されるのか?その 時 の 項 目 の 値 は 何 か?」などを 調 べたい 場 合 に、デバッグ 用 に FlwMtr 関 数 を 使 って 記 録 をすることができます。リファレンスマニュアルでは、 第 2 パラメータ「 論 理 ブレイク」として、'TRUE'LOG の 場 合 にデバッグブレークがかかるとありますが、<strong>V1Plus</strong> では 無 効 になっています。第 10 章 プログラミングの 小 技 133


10.3. 項 目 の 表 示 プログラム<strong>uniPaaS</strong> のプログラムを 実 行 している 時 、 特 定 の 時 点 での 変 数 の 値 を 見 てみたい、と 思 うことがあります。デバッガが 利 用 できる 場 合 には、ブレークを 入 れて、「 項 目 」 画 面 を 表 示 させることにより、その 時 点 で 有 効 な 項目 の 値 を 見 ることができます。しかし、(1) ブレークを 入 れたくない 場 合 、(2) デバッガが 利 用 できない 場 合 、(3)ファイルなどに 記 録 をとっておきたい 場 合 、などでは 別 の 方 法 を 考 える 必 要 があります。このような 場 合 には、ちょっとした <strong>uniPaaS</strong> プログラムの 作 成 が 必 要 になりますが、Var 関 数 を 使 って 実 現 することができます。プログラム「 項 目 出 力 」は 次 のように 作 ります。タスク 特 性入 出 力 ファイルタスク 名 : 項 目 出 力タスクタイプ: バッチ初 期 モード: 修 正タスク 終 了 条 件 : Counter(0) >= 'A'VAR名 前 : Outメディア: F=ファイルアクセス: A= 追 加書 式 : L=ライン式 : 'var.log'データビュー 変 数 A 「this counter」 数 値 型 、 書 式 8ロジック/レコード 後 処 理項 目 更 新 A = Counter(0)フォーム 出 力 O= 出 力 、 フォーム: 4 (out line)、ファイル: 1 (Out)フォーム/4 out line クラス: 1インターフェースタイプ: T=テキスト 形 式幅 : 230、 高 さ: 1項 目 1: (0,0) – (30,1)、 型 : U=Unicode、 書 式 : 30、データ= VarName(a)項 目 2: (31,0) – (200,1)、 型 : U=Unicode、 書 式 : 200、データ: CASE (VarAttr (A),'A', VarCurr(A),'N', Str(VarCurr(A),'N16.2'),'L', IF(VarCurr(A),'TRUE','FALSE'),'D', DStr(VarCurr(A), 'YY/MM/DD'),'T', TStr(VarCurr(A), 'HH:MM:SS'),'U', VarCurr(A),'(type:' & VarAttr(A) & ')')Var 関 数 を 簡 単 に 説 明 すると、VarAttr は 項 目 の 型 を 1 文 字 で 返 します ( 文 字 型 → 'A'、 数 値 型 → 'N' など)。また、VarCurr は、 項 目 の 現 在 の 値 を 返 します。 値 の 型 は、パラメータで 指 定 した 項 目 の 型 そのものです。「 項 目 出 力 」プログラムを 簡 単 に 説 明 すると、このプログラムでは、VarCurr(A) の 値 をファイルに 出 力 します。フォームの 項 目 2がその 値 ですが、この 式 が CASE を 使 った 複 雑 なものになっているのは、VarAttr (A) のタイプが 文 字 型 とは 限 らないので、 文 字 型 に 変 換 するために、それぞれの 型 に 合 った 組 み 込 み 関 数 と 書 式 とを 使 っているためで、やりたいことは、VarCurr(A)の 値 を 取 得 することです。このバッチタスクはループを 作 りますが、その 終 了 条 件 は Counter(0) >= 'A'VAR となっています。これだと、「このプログラムは、 自 分 のタスクの 変 数 A の 値 を 出 力 するだけではないか? 変 数 A の 値 は 数 値 型第 10 章 プログラミングの 小 技 134


で Counter(0)に 代 入 されているが、 終 了 条 件 が Counter(0) >= 'A'VAR とはどういうことだ?」と 思 われるかもしれません。この 謎 を 解 く 鍵 は、 次 の 二 つの <strong>Magic</strong> ルールにあります。1. VAR リテラルの 値 は、 実 際 には 数 値 です。 例 えば、'A'VAR = 1、'B'VAR = 2、… というように、'A' を 起 点 とする 連 続 整 数 値 となります。2. 実 行 時 には、VAR リテラルの 値 は、メインプログラムから 現 在 実 行 中 のタスクまでのすべてのタスクで 定 義されているデータ 項 目 を 積 み 重 ねて、 最 初 (メインプログラムの 最 初 の 項 目 )を1と 数 えた 連 続 数 値 となっている。1は 簡 単 に 理 解 できると 思 いますが、2 は 少 し 説 明 が 必 要 です。例 として、タスク A、B、C があり、それぞれ、2 個 、2 個 、4 個 の 項 目 がデータビューに 定 義 されているとします。そして、タスク A が B を、B が C を呼 び 出 したとします。この 状 態 で、 上 記 の「 項 目 出 力 」タスクを 呼 び 出 します。このとき、VAR リテラルの 値 は、 右図 のようになっています。これからわかるように、「 項 目 出 力 」タスクの 'A'VAR は、この 状 態 では9 になっています。タスク 変 数 名 VAR リテラル 値ABC今 日 の 日 付今 の 時 刻NAProductIDProductNameCategoryIDUnitPrice項 目 出 力 this counter 912345678VAR リテラルの 値 についてのルールを 理 解 すれば、 終 了 条 件 Counter(0) >= 'A'VAR は、この 場 合 Counter(0)>= 9 と 書 いたのと 同 じで、Counter(0) が 1 ~ 8 まで、8 回 のループが 走 ることがわかります。レコード 後 処 理 では、Counter(0) の 値 を A に 代 入 して、VarCurr(A) を 出 力 しますから、ループで VarCurr(1) ~VarCurr(8) までについて 出 力 がされます。このようにして、「 項 目 出 力 」タスクは、その 時 点 で 有 効 な 項 目 をすべて 出 力 できるようになります。第 10 章 プログラミングの 小 技 135


ファイルに 出 力 された 結 果 は、 右 図のようになります。変 数 項 目 . 今 日 の 日 付 10/11/02変 数 項 目 . 今 の 時 刻 18:37:36NA.N 1.00NA.AaaabbcProducts.ProductID 6.00Products.ProductNameGrandma's Boysenberry SpreadProducts.CategoryID 2.00Products.UnitPrice 25.00この 項 目 表 示 プログラムは、コンポーネント 化 しておけば、デバッグしているアプリケーションから簡 単 に 呼 び 出 すことができるようになります。第 10 章 プログラミングの 小 技 136


10.4. コマンドラインリクエスタのログ 読 み 込 みプログラム<strong>uniPaaS</strong> のコマンドラインリクエスタ (Mgrqcmdl.exe) のログ 出 力 機 能 により、 実 行 されたリクエストについての 情報 を 一 覧 で 取 得 することができます(4.1.4 「 個 々のリクエストについて 表 示 させるには?」 参 照 )。その 出 力 フォーマットは、 次 のようなものです。C:\Program Files\<strong>uniPaaS</strong>\Enterprise Server <strong>V1Plus</strong>>mgrqcmdl -query=logLog of requests (MyServer/5215, 10:11:21)----------------------------------------------------------------------------# Request Status Start Elapsed Completion CodesId Time (sec.) (Mri, Runtime, Dbms)===============================================================================1 | 22 |DONE | 16/11 09:39:42 | 0 | -OK (0) 0 47Program : "NA_MAIN in sub (update fail)" ("subtask-link")Priority : 0Client : 00000000EF42B255_D (pid 5656), EnterpriseServer : MyServer/1501= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =2 | 21 |DONE | 16/11 09:39:41 | 1 | -OK (0) 0 47Program : "NA_MAIN in sub (update fail)" ("subtask-link")Priority : 0Client : 00000000EF42B255_D (pid 5656), EnterpriseServer : MyServer/1501= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =・・・ ( 以 下 省 略 )この 出 力 はテキストファイルに 格 納 されますが、データベース 化 することにより、 解 析 が 容 易 になります。 例 えば、 実 行 時 間 (Elapsed sec.) が 長 い 順 にリクエストを 表 示 させたいとか、あるいはクライアント(Client) 別 にリクエストをグループ 化 して 調 査 したい、というような 場 合 、テキストファイルのままでは 難 しいですが、データベース化 することで 簡 単 になります。このようなデータベース 化 プログラムは、<strong>uniPaaS</strong> で 簡 単 に 作 成 することができ、 基 本 的 にはテキストファイル 読み 込 み → 行 の 解 析 → レコード 作 成 、という 処 理 になります。ログファイルは、 次 の5 行 が1リクエストに 対 応 していて、このパターンの 繰 り 返 しとなっています。===============================================================================1 | 22 |DONE | 16/11 09:39:42 | 0 | -OK (0) 0 47Program : "NA_MAIN in sub (update fail)" ("subtask-link")Priority : 0Client : 00000000EF42B255_D (pid 5656), EnterpriseServer : MyServer/1501それぞれの 項 目 の 意 味 は 次 の 通 りです。=============================================================================== | | | < 日 付 > < 時 刻 > | < 処 理 時 間 > | < 結 果 ステータス>Program : "" ("")Priority : < 優 先 度 >Client : (pid ), EnterpriseServer : /第 10 章 プログラミングの 小 技 137


各 項 目 は 固 定 長 ではないので、 各 行 から InStr、StrTok などの 関 数 を 使 って 項 目 値 を 切 り 出 すようになります。<strong>uniPaaS</strong> プログラムとしては 簡 単 なプログラムですので、 詳 しいことは 実 際 のプログラムを 見 てください。次 の 図 は、このログ 読 み 込 みプログラムを 使 って 読 み 込 んだ 例 です。このように <strong>uniPaaS</strong> でデータベース 化 してしまえば、 簡 単 なものはオンラインプログラムの 実 行 時 オプション ( 位 置 づけ、 範 囲 付 、ソート) で 並 び 替 えができるし、 少 し 複 雑 なロジックを 必 要 とするようなものでも、<strong>uniPaaS</strong> プログラムを 作 って 対 応 することができるようになります。また、DataViewToText/DataViewToXML 関 数 などを 使 って、CVS ファイルや XML ファイルに 出 力して、Excel などで 分 析 することもできます。第 10 章 プログラミングの 小 技 138


10.5. アクティビティモニタ 出 力 の 読 み 込 みプログラムアクティビティモニタの 出 力 (2.1 「アクティビティ モニタとは 何 ですか?」 以 下 を 参 照 )も、テキストファイルからデータベース 化 することにより、 分 析 が 容 易 になります。このような 読 み 込 みプログラムも、<strong>uniPaaS</strong> で 簡 単 に 作成 することができます。アクティビティモニタの 出 力 例 を 以 下 に 示 します。 09:39:27.422 - >> 情 報 >> IO file 'SUPPORT\html_std.jpn' cannot be OPENED 09:39:33.575 - >> Calling task 'rc1' ('subtask-link') : Session Counter #4 (Request ID #3) 09:39:33.579 - >> 情 報 >> IO file 'SUPPORT\html_std.jpn' cannot be OPENED 09:39:33.610 - >> 開 始 ロード バッチ タスク - 'メインプログラム (subtask-link)' 照 会 モード 09:39:33.612 - 終 了 タスクのロード 09:39:33.614 - レコード 読 込 09:39:33.675 - >> 開 始 ロード リッチクライアント タスク - 'NA_MAIN in sub (update fail)' 修 正 モード 09:39:33.676 - 終 了 タスクのロード 09:39:33.679 - レコード 読 込 09:39:33.682 - 新 規 の 遅 延 トランザクション 書 込 2 09:39:33.683 - 開 始 レコード 前 09:39:33.684 - 終 了 レコード 前 09:39:33.730 - >> ............... Completed Request ID #3 (0.16 seconds) .................... 09:39:33.731 - >> .............................................................................. 09:39:33.789 - >> 情 報 >> Request's Session Counter #0 Server's Session Counter #4 09:39:34.447 - >> イベント 処 理 中 [コンテキストがフォーカス 喪 失 (L)] コントロール 名 : [ 無 効 ] 09:39:34.462 - >> Calling task 'rc1' ('subtask-link') : Session Counter #5 (Request ID #13) 09:39:34.001(c) - Starts Record Prefix 09:39:34.004(c) - Flow - (Step Forward) 09:39:34.475 - フロー - コール S=サブタスク : NA_MAIN ( 通 常 モード 前 方 ) 09:39:34.507 - 4,84627 ms7_ini(): >>>>> 09:39:34.509 - ,84627 ms7_ini(): MicrosoftSQLServer , Version <strong>uniPaaS</strong> 1.8 SP1a PT1-0 19-Jan-2010 09:39:34.510 - ,84627 Version <strong>uniPaaS</strong> 1.8 SP1a PT1, Log = mgmonitor.log, Level = Support/QA, Sync = Reopen, 09:39:34.512 - ,84627 ms7_ini(): >>の「4,84627」の 部 分 です。これはこれで 有 用 な 情 報 なのですが、メッセージとは 切 り 離 して 別 項 目 として 格納 した 方 が 良 いでしょうから、 切 り 離 します。リッチクライアントタスク 実 行 中 には、クライアント 側 の 活 動 ログも 併 せて 記 録 されます。クライアント 側 のログは、 次 の 例 のように、< 時 刻 > の 直 後 に「(c)」という 記 号 で 区 別 されています。第 10 章 プログラミングの 小 技 139


09:39:34.001(c) -Starts Record Prefixこれもまた 有 用 な 情 報 なので、メッセージとは 切 り 離 して、 別 項 目 として 格 納 します。データベースゲートウェイの 出 力 で、 改 行 コードがメッセージの 中 に 入 っているものがあります。 例 えば、次 のようなものがあります。 09:39:35.672 - ,85782 ms7_esqlc_fil_exist():select id from MAGICDB..sysobjects where name = 'NA_LINK' AND uid = user_id('') AND (type = 'U' OR type = 'V' OR type = 'S')このような 場 合 には、2 行 以 上 を1 行 に 連 結 してやる 必 要 があります。 連 結 の 必 要 があるか 否 かは、 行 頭に「」 の 形 式 のコンテキスト ID があるかどうかをチェックして 確 認 します。コンテキスト ID が 認 識 できない 行 は、 前 行 からの 継 続 行 として、 前 行 のデータに 連 結 します。以 下 に、このプログラムでデータベース 化 したログのイメージを 示 します。このようにデータベース 化 することにより、 例 えば、 次 のようなことができるようになります。コンテキスト ID 15639190537744 の 活 動 だけを 表 示 させたい: CtxID カラムで 範 囲 付 けを 行 います。テーブル NA_MAIN の 活 動 だけを 表 示 させたい: 「InStr (G,'NA_MAIN') > 0」という 式 で 範 囲 付 けします。タスクの 実 行 順 序 を 調 べたい: 「>> 開 始 ロード 」 で 始 まる 行 のみ 表 示 させます。第 10 章 プログラミングの 小 技 140


<strong>Magic</strong> <strong>uniPaaS</strong> <strong>V1Plus</strong>トラブル シューティング ツールCopyright © 2010<strong>Magic</strong> <strong>Software</strong> Japan K.K.,All rights reserved.第 2 版発 行2011 年 2 月 8 日〒151-0053 東 京 都 渋 谷 区 代 々 木 三 丁 目 二 十 五 番 地 三 号あいおいニッセイ 同 和 損 保 新 宿 ビル 14 階マジック ソフトウェア・ジャパン ( 株 )http://www.magicsoftware.co.jp/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!