- - PR -
Apache2を入れるとCで作ったDLLがJNIで動きません(不安定?)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-10-27 19:09
件名の日本語が変ですみません。
Cで作られたアプリをJavaからJNIを使って呼び出しています。 Tomcat4.1.31で実行すると快適に動作しているのですが、HTTPにApache2.0.49を組み込んで実行すると、最初は動作するのですが、ブラウザを閉じて再度ブラウザを起動、実行、とすると動作しなくなります。動作しなくなると、サーバーPC自体を再起動しなくてはなりません。 JNIを使わない他のページ機能は問題なく動作していますので、JNIのみが何らかの影響を受けているものと推測されるのですが、わかりません。 このような現象、体験された方がありましたら、何かヒントいただけないでしょうか? 以下、環境などです。 サーバー: windows2000Professional Tomcat4.1.31 JDK1.4.2.08 Apache2.0.49+Openssl0.9.7d+mod_jk2 SSLは仮なのでダミーです。 クライアント: windows2000Professional+IE6.0 [ メッセージ編集済み 編集者: すてぃーぶ 編集日時 2005-10-27 19:11 ] |
|
投稿日時: 2005-10-27 19:18
手前にApacheがあろうとなかろうと Tomcat 内部の JNI 呼び出しは独立して行われておりますので妙な話ですね。
動作しなくなる、とはその JNI を使っているページだけ反応がなくなるのでしょうか?それとも Tomcat のプロセス丸ごと落ちてしまうのでしょうか? サーバPCを再起動しないといけない、というのはマシン全体が固まってしまうのでしょうか? Tomcat や Apache の再起動すらできないということですか? |
|
投稿日時: 2005-10-27 19:20
JVM が落ちてしまうようなケースだと以下のドキュメントが参考になるかもしれません。
・BEAトラブルシューティング ガイド サポート診断パターン > バイナリ コア ファイルの分析 http://www.beasys.co.jp/cs/support_news/product_troubleshooting/System_Core_Pattern.html ・BEAトラブルシューティング ガイド サポート診断パターン > コア ダンプが作成されない JVM クラッシュの調査 http://www.beasys.co.jp/cs/support_news/product_troubleshooting/JVM_Crash_wout_Dump_Pattern.html |
|
投稿日時: 2005-10-27 19:25
ありがとうございます。
「動作しなくなる」とは、JNI呼び出しを含むページのみのことです。 具体的には、呼び出しているCのDLLは、ファイルを読み込んでPDF化するモジュールで、このモジュールを呼び出してブラウザにPDFファイルを表示させています。 不具合時には、PDFが表示されるべきフレーム枠が開き、acrobatが起動するのですが、PDFファイルが取得できずに、acrobatもフレームに埋め込みされず、そのまま白い画面のままになっている、という状態です。 画面を戻って、他の関係ない画面遷移は普通に動きます。 |
|
投稿日時: 2005-10-27 19:35
OS を再起動しないといけない、ということは Tomcat や Apache を再起動しても現象が続くということでしょうか?
Tomcat のログに何かメッセージは記録されていませんか? |
|
投稿日時: 2005-10-27 21:55
PC再起動が必ずしも必要、というわけではなさそうです。
何度かTOMCAT/Apacheの再起動を繰り返していると、正常動作することもあります。 一定時間が経過すると正常に戻るのかな?という疑いもややあります。 |
|
投稿日時: 2005-11-08 18:14
解決と報告。すべてが明確に判ったわけではありませんが...。
原因は、現象面だけから推測ですが、一応解決しましたのでご報告を。 @.ページ要求のバグ WEBからのページ要求にBUGがあり、1回の画面遷移で2〜3回のページ要求が発効されていました。 A.TOMCAT/Apacheのビヘビア これに対し、TOMCAT単体では2回目以降の要求を捨てているように見られますが、Apacheが入ると、すべての要求を受け付けてしまっているようです。 B.DLLの仕様 JNIで呼び出しているDLLが、実はマルチスレッドに対応していないらしく、複数の要求が集中すると自爆してしまう、というオチ。 C.対処 DLLの呼び出しを行うクラスをsyncronizedにして、順次処理するように変更。@のバグ対応は当然です。 関心を持ってくださった皆様、特に相手をしてくださったインギさま、ありがとうございました。 なお、Aの現象についてはログを見た上での推測です。正確なところが判る方があれば、解説してくださるとありがたいです。 @. |
|
投稿日時: 2005-11-08 18:58
なかなか奇妙な現象だったのでちょっと気に掛けておりました。
解析お疲れ様です。なかなか複雑に条件が絡んでいて厄介でしたね。 |
1