コンテキスト:私は過去2分間のatop履歴(atopのサンプリングが1分ごとに構成されています)に基づいてサービスのI / O使用量を計算するスクリプトを作成しています。次のコマンドを使用して履歴ファイルを生成します。
atop -P DSK,PRD -b [time] -e [time] -r > somefile_to_read_from
タグと一緒にatop
解析可能な出力オプション()を使用しています。-P
DSK
PRD
atop
マニュアルページには次のように記載されていますDSK
。
各論理ボリューム/複数のデバイス/ハードディスクに1行が表示されます。後続フィールド: 名前、I/O にかかったミリ秒、発行された読み取り数、読み取り用に送信されたセクタの数、発行された書き込み数および転送によって作成されたセクタの数。
それはPRD
言う:
各プロセスに1行を表示します。後続のフィールド:PID、名前(角括弧の間)、状態、インストール済みの古いカーネルパッチ( 'n')、使用された標準io統計( 'y'または 'n')、ディスクの読み取り、累積読み取りセクタの数、ディスク書き込み数、記録された累積セクタの数、キャンセルされた書き込みセクタの数、関連タスク/スレッドグループの数(TGID)、およびis_process(y / n)。
私はそれらが同じものだと思いました。ただし、ほぼ常に100%以上のI / O使用量の値を取得します(たとえば、ab
Apacheを実行するとき)。私はそれが私のプログラミングロジックとアルゴリズムに問題があると思いましたが、私が犯すことができる間違いを考えることができず、数時間壁に頭をぶつけ、それを計算するためにさまざまな方法を試しましたが、まだ同じ結果を得ました。結果。
その後、I / O使用率を持つ監視中のプロセスのみを表示するためにフィルタリングした後、1行ずつ生成された履歴ファイルを開き、読み取りを開始しました(この場合はベンチマークテストを実行してからApache)。何か気づいたのですが、それが本当ですDSK
。発行された書き込み数すべてのApachePRD
ラインを組み合わせたものよりはるかに低いです。」ディスク書き込み数。
私が間違って理解したのか、それとも何か間違っているのかはよくわかりません。履歴ファイルが大きすぎて表示できませんが、必要に応じてPastebinなどのファイルにアップロードできます。
私の質問は何DSK
ですか?発行された書き込み/読み取り数PRD
参考までに同じではありませんか?ディスクの読み取り/書き込み数?それ以外の場合は、一番上の履歴を使用して単一プロセスのI / O使用量を計算する方法は?
ベストアンサー1
まず私がman atop
やりたい言葉はこうだ。
とにかく、「ディスク読み取り」および「ディスク書き込み」カウンタは廃止されました。
トップレベルバージョン: 2.3.0 - 2017/03/25 09:59:59
からman iostat
:
転送はデバイスへのI / O要求です。複数の論理要求をデバイスへのI / O要求に結合できます。
これがプロセスI/Oの合計ですDSK
。
したがって、単一プロセスのI / O使用量は非常に正確ですprocess_io / sum_of_all_process_io
。 (私が知っている限り)論理要求がどのように結合されるかを確認する方法がないため、100%正確ではありません。