質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

2849閲覧

サーバーサイドで時間がかかる処理について、Apacheのリクエストタイムアウトをさせたいくない

updateDobule

総合スコア14

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2021/05/10 02:59

ブラウザからサーブレット(ファイル作成し、ファイルをレスポンスする)を呼び出すと、
ファイル作成処理に時間がかかるため、タイムアウトしてしまいます。

↓jsp内のJavascript(urlはサーブレットのpathを記述)

Javascript

1 /* 時間がかかるファイル作成サーブレット呼び出し・ファイルをレスポンス */ 2 parent.frames[0].location = url 3

ApacheのTimeout設定を変えずに、タイムアウトしないよう対応したいですが、
私の知識では実装方式・方法が思いつきません。
教えていただけないでしょうか?

サーブレットで出力に待ち時間がでないように、一定の間隔で文字を出力していけばタイムアウトとはみなされないという記事(参考にしたサイト1)を見つけたのですが、
(サイトではサーブレットではなくCGIと記述)
実装に結び付けられません。

参考にしたサイト2の「サーバによるタイムアウトを回避」パターンのようなことで対応できると思うのですが、
perlのため同等の処理をサーブレット・jspで探しましたが見つけられませんでした。

・参考にしたサイト1

https://language-and-engineering.hatenablog.jp/entry/20110627/p1

しかしApacheの場合、Timeoutディレクティブの意味するところは、
「処理にかかった時間の上限」ではない。
Timeoutパラメータの意味は、「(CGI等の)出力に待ち時間があった場合、何秒まで待つか」である。
だから、かりにTimeoutの設定値が300であった場合、
CGIが299秒おきに1文字ずつ文字を出力すれば、それはタイムアウトとはみなされないのである。

・参考にしたサイト2

http://www.bioinfo.jp/tips.html#timeout

Apache は CGI スクリプトからの出力が一定時間ないとタイムアウトとみなし、 クライアントとの接続を終了し、CGIスクリプトを殺しにかかる。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/05/10 03:07

そもそもどのような処理を実行させてタイムアウトしたのでしょうか 基本はサーバー設定に頼らず、データやロジックを見直します。 小手先ではいずれ落ちるので
updateDobule

2021/05/10 04:21

DBサーバ(PLSQL)でデータ集計する処理です。
guest

回答1

0

ベストアンサー

ブラウザからのリクエストはタスクだけセットしておいて後は定期のバッチで処理させるとか。
処理だけして画面に出力するようなものがないのでしたらAjaxなどで非同期で実行させるとか。

いずれにしてもバックグラウンドで処理させたほうが良いと思います。
もちろんその処理自体も負荷軽減のためロジックやデータの見直しはしておくべきです。

投稿2021/05/10 03:10

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

updateDobule

2021/05/10 04:32

ご回答ありがとうございます。 バッチ処理させて、処理後にダウンロードする方式ですね。あまりに処理が長く負荷がかかる場合はこちらを採用したほうが良さそうです。 画面に新たに出力させたいものはなく、作成したファイルをダウンロードさせたいです。 Ajaxで非同期で実行したときに個別にタイムアウトの設定を長くした場合、Apacheのタイムアウトが発生しないかどうかわかりませんが、試してみようと思います。 ありがとうございます。
m.ts10806

2021/05/10 04:43

では画面からも「指定のファイルができたか」を非同期で確認する処理も必要ですね。 Ajaxの場合はhttpリクエストとなるのでタイムアウトの影響はあります。 画面描画がないぶんは下がりますが、内部処理中でのタイムアウトは等しく起こります。
updateDobule

2021/05/10 07:30

ご回答ありがとうございます。 実装したところ、おっしゃる通り等しくタイムアウトが発生しました。 > では画面からも「指定のファイルができたか」を非同期で確認する処理も必要ですね。 こちらもおっしゃる通りです。 ご教示いただきありがとうございました。
m.ts10806

2021/05/10 07:36

ひとまずは実装の見直しもしてみてください。不要なループをしてないかとか、分散させられないかとか、ロックかけすぎてないかとか 観点は諸々ありますが、多くはロジック見直しで解決できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問