- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JSPからJNIを実行しabortするとtomcatが落ちる)
JSPからJNIを実行しabortするとtomcatが落ちる
このQ&Aのポイント
- JSPからJNIを使用してCのライブラリをロードしていますが、Cのライブラリの中で異常終了すると、tomcatのプロセス自体が落ちてしまいます。これはJSPが1つのプロセスを使い実行している為、どうしようもないのでしょうか?
- 通常、JAVAで異常が起きても、Exceptionを出してくれるので、プロセスが落ちる事はないと思いますが、Cの場合、メモリを確保していない領域以外へアクセスした時など、プロセス自体が終了してしまいます。Cの中できちんとエラーチェックをしなければいけないのは当たり前ですが、予期せぬエラーが発生した場合はもう少し影響範囲を小さくする事は出来ないのでしょうか?
- JSPからJNIを実行しabortするとtomcatが落ちるという問題が発生しています。この問題はJSPが1つのプロセスを使い実行しているため、tomcatのプロセス自体がクラッシュしてしまうためです。また、Cの場合はメモリを確保していない領域へのアクセスなど、予期せぬエラーが発生した場合にプロセス自体が終了してしまうこともあります。そのため、Cの中でエラーチェックをしっかり行う必要がありますが、影響範囲を小さくする方法は限られているようです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> WEBの1枚だけ異常終了するのはいいのですが、tomcat自体が落ちてしまうと影響範囲が大きいのですが、これはJSPが1つのプロセスを使い実行している為、どうしようもないのでしょうか? 基本的には、お考えのとおりです。どうしようもないです。 > Cの中できちんとエラーチェックをしなければいけないのは当たり前ですが、予期せぬエラーが発生した場合はもう少し影響範囲を小さくする事は > 出来ないのでしょうか? Windows/Linux などの OS だと、保護の単位がプロセスよりも細かいスレッド単位にできることもあるかもしれませんが、それとて万能ではないです。Java の側から Windows/Linux のスレッドを細かく制御できるわけでもないので、やはり Java で JNI を使う限りは、基本的に無理だと思います。 安直には JNI からそのライブラリーを使うプロセスを生成して呼ぶとかすれば、できますが、それだったら JNI を使わずに Java からプロセスを直接生成すればそれで済みます。プロセス生成のコストが高いですが、そこそこ現実的なソリューションでしょう。 あるいは、JNI の中で Windows/Linux のスレッドを細かく制御するなどすればもしかしたらできるのかもしれませんが、現実的ではないことが多いでしょう。それだったらライブラリーのバグを直すほうが現実的でしょう。
お礼
unibonさん、ありがとうございました。 色々検討した結果、やはりライブラリーのバグを徹底的に潰す 事にしました。