プロが教える店舗&オフィスのセキュリティ対策術

現在、Javaを使用したWebアプリ開発を行っており
下記の処理でローカル環境(開発用PC)では正常にいくが、サーバ環境では異常終了
となる事象が発生しております。
どなたか対応策をご存じな方がいましたらご回答よろしくお願い致します。

また未実施調査もあり、その調査方法が不明なため合わせてご回答よろしく
お願い致します。

■処理概要
画面に帳票ボタンがあり、そのボタンを押下すると別ブラウザに
帳票(PDF)が出力される。

■処理内容(帳票ボタン押下)
(1)DBから帳票出力対象となるデータを抽出
(2)(1)で抽出したデータを加工
(3)(2)で加工した帳票データを、帳票定義体とバインド
(4)(3)でバインドした帳票を別ブラウザに表示

■異常終了概要
押下されたボタンによって出力する帳票が異なり、
帳票出力対象データが大量にある場合、ある1つの帳票だけが
1時間ほど待っても出力結果がかえってこなかった。
そのためログを確認すると「java.net.SocketException: Broken pipe」が発生していた。
※それ以外の帳票については正常に帳票出力される。

■異常終了発生箇所について
サーバ環境でログを確認したところ、処理内容の(3)までは正常に処理されており
(4)の別ブラウザに表示する際に異常終了となっていた。

(4)の詳細処理内容として、(3)で作成した帳票データ(バインド済み帳票)を
javax.servlet.HttpServletResponse.getOutputStreamで取得したOutputStreamに
書き込み、そのOutputStreamをflushする処理になっている。
※異常終了は「帳票データをOutputStreamに書き込み」時に発生している。

=======================================

現在、異常終了となる帳票処理について調査した結果以下の事が判明した。

■調査内容
・大量データ時に異常終了となる帳票は、データを減らすと正常に帳票出力される。

・他帳票と比べ、帳票データ作成時間が長い。
※1.帳票データ作成時間は、帳票データをOutputStreamに書き込む時間は含んでいない。
※2.上記帳票はデータを減らし調査している。

・他帳票と比べ、帳票のファイルサイズは小さい

・1つのPCをWebサーバ、APサーバ、DBサーバとしている。サーバ環境内容として
OS:Linux(CentOS)
Web:Apache
AP:Tomcat
DB:PostgreSQL

・帳票データ作成時間が5分を越える場合、当事象(broken pipeエラー)が発生する。
※1.帳票データ処理にJavaのSleepメソッドで5分超える/越えない時間を設定し調査した。
※2.Tomcat、Apacheの設定ファイル(Web.xml,Server.xml,httpd.conf)を確認したが
5分(300秒、600000ミリ秒)の記載箇所は見つからなかった。
※3.帳票データ作成時間が5分を超える=サーバからクライアントへの応答が5分以上ない

・IEの仕様で「サーバーからデータが返されるまでのタイムアウト時間(5分)が設定されている」
との記事があり、レジストリを修正しタイムアウト時間を60分にしたが解決しなかった。

・対象データに問題がない(Linuxで扱えない文字などはない)事を確認した。

■調査方法不明
・Linux側(サーバ)でクライアントへ5分応答がない場合、コネクションを切断しているのでは
ないかと考えた(ネットワークの設定など)が、どの設定ファイルを確認すればよいか分からない。
※もしそれが原因だった場合の対応方法についても

A 回答 (11件中11~11件)

ファイルサイズが大きいので


メモリが足りないってことはない?
もっとJavaに大きくメモリを割り当てためしてはどお?
もしくは、ちょっとずつ読み込んで送信するようにするとか。

タイムアウトの確認をしたければ
完成済みのPDFを送信するだけの処理を試してみては?

この回答への補足

回答ありがとうございます。

>>ファイルサイズが大きいのでメモリが足りないってことはない?
→ファイルサイズについては出力される他帳票と比べサイズが少ないためファイルサイズの
問題ではないみたいです。
※データ件数を少なくすると出力されるため、他帳票と同一件数で行いファイルサイズが少ない
事を確認しています。

>>タイムアウトの確認をしたければ完成済みのPDFを送信するだけの処理を試してみては?
→PDFを送信する(OutputStreamのflush)処理には時間がかかっても問題ないみたいで、
サーバ側で5分を越える処理(帳票作成)をした後、OutputStreamに帳票データを
書き込みで処理が落ちてるみたいです。
なのでこの「5分」がキーワードになりそうなのですが、その設定がTomcat,Apacheにも
見つからず困っております。
もしかしたらLinux側が「サーバがクライアントに5分間レスポンスを返さなかったら
コネクションを切断する」という設定がされているのかと思っています。
その場合、Linuxのどの部分を見ればよいか分からなくて…。

補足日時:2011/02/19 21:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!