Java Webサイトアプリケーションです。Tomcat6.0.33をインストールしました。Tomcatを実行するたびに、約450 MBのメモリを消費します。
私はそれを減らすためにすべてを試みました、私はCATALINA_OPSをとして設定しました
export CATALINA_OPTS="-Xms256m -Xmx256m"
私はset setenv.shファイルを作成し、それに入れました:
Java_HOME="/usr/local/Java"
export Java_HOME
Java_OPTS="-Xmx256m -Xms256m"
export Java_OPTS
CATALINA_HOME="/usr/local/Tomcat"
export CATALINA_HOME
このコマンドを渡すと:ps -ef |私が持っているgrep Tomcat:
root 3150 1 5 15:32 pts/0 00:00:18 /usr/local/Java/bin/Java -Djava.util.logging.config.file=/usr/local/Tomcat/conf/logging.properties -Xmx256m -Xms256m -Djava.util.logging.manager=org.Apache.juli.ClassLoaderLogManager -Xms256m -Xmx256m -Djava.endorsed.dirs=/usr/local/Tomcat/endorsed -classpath /usr/local/Tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/Tomcat -Dcatalina.home=/usr/local/Tomcat -Djava.io.tmpdir=/usr/local/Tomcat/temp org.Apache.catalina.startup.Bootstrap start
root 3217 2041 0 15:37 pts/0 00:00:00 grep Tomcat
これは、私のパラメーターが実際に使用されていることを示しています。
Tomcatが消費するメモリを削減する方法はありますか?ありがとうございました。
ここでの問題は実際にはTomcatではなく、Javaが一般的です。Javaがメモリを使用する場所はいくつかあります。Javaランタイムはそれ自体のメモリを使用し、それが数値に含まれます。さらに、Javaは、メモリを4つの異なる場所に分割します。
The Heap:これは、オブジェクトを格納するために使用されるメモリであり、
-Xms
および-Xmx
パラメータによって制御されます。The Stack:これは、プログラムが維持するスレッドのスタックフレームを格納するために使用されるメモリであり、
-Xss
パラメータで制御できます。Permgen Memory:これは、コンパイルされたクラスやプールされた文字列、およびその他のものを格納するために使用されるメモリであり、通常は
-XX:MaxPermSize
で制御できますが、-XX
はデバッグを表しますパラメータなので、すべてのJVMにあるという保証はありません。ただし、デフォルトのSun/Oracleリファレンス実装には常にそれらがあります。JNI割り当てメモリネイティブメソッドとJNIを利用するクラスはすべて、無制限のメモリを割り当てることができます。このメモリはヒープではなくOSからのものであり、ソースにアクセスせずにネイティブクラスが使用するメモリの量を知る方法はありません。
Javaメモリモデルの概要は、おそらくこの質問への回答の範囲を超えており、インターネット上で簡潔な記事/説明を見つけることができませんでしたが、あなたの質問への短い回答ですJavaプログラムによって使用されるメモリの絶対量を制限しようとしている場合、それを行う簡単な方法はありません。ヒューリスティックに、おそらく-Xms
と-Xmx
パラメータを128mに設定すると、近づく必要がありますが、実際にはアプリケーションによって異なります。