gc日志一般关注什么_Java架构师必懂的GC日志知识
在Java,Android,C#等中,GC是自動的,而在幾種前代編程語言(C,C ++)中,程序員必須明確編寫代碼才能釋放對象。 所以,這對于Java,Android和C#應(yīng)用程序開發(fā)人員來說是一個很大的方便。 但這種自動垃圾收集不是免費(fèi)的,它有一個代價。 自動GC可以對以下方面產(chǎn)生比較明顯的的影響:
程序響應(yīng)時間
CPU
內(nèi)存
程序響應(yīng)時間
在進(jìn)行自動GC對象,整個應(yīng)用程序必須間歇性地暫停,以標(biāo)記正在使用的對象,并清除未使用的對象。 在這個暫停期間,應(yīng)用程序中正在運(yùn)行的所有客戶端處理將被凍結(jié)(即凍結(jié))。 根據(jù)您配置的GC算法和內(nèi)存設(shè)置的類型,暫停時間可以從幾毫秒到幾秒到幾分鐘。 因此,垃圾收集可以顯著影響您的應(yīng)用程序SLA(服務(wù)級別協(xié)議)。
CPU
GC消耗了大量的CPU時間偏。 每個應(yīng)用程序?qū)⒂谐汕先f個存在內(nèi)存中的對象。 內(nèi)存中的每個對象都應(yīng)定期進(jìn)行調(diào)查,看它們是否在使用中。 如果正在使用,誰在引用它? 這些引用仍然活躍嗎? 如果他們沒有被使用,他們應(yīng)該從內(nèi)存中移除。 所有這些調(diào)查和計算都需要大量的CPU能力。
內(nèi)存
當(dāng)然,糟糕的GC配置會導(dǎo)致高內(nèi)存消耗,反之亦然。 在飽和其他資源(CPU,網(wǎng)絡(luò)帶寬,存儲)之前,大多數(shù)應(yīng)用程序首先飽和內(nèi)存。 大多數(shù)應(yīng)用程序升級其EC2實例大小,以獲得額外的內(nèi)存,而不是獲得額外的CPU或網(wǎng)絡(luò)帶寬。
因此,為了讓您的云托管服務(wù)提供商擁有一流的SLA并減少費(fèi)用,您的應(yīng)用程序的垃圾收集必須能夠有效運(yùn)行。 為了研究和優(yōu)化垃圾回收對應(yīng)用程序性能的影響,必須啟用垃圾回收日志。 除此之外,垃圾收集日志可以用來解決應(yīng)用程序中與內(nèi)存有關(guān)的問題。
啟用GC日志
GC日志記錄可以通過在應(yīng)用程序啟動過程中傳遞下面提到的系統(tǒng)屬性來啟用。
Java 8之前是這樣配置的:-XX:+PrintGCDetails -Xloggc:,例如我們的項目是:-XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log
Java 9是這樣的配置的:-Xlog:gc:file=,我們的項目的寫法就是:-Xlog:gc:file=/opt/tmp/myapp-gc.log
怎么分析GC日志
高級Java架構(gòu)師必懂的GC日志知識
GC日志具有豐富的信息,但是理解GC日志并不容易。 沒有足夠的文檔來解釋GC日志格式。 最重要的是,GC日志格式不是標(biāo)準(zhǔn)化的。 它的性能因JVM供應(yīng)商(Oracle,IBM,HP,Azul等),Java版本(1.4,5,6,7,8,9),GC算法(串行,并行,CMS,G1,Shenandoah),GC系統(tǒng)屬性 (-XX:+ PrintGC,-XX:+ PrintGCDetails,-XX:+ PrintGCDateStamps,-XX:+ PrintHeapAtGC ...)。 基于這種排列和組合,很容易有60多種不同的GC日志格式。
因此,為了分析GC日志,強(qiáng)烈建議使用GC日志分析工具,如GCeasy,HPJmeter。 這些工具解析GC日志,并生成數(shù)據(jù)的良好圖形可視化,報告關(guān)鍵性能指標(biāo)和其他一些有用的指標(biāo)。
GCeasy是一個很棒的工具。你可以試著去使用使用。對大家的分析有很大的幫助。
總結(jié)
以上是生活随笔為你收集整理的gc日志一般关注什么_Java架构师必懂的GC日志知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ele表格操作区根据数据_Vue数据绑定
- 下一篇: jmeter聚合报告如何添加单位_JMe