2011-01-14 24 views
6

Tomcat sunucusunda (Linux) çalışan bir java web uygulaması var. Üretim ortamında bazı performans sorunları ile karşı karşıyayım. Rasgele aralıklarla, tomcat'in çalıştığı jsvc işlemi% 90-100 CPU'da çalışmaya başlar. Bu etkinlik için tetikleyiciyi bulamıyorum. Sunucu dört çekirdekli bir sistemdir. Bellek tüketimi herhangi bir anormallik göstermez.Java iş parçacığının yürütülmesini izleme araçları

nasıl soruna neden olan bir uygulama içinde iplik (uygulama yığın iz) izleyebilir?

jconsole ve PSI Probe ile denetliyorum, ancak her ikisi de uygulama içinde hangi iş parçacığının CPU kullanımı anormalliğine neden olduğuna dair ayrıntılı bilgi vermiyor. Bunu yapmak için

+0

mı? – skaffman

+0

@skaffman, Üzgünüm java-performans, onu düzelttim. –

+0

Üretim sunucularımızla da bazı performans sorunları yaşıyorduk ve bir sunucuya bir üretim sunucusuna bağlanma zor olduğundan .. NewRelic'i denedik. Performans araştırmalarınız için eklemek için harika bir araçtır. – eSniff

cevap

5

Bir nispeten kolay yolu (veya durum için çalışmıyor olabilir ki - davranış oluştuğunda ne kadar bağlıdır):

uygulama bu durumda ayıklamak istediğiniz davranışı (sergiler

% 90-100 işlemci kullanımı) işlem numarası jstack kullanımı:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

çalışan ve hangi yöntemleri de meydana ne parçacığı incelemek. Bunu birkaç kez yaparsanız, suçlu çağrı zincirini tespit etmek nispeten kolaydır. Daha sonra bu zincirin girişini daha sonra ayıklayabilirsiniz.

Mutlaka en iyi veya en şık yöntem değil, ama bunu yapmak çok kolay ve tek ihtiyacınız olabilir. Oradan başlarım. "Printf şimdiye kadar kullandığım en iyi debugger" felsefesine benziyor.

+3

Ayrıca, JProfiler gibi bir profil oluşturucu muhtemelen hangi konuların ne yaptığını daha fazla ölçütler vereceğini ekleyeyim, ama yine de bu sorunun üstesinden gelmek, sorunun nispeten basit olmasından dolayı çok zaman alıcı olabilir. Bu yüzden, bazı örneklerin hızlı bir jstack tabanlı analizinin, uygun profil oluşturucuları ateşlemeden önce yapması gerektiğini vurgulamak isterim. – kvista

+0

Vista Cevabınız için teşekkürler. Jstack'ı deneyeceğim. –

2

Bunu bir sinyal QUIT göndererek her türlü Java uygulaması tüm evrelerin bir StackTrace dökümü alabilirsiniz.

kill -QUIT [processId] 

Bu süreç Stdout'a görünecektir.

1

Sadece benim 2 sent ancak CPU zirveleri GC etkinliği olabilecek bir bellek sorunu deneme değilse merak ediyorum. Dolayısıyla, tomcat'inizi jconsole ile izlerken bellek sekmesine bir göz atın ve yığın kullanımının yüksek olup olmadığını kontrol edin.

2

üst cpu tüketen konuları göstermek için başka bir araç `[javascript performanslı]` etiketiyle nedir jvmtop

İlgili konular