トップ回答者
Win32APIレベルでのトレースを採取方法について

質問
-
JP1/AJS3 ジョブにてキューイングが多発したため、ベンダー調査したところ
Win32APIで遅延が発生しているようでした。
遅延に影響を与える可能性のあるWin32APIとして以下があり
これらをOS側でWin32APIレベルでのトレースを採取する方法をご教示頂きたく
宜しく御願いします。
・CreateFile()(ファイルのオープン)
・ReadFile()(ファイルの読み込み)
・WriteFile()(ファイルの書き込み)
・FlushFileBuffers()(ディスクへのフラッシュ)
・CloseHandle()(ファイルのクローズ)
回答
-
「Win32APIで遅延が発生しているよう」と考えるその根拠が分からないので、なんとも言えませんが。。。
とりあえずお手軽に調べたいのであれば、"Process Monitor" を使えばトレースできます。ただし。。。。
提示されている API ですが、それら関数の実際の処理は、Kernel Mode 側の File System で行われます。
つまりそれら API はその名の通り Interface であり、本当にそれら API で遅延が発生しているのであれば、API の先の Kernel Mode 側 (主に File System) での処理をトレースする必要があります。
その場合は、"Process Monitor" よりも詳細なトレースができる、WPT (Windows Performance Toolkit) を使う必要があると思います。そもそも。。。。
「JP1/AJS3 ジョブにてキューイング」ということは、ネットワーク越しのファイル アクセスということですか?
だとしたら、API コールによる遅延よりも、ネットワーク トラフィックの状態を確認したほうがいいような。。。気もします。- 回答としてマーク fu_ki 2019年11月15日 11:27
すべての返信
-
「Win32APIで遅延が発生しているよう」と考えるその根拠が分からないので、なんとも言えませんが。。。
とりあえずお手軽に調べたいのであれば、"Process Monitor" を使えばトレースできます。ただし。。。。
提示されている API ですが、それら関数の実際の処理は、Kernel Mode 側の File System で行われます。
つまりそれら API はその名の通り Interface であり、本当にそれら API で遅延が発生しているのであれば、API の先の Kernel Mode 側 (主に File System) での処理をトレースする必要があります。
その場合は、"Process Monitor" よりも詳細なトレースができる、WPT (Windows Performance Toolkit) を使う必要があると思います。そもそも。。。。
「JP1/AJS3 ジョブにてキューイング」ということは、ネットワーク越しのファイル アクセスということですか?
だとしたら、API コールによる遅延よりも、ネットワーク トラフィックの状態を確認したほうがいいような。。。気もします。- 回答としてマーク fu_ki 2019年11月15日 11:27
-
要するに「ベンダー調査したところ Win32APIで遅延が発生しているようでした。」というのは、「オペレーティングシステムに投げているファイル I/O が遅いので」という話なので、その意味で API の呼び出しだけ調べても確かにあまり意味はありませんね。
ネットワーク越しのファイルアクセスであればネットワークがボトルネックになっている可能性をまず疑っても良いでしょう。
※Process Monitor でネットワーク アクティビティも採取できるので、まずはそこから、でも良いですが。
Hebikuzure aka Murachi Akira
- 編集済み Hebikuzure aka Murachi AkiraMVP 2019年11月15日 6:58