web-dev-qa-db-ja.com

Tomcatが使用するメモリを減らす方法は?

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が消費するメモリを削減する方法はありますか?ありがとうございました。

5
stunaz

ここでの問題は実際には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に設定すると、近づく必要がありますが、実際にはアプリケーションによって異なります。

8
dlawrence