jspの画面を何秒おきかに自動リロードしていて
jsp→java→java(jni)→c(jni)→・・・という風に呼び出しています。
c(jni)の部分においてNewStringUTF(remotejni.cpp)関数を使っているのですがどうもメモリリークがある関数のようです。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6200343
このメモリリークが及ぼしうる影響をどなたかご教示願います。
#このメモリリークがたまり始めるとtomcatが落ちるなど・・・
#ちなみに前回した質問の続きです。
#http://www.hatena.ne.jp/1137511819
http://java-house.jp/ml/archive/j-h-b/044868.html
[JavaHouse-Brewers:44868] Re: JNI $B$N%a%b%j3+J|$K$D$$$F(B
やっぱり状況が良く分からないので、とりあえず確認です。上記のURLのような「自分の論理リーク」は「存在しない」という前提ですか?
また、99%ほどの確率で、「メモリリーク」と主張したいときほど「システムメモリリーク」ではなく「自分で作りこんだメモリリーク」であることが多いことを分かって聞いてますか?
http://java.sun.com/developer/onlineTraining/Programming/JDCBook...
Chapter 8 Continued: Performance Analysis
「システムメモリリーク」である、と主張する場合は、通常上記のような論理を示すのが普通です。
その上で言うと、私の経験上では、JNI上でメモリリークが起きてると、JavaVMが、そのメモリを踏んだ瞬間に落ちる場合が多いです。なので「たまり始める」とかではなく、起きた瞬間にすぐにJVMが落ちます。(==TOMCATが停止した状態になり、Tomcatが止まってるよ、というエラーがブラウザに表示される。apacheは動いているため。)
もちろん経験則なので、絶対とは言いません。ちなみに言うと、JNIでは良くあるパターンです。「どこが原因か良く分からない」というのが。
URLはダミーです。
おそらく「メモリリークによって、同じ事象になりました」と言う回答を望んでいるのだと思いますが、無駄だと思いますよ。
仮にメモリリークが原因だとしたら、起こる事象は千差万別です。(人によって違います)
f_kennedyさんの環境でいつも同じログを出力しているのなら、メモリリーク以外を疑った方がいいと思います。
ご解答ありがとうございます。
同じ現象になればそれは嬉しいですが純粋に情報が欲しいがため質問しております。
tomcatが落ちるときのログはno child...かno such file...の二種類ですが
普段は普通に動いていて忘れたころに落ちます。
現在jvmstat(jstat)を使用して、情報収集中ではありますが
今まで集めてきたpsコマンドのRSSの表示を
バグフィックス後のjdk環境を作って比べた情報だけを見るとメモリリークが
起きているように見えています。
>上記のURLのような「自分の論理リーク」は「存在しない」という前提ですか?
質問としては自分の論理リークは存在しないと言う前提の上でしています。
#が、参考URLを見たところ、実際論理リークである可能性も・・・
#jstring js = env->NewStringUTF(ret);
#if(ret != NULL){free(ret);}
#で、jsの解放と言う操作を行っていないです・・・明日周辺調べてみます。
jni部分でのメモリリークによってtomcatが落ちるとしてその時のエラーログは、どのような物になることが多いのでしょうか?
catalina.outに吐かれているエラートレースは全くその部分とは関係ないものが吐かれるのですが
このjni部分が問題だとしてそのようなことがあるのでしょうか?
通常はトレースにjni部分が含まれるのでしょうか?
重ねての質問で恐縮ですがお答えいただけると幸いです。