Saya perlu memeriksa penggunaan CPU dan memori untuk server di java, ada yang tahu bagaimana itu bisa dilakukan?
java
operating-system
cpu
ram
Johnny Bou
sumber
sumber
Jawaban:
Jika Anda mencari memori khusus di JVM:
Namun, ini harus dianggap hanya sebagai perkiraan ...
sumber
sumber
freeMemory
di sini mengembalikan jumlah memori yang tersedia di JVM yang sangat berbedaJika Anda menggunakan Sun JVM, dan tertarik dengan penggunaan memori internal aplikasi (berapa banyak dari memori yang dialokasikan yang digunakan aplikasi Anda), saya lebih suka mengaktifkan pencatatan pengumpulan sampah bawaan JVM. Anda cukup menambahkan -verbose: gc ke perintah startup.
Dokumentasi Dari Matahari:
Untuk info lebih lanjut lihat: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
sumber
Dari sini
sumber
operatingSystemMXBean.getProcessCpuLoad();
? Menurut dokumentasi Oracle, metode ini mengembalikan "Mengembalikan" penggunaan cpu terkini "untuk proses Java Virtual Machine." Namun saya melihat perbedaan jumlah yang relatif besar antara metode Anda dan metode ini.OperatingSystemMXBean
kelas. Salah satunya adalah antarmuka yang disediakan dijava.lang
. Tapi ada juga versi lain, yang memperpanjang versi inicom.sun.management
. Itulah metode yang saya maksud adalah dari ituOperatingSystemMXBean
JMX, MXBeans (ThreadMXBean, dll) yang disediakan akan memberi Anda penggunaan Memori dan CPU.
sumber
Untuk penggunaan memori, berikut ini akan berfungsi,
Untuk penggunaan CPU, Anda perlu menggunakan aplikasi eksternal untuk mengukurnya.
sumber
Sejak Java 1.5, JDK hadir dengan alat baru: JConsole yang dapat menunjukkan penggunaan CPU dan memori dari JVM 1.5 atau yang lebih baru. Itu dapat melakukan grafik parameter ini, mengekspor ke CSV, menunjukkan jumlah kelas yang dimuat, jumlah instance, kebuntuan, utas, dll ...
sumber
Jika Anda menggunakan solusi runtime / totalMemory yang telah diposting di banyak jawaban di sini (saya sudah sering melakukannya), pastikan untuk memaksa dua kumpulan sampah terlebih dahulu jika Anda menginginkan hasil yang cukup akurat / konsisten.
Untuk efisiensi, Java biasanya mengizinkan sampah mengisi semua memori sebelum memaksakan GC, dan bahkan GC biasanya bukan GC lengkap, jadi hasil Anda untuk runtime.freeMemory () selalu berada di antara jumlah "sebenarnya" dari memori bebas dan 0 .
GC pertama tidak mendapatkan segalanya, ia mendapatkan sebagian besar darinya.
Peningkatannya adalah jika Anda hanya melakukan panggilan freeMemory () Anda akan mendapatkan nomor yang sama sekali tidak berguna dan sangat bervariasi, tetapi jika melakukan 2 gc pertama, itu adalah pengukur yang sangat andal. Itu juga membuat JAUH rutin lebih lambat (detik, mungkin).
sumber
Objek Runtime Java dapat melaporkan penggunaan memori JVM. Untuk konsumsi CPU, Anda harus menggunakan utilitas eksternal, seperti bagian atas Unix atau Manajer Proses Windows.
sumber
JConsole adalah cara mudah untuk memantau aplikasi Java yang sedang berjalan atau Anda dapat menggunakan Profiler untuk mendapatkan informasi lebih rinci tentang aplikasi Anda. Saya suka menggunakan NetBeans Profiler untuk ini.
sumber
Berikut beberapa kode sederhana untuk menghitung penggunaan memori saat ini dalam megabyte:
sumber
Saya juga akan menambahkan cara berikut untuk melacak Beban CPU:
Anda dapat membaca lebih lanjut di sini
sumber
The YourKit Java profiler adalah solusi komersial yang sangat baik. Anda dapat menemukan informasi lebih lanjut di dokumen tentang profil CPU dan profil memori .
sumber
Jika Anda menggunakan Tomcat, lihat Psi Probe , yang memungkinkan Anda memantau konsumsi memori internal dan eksternal serta sejumlah area lainnya.
sumber
Untuk Eclipse, Anda dapat menggunakan TPTP (Test and Performance Tools Platform) untuk menganalisis penggunaan memori dan informasi lainnya
sumber