none
Win32APIレベルでのトレースを採取方法について RRS feed

  • 質問

  • JP1/AJS3 ジョブにてキューイングが多発したため、ベンダー調査したところ

    Win32APIで遅延が発生しているようでした。

    遅延に影響を与える可能性のあるWin32APIとして以下があり

    これらをOS側でWin32APIレベルでのトレースを採取する方法をご教示頂きたく

    宜しく御願いします。

    ・CreateFile()(ファイルのオープン)

    ・ReadFile()(ファイルの読み込み)

    ・WriteFile()(ファイルの書き込み)

    ・FlushFileBuffers()(ディスクへのフラッシュ)

    ・CloseHandle()(ファイルのクローズ)


    2019年11月14日 11:31

回答

  • 代表的なツールは Process Monitor ですね。

    書かれているような API 呼び出しのログが取れます。ただし負荷が大きく、採取されるログも膨大になります。


    Hebikuzure aka Murachi Akira

    • 回答としてマーク fu_ki 2019年11月15日 11:27
    2019年11月15日 3:08
  • 「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
    2019年11月15日 4:04

すべての返信

  • 代表的なツールは Process Monitor ですね。

    書かれているような API 呼び出しのログが取れます。ただし負荷が大きく、採取されるログも膨大になります。


    Hebikuzure aka Murachi Akira

    • 回答としてマーク fu_ki 2019年11月15日 11:27
    2019年11月15日 3:08
  • 「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
    2019年11月15日 4:04
  • 要するに「ベンダー調査したところ Win32APIで遅延が発生しているようでした。」というのは、「オペレーティングシステムに投げているファイル I/O が遅いので」という話なので、その意味で API の呼び出しだけ調べても確かにあまり意味はありませんね。
    ネットワーク越しのファイルアクセスであればネットワークがボトルネックになっている可能性をまず疑っても良いでしょう。
    ※Process Monitor でネットワーク アクティビティも採取できるので、まずはそこから、でも良いですが。


    Hebikuzure aka Murachi Akira


    2019年11月15日 6:55
  • Hebikuzure aka Murachi Akira様
    お馬鹿様


    早々のご返信ありがとうございました。
    WPT (Windows Performance Toolkit) 及びProcess Monitorでデータ取得してみます。
    なお、説明不足で大変申し訳ありませんでした。
    JP1/AJSは自分持ちで稼動させておりますので、ファイルI/Oの状況を調査したいと思います。
    • 編集済み fu_ki 2019年11月15日 11:25
    2019年11月15日 11:25