2016-05-03 42 views
6

Uygulamamı temel olarak yanıt sürelerinin "yayılmasını" azaltmak için ayarladım. Ortalama iyi, ancak aralık çok geniş. Dynatrace, daha yüksek yanıt sürelerinin, süspansiyonda harcanan daha fazla zamanla ilişkili olduğunu gösterdi. Bu GC'ye işaret ediyor.Yüksek Ayırma Hızı için JVM Ayarı

Bazı çevrimiçi JVM GC değerlerini çevrimiçi okumaya dayalı olarak değiştirmeyi denedim.

GC günlüklerine dayanarak, Tahsis Oranının yaklaşık 324 MB/sn olmasını ve Promosyon Oranının yalnızca 0,85 MB/s olacağını düşündüm. Bana göre bu çok yüksek bir tahsis oranına sahip görünüyor, bu yüzden Genç Nesil'in boyutunu arttırmaya çalıştım.

İlk ekran görüntüsü varsayılan olarak Java 8 ayarları, 1024MB Xmx'dir.

İkinci ekran görüntüsü NewRatio = 1.

Bundan sonra denemek için önerileriniz gerçekten takdir edilecektir.

şeyler Daha önce de denedim: G1GC değişen, NewRatio = 1 ayarını, 2048 NewRatio = 1 ve artan XMX ayarı, NewSize = 1600m ve 2048 = XMX ayarı, MetaspaceSize = 100

Düzen ayarı: ekleme GC günlükleri: http://pastebin.com/VhJwSuxv

Not: Bu bilgiler değişikliği ile 10 dk testinden şunlardır: NewRatio = 1

enter image description here enter image description here

+1

* "GC günlüklerine dayanarak" *, onları gönderilsin mi? – the8472

+0

GC günlükleri ile pastebin'e bağlantı eklendi. Not: Bu değişiklikler aşağıdaki gibidir: NewRatio = 1 – Bobby

+0

Genç koleksiyonlar oldukça tutarlı 70-80 ms duraklama sunar. Eski koleksiyonlar daha uzun sürer, ancak bunlar nadirdir ve bu, veri toplama toplayıcısını kullanırken beklenmelidir. Yani muhtemelen GC ile ilişkili olduklarını doğrulamak için yanıt verme tedbirlerine daha fazla somutlaşmalısınız. – the8472

cevap

3

GC'yi ayarlamadan önce, ilk olarak dağıtım oranını azaltmaya çalışmak için bir bellek profiler kullanmalısınız. Genç nesli daha da arttırmayı deneyebilirsiniz, ör. -Xmn2g -Xmx3g'u ayarlayabilir ve NewRatio’yu ayarlayamazsınız.

Ben

Bu, bir web uygulaması için ılımlı oranıdır, Tahsis Oranı yaklaşık 324 MB/sn olması anladım. Daha düşük olabilirdi ama bu seviyede önemli sorunlar beklemezdim.

Makinenizin belleğine bağlı olarak çok daha büyük bir yığınla başlarım. -Xmn24g -Xmx32g ve duraklama sürelerine bakın. Daha sonra, GC zamanlarını etkileyecek gibi görünene kadar yığın boyutunu azaltın (daha da kısaltabilirler).

Buna bakmanın başka bir yolu; Her 2 ila 10 saniyede bir minör GC olması kabul edilebilir. Bu, 650 MB ile 3,2 GB arasında bir Eden alanı istediğiniz anlamına gelir.

+0

Cevabınız için teşekkür ederiz. Bana önerdiğin bir "hafıza uzmanı" nın bir örneğini verebilir misin? VisualVM kullanıyorum. Uzak sunucuda çalışan jstatd alamadım. Önerirseniz çok daha büyük Xmx ve Xmn ile deneyeceğim. NewSize = 1600/Xmx = 2048 ile denedim ve bu minör gc frekansını her 1 saniyeden 4 saate düşürdü, ancak bu gc'lerin süresi her biri yaklaşık 3 kat daha uzun sürdü, genel olarak perf üzerinde negatif bir etkiye sahipti. – Bobby

+0

@Bobby FlightRecorder'ı deneyebilirim. Bu komut satırından tetiklenebilir ve uygulamanızın yaptıklarına göre daha fazla ayrıntı verebilir. –

+1

Tamam Önerinizi daha büyük yığın ve farklı Yeni boyutlarla denedim ve performansta artışa ve artırılmış tutarlılığa neden olan bir sonuca vardım. Sonraki FlightRecorder olacak. Cevaplar için tekrar teşekkürler! – Bobby