Apakah ada Alat Baris Perintah (Linux) untuk memeriksa Ukuran Tumpukan (dan Memori yang Digunakan) dari Aplikasi Java?
Saya sudah mencoba melalui jmap. Tapi itu memberi info. tentang area memori internal seperti Eden / PermGen dll., yang tidak berguna bagi saya.
Saya mencari sesuatu seperti:
- Memori Maks: 1GB
- Memori Min: 256 MB
- Memori Tumpukan: 700 MB
- Memori yang Digunakan: 460 MB
Itu saja. Saya tahu bahwa saya dapat melihat ini di JConsole dll, tetapi saya memerlukan alat baris perintah (tidak dapat mengaktifkan JMX dll.)
Apakah Anda tahu alat / perintah seperti itu?
jstat
harus digunakan untuk memverifikasi hanya penggunaan memori JVM secara keseluruhan? Katakanlah Anda memulai JVM denganXms=4g
danXmx=4g
dan Anda ingin melihat, berapa banyak memori yang sudah digunakan?jstat
Oracle Java 8 panduan page :This command is experimental and unsupported
.awk 'print {$3+$4+$6+$8}'
dapat mencetak ringkasan penggunaan pada kolom jstat Java 8ps -ef | grep java
menunjukkan kepada saya vm args, yang dalam kasus saya termasuk nilai -Xmx, yang saya butuhkan.jvmtop adalah alat baris perintah yang menyediakan tampilan langsung di beberapa metrik, termasuk heap.
Contoh output dari mode VM overview:
sumber
Perintah ini menunjukkan ukuran tumpukan yang dikonfigurasi dalam byte.
Ini berfungsi di Amazon AMI di EC2 juga.
sumber
Coba ini berhasil di Ubuntu dan RedHat:
Untuk Windows:
Untuk Mac
Output dari semua perintah ini menyerupai output di bawah ini:
Untuk menemukan ukuran dalam MB, bagi nilainya dengan (1024 * 1024).
sumber
jstat -gc <vmid>
untuk menjalankan aplikasi.Tanpa menggunakan JMX, yang digunakan sebagian besar alat, yang bisa Anda lakukan hanyalah menggunakannya
dan menyimpulkan bahwa pengaturan akan berasal dari opsi baris perintah.
Anda tidak dapat memperoleh informasi dinamis tanpa JMX secara default tetapi Anda dapat menulis layanan Anda sendiri untuk melakukan ini.
BTW: Saya lebih suka menggunakan VisualVM daripada JConsole.
sumber
Ada alat baris perintah dengan aspek visual - jvm-mon . Ini adalah alat pemantauan JVM untuk baris perintah yang menghilang:
Metrik dan bagan diperbarui saat alat terbuka.
Sampel:
sumber
Terlambat di pesta, tetapi solusi yang sangat sederhana adalah dengan menggunakan skrip jpsstat.sh. Ini memberikan hidup sederhana saat ini memori , memori maks dan detail penggunaan cpu .
Berikut adalah contoh hasil skrip -
sumber
Dalam kasus saya, saya perlu memeriksa bendera di dalam wadah buruh pelabuhan yang tidak memiliki sebagian besar utilitas dasar (ps, pstree ...)
Menggunakan
jps
saya mendapat PID dari JVM berjalan (dalam kasus saya 1) dan kemudian denganjcmd 1 VM.flags
saya mendapat bendera dari JVM berjalan.Itu tergantung pada perintah apa yang Anda miliki, tetapi ini mungkin membantu seseorang. :)
sumber
Dari Java8 ke atas , Anda dapat menggunakan perintah di bawah ini:
jcmd
JAVA_PROCESS_ID
GC.heap_infoAnda dapat merujuk ke jumlah, total dan memori yang digunakan dari output.
Untuk detail lebih lanjut tentang perintah jcmd, kunjungi tautan: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
sumber
GC.heap_info
pasti tersedia di OpenJDK 8 juga. Mungkin hanya di versi terbaru? Saya menggunakan ini: 8u191-b12-2ubuntu0.18.04.1Setiap pendekatan harus memberi Anda nomor yang kira-kira sama. Itu selalu merupakan ide yang baik untuk mengalokasikan tumpukan menggunakan
-X..m
-X..x
untuk semua generasi. Anda kemudian dapat menjamin dan juga melakukan ps untuk melihat parameter apa yang dilewati dan karenanya digunakan.Untuk penggunaan memori aktual, Anda dapat secara kasar membandingkan VIRT (dialokasikan dan dibagi) dan RES (aktual digunakan) dibandingkan dengan nilai jstat juga:
Untuk Java 8, lihat jstat untuk nilai-nilai ini sebenarnya berarti. Dengan asumsi Anda menjalankan kelas sederhana tanpa mmap atau pemrosesan file.
Maks :
(kira-kira dekat dan di bawah ke memori VIRT)
Max (Min, Bekas):
(kira-kira dekat dengan memori RES)
"Jangan mengutip saya tentang ini" tetapi VIRT mem kira-kira mendekati atau lebih dari memori Max yang dialokasikan tetapi selama memori yang digunakan bebas / tersedia dalam memori fisik, JVM tidak melempar pengecualian memori. Bahkan, memori maks bahkan tidak diperiksa terhadap memori fisik pada startup JVM bahkan dengan swap off pada OS. Penjelasan yang lebih baik tentang apa memori virtual yang benar-benar digunakan oleh proses Java dibahas di sini .
sumber
Pertama-tama dapatkan id proses, nomor pertama dari proses yang terdaftar, dari salah satu dari yang berikut: (atau gunakan saja
ps aux | grep java
, jika Anda menginginkannya)Kemudian gunakan ID proses di sini:
sumber
Menggunakan
top
perintah adalah cara paling sederhana untuk memeriksa penggunaan memori program.RES
Kolom menunjukkan memori fisik nyata yang ditempati oleh suatu proses.Untuk kasus saya, saya punya file 10g dibaca di java dan setiap kali saya keluar dari pengecualian Memory. Ini terjadi ketika nilai di
RES
kolom mencapai ke nilai yang ditetapkan dalam-Xmx
opsi. Kemudian dengan menambah memori menggunakan-Xmx
opsi semuanya berjalan dengan baik.sumber
Dalam hal ukuran tumpukan Java, di Linux, Anda dapat menggunakan
atau
dan cari -Xms, -Xmx untuk mengetahui ukuran heap awal dan maksimum yang ditentukan.
Namun, jika -Xms atau -Xmx tidak ada untuk proses Java yang Anda minati, itu berarti proses Java Anda menggunakan ukuran heap default. Anda dapat menggunakan perintah berikut untuk mengetahui ukuran standar.
atau jvm tertentu, misalnya,
dan cari InitialHeapSize dan MaxHeapSize, yang dalam byte.
sumber
Jika menggunakan jrockit coba alat baris perintah jrcmd. Sebagai contoh:
Untuk perintah lainnya, seperti heap_diagnostics, gunakan "jrcmd help" untuk mendaftarnya.
https://blogs.oracle.com/jrockit/entry/why_is_my_jvm_process_larger_t
sumber
Contoh O / P dari perintah di atas
Dapatkan detail lebih lanjut tentang ini di http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
sumber
Tidak ada alat seperti itu sampai sekarang untuk mencetak memori tumpukan dalam format seperti yang Anda minta . Satu-satunya cara untuk mencetak adalah dengan menulis program java dengan bantuan Kelas Runtime ,
}
referensi: https://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/
sumber
Temukan id proses dari proses webapp / java Anda dari atas. Gunakan jmap heap untuk mendapatkan alokasi heap. Saya menguji ini pada AWS-Ec2 untuk batang pohon karet elastis
Anda dapat melihat pada gambar di bawah tumpukan maksimal 3GB untuk aplikasi
sumber