Rumah > Soal Jawab > teks badan
我查看我们服务器的状态,半个月发生了900+次full gc,大约20分钟一次full gc,这是正常的吗?或者说优化到多久一次会比较合理?
PHPz2017-04-18 10:50:22
Walaupun ia belum dioptimumkan. Walau bagaimanapun, saya merasakan ini perlu disokong berdasarkan keperluan perniagaan sebenar dan keupayaan perniagaan untuk mengoptimumkannya.
大家讲道理2017-04-18 10:50:22
Lihat saiz timbunan dan qps aplikasi Java, tetapi pada mulanya melihat gc penuh setiap 20 minit, nampaknya tidak normal
PHPz2017-04-18 10:50:22
Pengoptimuman JVM boleh dibincangkan selama berjam-jam.
Pertama: Masalah anda ialah gc penuh adalah kerap. Periksa sama ada jumlah memori dan tetapan generasi lama terlalu kecil.
Ia bergantung terutamanya pada parameter -Xmx dan -Xmn Jika terlalu kecil, gc pasti akan kerap berlaku.
Kedua: Tambahkan parameter berikut
-verbose.gc -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX +PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -Xloggc:/data/log/xxx/xxx-gc.log -XX:+PrintGCDetails
Semak setiap kali gc, berapa banyak ruang yang tinggal dalam generasi lama, secara amnya, ruang dalam generasi lama Menetapkannya kepada 2-2.5 kali memori selepas gc adalah nilai yang lebih munasabah.
Pada masa yang sama, anda boleh melihat melalui log ini sama ada sejumlah besar objek memasuki generasi lama tanpa gc yang mencukupi dalam generasi baharu. Jika objek yang boleh dikitar semula melalui generasi baharu memasuki generasi lama, gc penuh pasti akan kerap berlaku
Ketiga: Memori pembuangan sebab kod
jmap -dump:live,format=b,file=xx.bin [pid]
Kemudian lulus MAT (http://www. eclipse .org/mat/) untuk melihat memori besar yang belum dikeluarkan