Personal tools
You are here: Home ブログ 井上 Apacheのリクエスト処理時間(%T or %D)は正確には何の時間か
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

Apacheのリクエスト処理時間(%T or %D)は正確には何の時間か

Apacheのログに%T or %Dでリクエスト処理時間を載せることができます。%Tと%Dは内部的には同じ計算値で、単位が異なるだけです(%Tは秒、%Dはマイクロ秒)。

このリクエスト処理時間は、いつからいつまでの処理時間でしょうか。つまり計測時間の開始と終了はどのタイミングでしょうか。

終了はレスポンスデータをsend(2)し切ったタイミングです。

開始として思いつくのは次の3つのタイミングです。

  1. listenキューに入ったタイミング(3wayハンドシェイクの最初のACKを受けたタイミング)
  2. accept(2)が返ったタイミング(3wayハンドシェイクの最後のACKを受けたタイミング)
  3. リクエストデータをrecv(2)する前

実はどれも間違いです。正解は、リクエストデータの1行目のリクエスト行を読み終わったタイミングです(ソースコードで言うと server/protocol.cのread_request_line()で r->request_time に値を設定している行です)。

上記3案のうち、aは少し不自然なタイミングです。しかも、通常のソケットプログラミングでは、このタイミングはpoll/selectによるポーリングでしか知りえません。

b.のタイミングで計測すると、ワーカースレッドの数が足りない場合にワーカースレッドを待つ時間が加算されることになります。状況によっては意図と異なる値です。

c.のタイミングで計測すると、HTTPクライアントが接続だけしてリクエストデータを送信してこない時の待ち時間が加算されることになります。

そんなわけで、リクエスト行を読み終わったタイミングから計測開始、ということなのでしょう。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/response-time/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.