Java 6, Tomcat 6, Spring Framework 3, Hibernate 4, EhCache çalıştıran bir web uygulamamız var. Son derece uzun çöp toplama süreleriyle ilgili, 30 saniye veya daha uzun sürebilir ve uygulamayı yanıt vermeden bırakan bir sorunla karşılaşırız.Son derece uzun çöp toplama süreleri
Şu anda test ama onun dışında bariz açın: daha fazla bellek eklemek, acaba biz melodi çöp toplama süresini azaltmak için olabilir yönleri varsa.
Bellek kullanımını en çok etkileyen kişi, agresif önbellekleme yaptığımız için EHCache'dir. Ancak her zaman EHCache mağazalarını (yeni EhCache bayt boyutu mağazaları, önbelleğe alınmış nesne grafikleri oldukça büyük olabileceğinden, bizimle ilgili her türlü soruna yol açabilir) boyutlandırmak zor olur.
Bu
GC sürelerini azaltmak için JVMJAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx704m XX:OnOutOfMemoryError=/usr/share/scripts/on_server_crash.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat6 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC
Bellek uzun süre 704 MB'ye ulaşmadan önce bu uzun zamanları alıyor musunuz? JVM, kullanılan belleği arttırmaya karar vermeden önce kullanılan belleği azaltmaya (ve muhtemelen yeniden yerleştirmeye) çalışırken biraz "agresif" olabilir. -Xms704m -Xmx704m'yi kullanmaya başlarsanız aynı şekilde davranır mı? –
"jstat -gc 1s pid" işlevini kullanarak, bellek kullanımınızın kreşlere ulaşıp ulaşmadığını veya kreşler ile eden ve eski arasındaki bellek paylaşımının değiştirilip değiştirilmediğini görebilirsiniz. –
JProdilfer/Yourkit ile uygulamanızın kısa bir profili, katı önerileriniz olmayacaktır. –