2012-11-13 11 views
7

Durumu çözümlemek için 2 kilitlenmemiş iş parçacığı yığınına bakmam gerekiyor. JVM şu anda canlı ve veriler var, ama bunu işlemden çıkarmak için bir çeşit araca ihtiyacım var. Ben sadece String türünde yığında 6 değişkene dikkat ediyorum. Her türlü fikir memnuniyetle kabul edilir. JVM sürümleri 6_35, linux, JMX etkin, ancak üzerinde yapılandırılmış bir profiler/debugger bağlantı yok. Yeniden üretilmesi çok zor.Geçerli iş parçacığı yığın değişkenlerini canlı bir JVM'den döker miyim?

+3

Merhaba aşağı seçmen? – ShiDoiSi

cevap

3

Bunu kolayca yapamazsınız. Normal jstack aracı sadece yığın yığınını alacaktır. Teknik olarak tüm yığının dökülmesini deneyebilirsiniz (jmap kullanarak) ancak bu özel değişkenleri aramak mümkünse bir ağrı olabilir. Güvenlik nedenleriyle bunun kolayca yapılamayacağını unutmayın. Yığın izleri kimlik bilgileri veya diğer hassas verileri içerebilir. Emin çıkış sert, amaçlarınıza uygun olacaksa - IBM's JVM olacak şekilde

+2

Güvenlik nedenlerinden ötürü şüphe duyuyorum, "kolayca yapamaz" hackleme söz konusu olduğunda asla iyi bir yaklaşım değildir. Sadece 2 sentim. –

0

Sen Sun/Oracle JVM ile Unix benzeri işletim sistemi üzerinde, süreci size dump and keep the VM running verecek SIGQUIT gönderebilir. Muhtemelen diğer cevapta jstack/jmap'a benzer.

+0

Bu, yalnızca her bir iş parçacığındaki değişkenlerin durumunu değil, bir iş parçacığı dökümü (her iş parçacığı için çağrılan yöntemlerin sırası) verir. –

1

Yığın döküm görüntüleyici kullanarak küçük bir hile buldum (Bu örnekte YourKit, ancak başkaları da olabilir). Temel olarak Thread sınıfının tüm örneklerini sıralarsınız, sonra istediğiniz isimleri isme göre bulup açın. Bütün değişkenler burada değil

enter image description here

ancak yönteme argüman olarak geçirilen tüm görüntülenir: yığın değişkenleri < yerel değişken> böyle olarak işaretlenir. Profilciler bu sorunu daha da iyi çözebilir mi acaba?

İlgili konular