Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
)
問題があるとやや再発の問題を抱えている
、その目に見える原因、と明らかにせず無作為に(明らかにそうではないと思いますが)、Javaヒープが75%以上までいっぱいになり、完全なガーベジコレクションが有効になります。
問題は、FullGCの後でメモリが解放されないため、FullGCが再び開始されることです。これは連続的に繰り返されるので、CPUはGCを実行するだけでビジーであり、他のスレッドにはほとんどCPUサイクルが与えられず、他のすべてのTomcatスレッドを効果的にハングします。
これは、5分または10分を超えない範囲で発生します。
システムの負荷には関係していないようです。これは、3つ以上のスレッドをアクティブにして実行していないときにも発生するためです。
ヒープまたはスタックのダンプを取得しようとしても、Javaプロセスの応答がないために困難です。
私は1時間のヒープヒストグラムを取得し、とにかく、やった、と、残念ながら私は今、完全なヒストグラムを持っていない(私の悪い、私は予告なしにファイルを削除した)が、私はチャットからこの情報を保持:
1: 48504970 1552159040 org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller$2
2: 48506821 1164163704 java.util.concurrent.ConcurrentLinkedQueue$Node
ご覧のとおり、org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller$2
のインスタンス数が48kを超え、同じ数のjava.util.concurrent.ConcurrentLinkedQueue$Node
インスタンスがあります(このインスタンスは最初のインスタンスによって保持されています)。これは、ほぼ2.5GBを保持し、私のメモリヒープは3GBです。
私はこの問題が発生した時間のうちの1つをjstackスレッドでダンプしています。ここで投稿できる文字制限はありません。誰かがそれを見たいと思ったら、私にそれを共有してくれるようお願いしてください。
今私が持っている唯一の解決策は、TomcatのJavaプロセスを強制終了し、サーバーを再起動することです。
この理由は何ですか?
オカレンスの時間さえもランダムなようです。それは時々朝、時には夜に起こる。ある日、同じ日に2回発生しました(真ん中でTomcatを再起動します)。
Linux(Linux version 3.10.0-123.9.2.el7.x86_64 ([email protected]) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)) #1 SMP Tue Oct 28 18:05:26 UTC 2014
)よりJava 7(ビルド1.7.0_51-b13)でTomcat 7.0.42を実行しています。
また、JBoss Infinispan CacheとApollo MQメッセージサービスのインスタンスもありますが、どちらも原因ではないと思います。
問題が発生した場合は、アプリケーションのスレッドダンプを提供してください。 – benbenw
@benbenw、あなたの応答のおかげで!私はあなたの応答に[ファイル](https://drive.google.com/file/d/0B_dQKrkjWdg_MU51MjBESG9fVlE/view?usp=sharing) – medicenfranito