Merhabalar bu yazımda kullanmış olduğumuz java uygulamalarını izlemek için kullanabileceğimiz birkaç yöntemden bahsedeceğim. ben uygulamalarımı ubuntu makinada çalıştırdığım için ubuntuya göre anlatacağım ama kullanılan yöntemlerin çoğu windows makinalarda da kullanılmaktadır.
Öncelikle java uygulamamızı çalıştırdığımız makinada kaç tane cpu var onu öğrenelim. bunu öğrenmek için terminal üzerinde aşağıdaki komutu çalıştırabilirsiniz.
cat /proc/cpuinfo
Ekrana kalabalık bir liste dökülecektir. Bu bilginin özetini almak için lscpu komutunu kullanabilirsiniz.
lscpu
Cpu’nun saat frekansını öğrenmek için aşağıdaki komutunu kullanabilirsiniz.
watch -n1 “lscpu | grep “MHz” | gawk ‘{print $1}’”
İşlemcilerin, beleğin ve giriş/çıkış sistemlerinin ne kadar kullanıldığını görmek için vmstat komutunu kullanabilirsiniz. Parametre olarak örnekleme adedi değeri veriyoruz.
vmstat 5
Sistemde çalışan işlemleri listelemek için top komutu kullanılır. Sıralama için -o ile %M(Memory), %C(Cpu) parametreleri kullanılabilir.
top -o %M
İzlenmek istenen herhangi bir java uygulamasında hangi threadlerin çalıştığını görmek için;
top -H -p 16930
İşlemci kullanımlarını görmek için mstat komutu kullanılır. 5 ile örnekleme adedi veriliebilir.
mpstat -P ALL 5
İşletim sizteminde çalışan java uygulamalarını listelemek için jps komutu kullanılır. Aşağıdaki parametreler ile kullanılabilir.
jps -l
jps -v
jps -m
jps -w
jcmd ile işletim sistemindeki java uygulamalarını ve durumlarını görebiliriz. Örneğin java uygulamasının ne kadar zamandır çalıştığını görmek için;
jcmd 16930 VM.uptime
Yada java uygulamasının hangi parametreler ile çalıştırıldığını görmek için;
jcmd 16930 VM.flags
jcmd için diğer parametreleri görmek için;
jcmd 16930 help
Heap dump almak için;
jcmd 16930 GC.heap_dump /tmp/heap_dump_fie.txt
Java nesnelerinin sınıflara dağılımını görmek için;
jcmd 16930 GC.class_histogram
jmap: Java uygulamasının JSM bilgisine ulaşmak, çöp toplayıcı seyir defterini okumak ve heap dökümü almak için kullanılabilir.
jmap 16930
jmap ile eapdump almak için;
jmap -dump:file=/tmp/heap_dump.txt 16930
Heap dökümünü jvisualvm ve jhat araçları ile açabilmek için format bilgisi vermeniz gerekir:
jmap -dump:format=b, file=/tmp/heap_dump.txt 16930
jmap ile nesnelerin sınıflara dağılımını öğrenmek için;
jmap -histo 16930
jmap ile GC davranışını izlemek için;
jmap -heap 16930
jhat: Heap dökümünü tarayıcı üzerinden incelemek için geliştirilmiş bir web uygulamasıdır.
jhat -port 9001 /tmp/heapDump
Sonrasında ise browser üzerinden aşağıdaki gibi dump bilgisini görüntüleyebilirsiniz.
jstat: Çalışan Java uygulaması ile ilgili farklı türde bilgiler almak ve izlemek için kullanılır. Aşağıda kullanımına ilişkin örnekler verilmiştir. Çöp toplayıcı davranışına ve heap kullanımına ilişkin 1000 mili saniye aralıklarla 10 tane örnek almak istiyoruz:
jstat -gc 16930 1000 10
GC ve heap kullanım oranlarını listelemek için jstat kullanılabilir:
jstat -gcutil 16930 1000 10
JIT derleyeci davranışını izlemek için jstat kullanılabilir:
jstat -compiler 16930 1000 10
Sınıf yükleyici (=class loader) davranışını izlemek için jstat kullanılabilir:
jstat -class 16930 1000 10
JIT’lenen metodları izlemek için jstat kullanılabilir:
jstat -printcompilation 16930 1000 10
jstatd: İzleme komutlarının hemen hemen hepsi (jcmd hariç) uzaktaki bir sistemdeki Java uygulamasını izlemek için kullanılabilir. Bunun mümkün olabilmesi için uzaktaki sistemde jstatd servisinin çalıştırılması gerekir. Uzak makinada jstatd servisini 8001 numaralı portu dinlemek üzere çalıştırıyoruz:
cat security.policy
Security.policy dosyası içine aşağıdaki bilgiler yazılır.
grant codebase “file:${java.home}/../lib/tools.jar” { permission java.security.AllPermission; };
Sonra aşağıdaki komut çalıştırılır.
jstatd -p 8001 -J-Djava.security.policy=security.policy
Sonra bizim makinamızdan uzaktaki makinada bulunan java uygulamalarının listesini alabiliriz.
jps HostName:8001
Uzak makinadaki bir Java prosesinin GC davranışını jstat komutu ile izleyebiliriz.
jstat -gcutil 19953@HostName:8001 1000 5
Görsel izleme araçları ise şunlar;
jconsole
jvisualvm
jmc


Leave a comment