GC ek yük sınırı aşıldı


93

JVM'nin "java.lang.OutOfMemoryError: GC ek yük sınırı aşıldı" atışı için kullandığı örnekleme süresi nedir? GCTimeLimit ve GCHeapFreeLimit parametreleriyle% 98 ve% 2'yi kontrol edebileceğinizi biliyorum, ancak örnekleme süresi nedir?

Yanıtlar:


82

Gönderen Java SE 6 HotSpot [tm] Sanal Makine Çöp Toplama Tuning

aşağıdaki

Aşırı GC Süresi ve OutOfMemoryError

Çöp toplamada çok fazla zaman harcanıyorsa, eşzamanlı toplayıcı bir OutOfMemoryError atar: Toplam sürenin% 98'inden fazlası çöp toplamada harcanırsa ve yığının% 2'sinden azı kurtarılırsa, bir OutOfMemoryError atılır. Bu özellik, yığın çok küçük olduğundan uygulamaların çok az ilerleme kaydederken veya hiç ilerleme kaydetmeden uzun bir süre çalışmasını engellemek için tasarlanmıştır. Gerekirse, bu özellik komut satırına -XX: -UseGCOverheadLimit seçeneği eklenerek devre dışı bırakılabilir.

Politika, paralel toplayıcıdakiyle aynıdır, tek fark, eşzamanlı koleksiyonları gerçekleştirmek için harcanan sürenin% 98'lik zaman sınırına dahil edilmemesidir. Başka bir deyişle, yalnızca uygulama durdurulduğunda gerçekleştirilen toplamalar, aşırı GC süresine sayılır. Bu tür koleksiyonlar tipik olarak bir eşzamanlı mod hatası veya açık bir toplama talebinden (ör. System.gc () çağrısı) kaynaklanır.

daha aşağı bir geçit ile birlikte

Açık çöp toplamanın en sık karşılaşılan kullanımlarından biri, RMI'lar dağıtılmış çöp toplama (DGC) ile gerçekleşir. RMI kullanan uygulamalar, diğer sanal makinelerdeki nesnelere atıfta bulunur. Yerel yığın ara sıra toplanmadan bu dağıtılmış uygulamalarda çöp toplanamaz, bu nedenle RMI düzenli olarak tam koleksiyonları zorlar. Bu koleksiyonların sıklığı özelliklerle kontrol edilebilir. Örneğin,

java -Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000 dakikada bir varsayılan hız yerine saatte bir açık toplama belirtir. Ancak bu, bazı nesnelerin geri kazanılmasının çok daha uzun sürmesine de neden olabilir. Bu özellikler, DGC etkinliğinin zamanındalığına ilişkin bir üst sınır isteği yoksa, açık koleksiyonlar arasındaki zamanı etkili bir şekilde sonsuz yapmak için Long.MAX_VALUE kadar yüksek ayarlanabilir.

Görünüşe göre% 98'i belirlemek için değerlendirme süresi bir dakika uzunluğundadır, ancak Sun'ın JVM'sinde doğru tanımla yapılandırılabilir.

Elbette başka yorumlar da mümkündür.


5
RMI dağıtılmış çöp toplama, normal çöp toplama ile ilgisiz bir etkinliktir. Yani, az önce ne yaptığını nasıl anlayacağını anlamıyorum.
Stephen C

2
Çıkarım mükemmel veya hatta doğru değildir, bu yüzden "ima" yerine "ima ediyor gibi görünüyor" kullanılır. Sun'daki kişiler RMI için çöp toplama aralığını belirlemede bir dakika kullanırsa, eşzamanlı toplamadaki toplama süresinin yalnızca ana program durduğunda ve biraz inanç sıçraması yaptığında hesaplandığı gözlemine katılıyorsanız , o zaman oranlar iyidir,% 98 bir dakika içinde toplanır. Bu sihirli bir sayıdır, ancak bir dakika, 3.5 dakika demekle karşılaştırıldığında genellikle kullanılan sihirli bir sayıdır.
Edwin Buck

Eğer biz set bile anlama geliyor @StephenC -XX:+DisableExplicitGC o RMI ilgili yapılandırmayı etkilemeyecek ve sistem parametresi ile frekans setinde gc çağıracağı-Dsun.rmi.dgc.server.gcInterval
Steephen

1
@Steephen - Hayır. Söylediğim bu değil. Şu ifadeden bahsediyorum: "Görünüşe göre% 98'in belirlenmesi için değerlendirme süresinin bir dakika uzunluğunda olduğu anlamına geliyor ..." . Ve Edwin'in çıkarımın "kusurlu" olduğunu kabul ettiğini unutmayın. Çıkarım, RMI (& DGC) uygulayan Sun milletinin, GC ek yük limit mekanizmasını uygulayan kişilerle yakın iletişim içinde olduğu varsayımına dayanmaktadır. İki gelişmenin aslında farklı zamanlarda gerçekleştiğinden şüpheleniyorum. -Dsun.rmi.dgc.server.gcIntervalÖzelliğin Java 1.2'den beri var olduğunu unutmayın .
Stephen C

1
Her neyse, bu sorunun gerçek cevabını bulmak için daha iyi bir yaklaşım OpenJDK kaynak koduna bakmak olacaktır.
Stephen C
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.