4 CPU と 32 GB メモリの 64 ビット マシン (OS は CentOS 6.3) で Tomcat を実行しています。Tomcatを起動するJavaオプションは-server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m
RES は最初、top を使用してわずか 810MB であり、増加し続けています。この間jmap -J-d64 -histo pID
、Java メモリ ヒープを確認するために実行しましたが、ヒープ ピークが 510MB で、gc 後は約 200MB であるため、gc は正常に機能していると思います。しかし、トップ ヒットの RES が 1.1g になると、CPU 使用率が 100% を超え、Tomcat がハングします。
CPU 使用率が 100% のときにダンプを表示するために使用jstack pid
すると、「vm スレッド」という名前のスレッドがほぼ 100% の CPU を消費します。私はググった、それはJVM gcスレッドです。だから私の質問は: gc が正常に動作しているのに、なぜ res が増え続けるのですか? この問題を解決するにはどうすればよいですか? ありがとう。