2017-08-24 25 views
0

私は多数の投稿を読んだことがありますが、わかりました。私はインストールされているTomcatのサービス、あります。ただし、このサービスのtomcat7.exeプロセスが一貫しTomcatのサービスメモリが最大値を超えています。

PsExec.exe -s {jdk}\bin\jinfo.exe -flag MaxHeapSize {pid} 

:私は、これらの設定のような呼び出しを経由して成功していることを確認しました

--JvmMx=1000 
--JvmMs=128 

をサーバがクロールするまで、この最大値を3以上のファクタで超えています。奇妙なことに、これは1台のサーバー上の問題に過ぎません。他の場所ではそれはかなり一定であり、制限の下に留まります。私はまた、私の開発環境でメモリリークを探して、見つけていませんでした。これをデバッグする

、私はそうのようなGCを強制しようとしました:

PsExec.exe -s {jdk}\bin\jcmd.exe {pid} GC.run 

しかし、これは効果がないようです。だから、次の私は、インストールにこれを追加することにより、jconsoleを監視するためにそれを設定:

tomcat7.exe //US//%SERVICE_NAME% ++JvmOptions="-Dcom.sun.management.jmxremote" 
tomcat7.exe //US//%SERVICE_NAME% ++JvmOptions="-Dcom.sun.management.jmxremote.port=8086" 
tomcat7.exe //US//%SERVICE_NAME% ++JvmOptions="-Dcom.sun.management.jmxremote.ssl=false" 
tomcat7.exe //US//%SERVICE_NAME% ++JvmOptions="-Dcom.sun.management.jmxremote.authenticate=false" 

今では行儀のだ(もちろん!)。 GCがはっきりと働いており、プロセスメモリは限界以下にとどまっています。

私はうんざりです。最大ヒープは1 GB、永続メモリは90 MB、スタックサイズはデフォルトで約128 KBですか?そして、スレッドカウントは増加しませんが、「唯一」67となります。プロセスメモリはどのようにして3GB以上になるのですか?なぜメモリ不足例外が発生していないのですか?

今でも、jconsoleによる "well-behaved"サービスは、57スレッドで実行される約50 MBのヒープのみを使用しています。それでもタスクマネージャは800 MBを使用して71スレッドを表示しています。違いはTomcatによるものだと思いますか?私の理解の隙間を埋めるのを助けてください。公式ドキュメントから

答えて

1

のJavaは、Javaヒープスペースのために必要なだけのものよりも多くのメモリを使用しています。これは "ネイティブメモリ"と呼ばれ、あなたが言及/チェックしているメモリ空間のどれにもカウントされません。

あなたの目を開きます。このポスト: http://www.evanjones.ca/java-native-leak-bug.html

(FWIWは、サーバー・プロセスのために異なる値に-Xms-Xmxを設定すると、単に時間の無駄であるヒープ「はdoesnのように同じ値に設定します。最大のヒープサイズまで "アップ"しながら、一度にサイズを変更する必要があります。サーバプロセスに1GiBなどを提供する場合は、すぐに使用できるようにすることもできます)

+0

リンクをありがとう。それは面白い!私はそれがここに当てはまるかどうかわかりませんが。サービスはほとんど使われていないので、DBをチェックして実行してステータスを記録する作業だけをループします。確かにあまり並行性はあまりありません。私は、DB呼び出しがおそらくネイティブであると考えます。 JVMコードが非常に大きくなるのは奇妙なことです。その成長を制限する方法はありますか? – Didjit

+0

そしてXms/Xmxポイントについては、はい、私は全く同意します。 – Didjit

+0

@Didjit JVMが使用するネイティブメモリのサイズを制限する方法はわかりません.OSレベルでプロセスメモリを制限することはできません。プロセスが制限を超えた場合、プロセスを終了します。実際にはJVMがそのような制限の下に留まることはありません。 –

0

は、私が見つかりました:

--JvmMs初期メモリ・プールのサイズをMBで。 (exeモードでは使用しません)

--JvmMx最大メモリプールサイズ(MB)。 (exeファイルモードでは使用しません。)

https://tomcat.apache.org/tomcat-8.5-doc/windows-service-howto.html

--StartMode jvm --Jvmを追加しようと、あなたがまだない場合

+0

ありがとう@トーマス、彼らはすでに設定されています。 – Didjit

関連する問題