- PR -

Apacheのタイムアウト発生メカニズム

1
投稿者投稿内容
RyoZy
会議室デビュー日: 2005/09/08
投稿数: 15
投稿日時: 2007-08-31 10:53
どうしても解決できないので皆様の知恵をお貸しください。

httpd.confのtimeoutディレクティブのタイムアウトが発生した場合の
動作確認をしたいのですが、タイムアウトを発生させることできません。
JavaアプレットからApacheへ接続しています。
どなたか以下についてご教授願います。
 ・タイムアウト発生メカニズムの図が掲載されているホームページ。
 ・タイムアウト発生方法。→特別なツールがないと無理でしょうか?


なお、動作確認の目的は以下です。
 ・タイムアウト発生時のApacheの出力メッセージ内容確認。
 ・タイムアウト発生後でも継続してServlet処理が可能であることの確認。


<試してみたこと>
httpd.confのtimeoutディレクティブを1秒に設定して以下を行いましたが、
送受信処理で時間はかかったもののタイムアウトにはなりませんでした。
正常に処理されてしまいました。
 ・POSTのServletへの送信データを100MByteに変更。
 ・POSTのServletからの受信データを100MByteに変更。

よろしくお願いします。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2007-08-31 19:55
質問の件のご教授(?)はできないんですが、たぶん「タイムアウト」について誤解していると思います。
「試してみたこと」は通信中のコネクションが切断されることを期待してやっていると思うのですが、そういうものではありません。送った要求に対して一定時間肯定も否定もなかった場合をタイムアウトと呼びます。
ほどよい図が掲載されているホームページは見つけられなかったのでネットワークの基礎の本を買って読むのをお勧めします。
Ay
常連さん
会議室デビュー日: 2006/10/29
投稿数: 45
投稿日時: 2007-09-01 00:47
telnetでWebサーバの80/TCPに接続し、
GETやPOST要求を行わずにhttpd.confで設定したタイムアウト時間待機していれば
タイムアウトすると思いますがどうでしょうか?
RyoZy
会議室デビュー日: 2005/09/08
投稿数: 15
投稿日時: 2007-09-04 19:47
→Java僧さん
ご指摘ありがとうございます。

> 送った要求に対して一定時間肯定も否定もなかった場合をタイムアウトと呼びます。
Servletで処理を止めてみましたが、httpd.conf(timeout)のタイムアウトは発生しませんでした。

Apacheのタイムアウトについて以下の情報を見つけました。
「接続タイムアウトは、サーバーが通信時に受信と送信を待機する時間を秒単位で定義します。
 特に、 接続タイムアウトではサーバーがGET要求を受け取るまで待機する時間、
 POSTまたはPUT要求時にTCPパケットを受信するまで待機する時間、
 TCPパケットに応答するACKを受け取るまで待機する時間を定義します。」

上記を見る限り、javaプログラムによりタイムアウト発生させることができないのではないかと
感じます。特殊なツールが必要なのでしょうか。


→Ayさん
ご指摘ありがとうございます。

telnetでポート80に接続する方法がわかりませんでしたので、以下のJavaのHTTP通信のソースコード
の『☆』で処理を止めてみましたが、httpd.conf(timeout)のタイムアウトは発生しませんでした。
この方法ではAyさんの意としていることと違うでしょうか?


private URL url;
private URLConnection uc;
private ObjectInputStream ois;
private ObjectOutputStream oos;

/* 接続 */
url = new URL(サーブレットのURL);
uc = url.openConnection();



/* 要求送信 */
uc.setDoInput(true);
uc.setDoOutput(true);
uc.setUseCaches(false);
oos = new ObjectOutputStream(uc.getOutputStream());
oos.writeObject(送信オブジェクト);
oos.flush();
ois = new ObjectInputStream(uc.getInputStream());

/* 応答受信 */
受信オブジェクト = ois.readObject();

/* 後処理 */
oos.close();
ois.close();

[ メッセージ編集済み 編集者: RyoZy 編集日時 2007-09-04 19:48 ]
1

スキルアップ/キャリアアップ(JOB@IT)