Rumah  >  Soal Jawab  >  teks badan

java - 正常的应用多久一次Full GC?

我查看我们服务器的状态,半个月发生了900+次full gc,大约20分钟一次full gc,这是正常的吗?或者说优化到多久一次会比较合理?

天蓬老师天蓬老师2744 hari yang lalu1788

membalas semua(3)saya akan balas

  • PHPz

    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.

    balas
    0
  • 大家讲道理

    大家讲道理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

    balas
    0
  • PHPz

    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

    balas
    0
  • Batalbalas