AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

解決 Java 打印日志吞異常堆棧的問題

來源: 責(zé)編: 時(shí)間:2023-09-18 21:40:35 320觀看
導(dǎo)讀前幾天有同學(xué)找我查一個(gè)空指針問題,Java 打印日志時(shí),異常堆棧信息被吞了,導(dǎo)致定位不到出問題的地方。現(xiàn)象捕獲異常打印日志的代碼類似這樣:try { // ...} catch (Exception e) { log.error("系統(tǒng)異常 customerCode:

前幾天有同學(xué)找我查一個(gè)空指針問題,Java 打印日志時(shí),異常堆棧信息被吞了,導(dǎo)致定位不到出問題的地方。pcP28資訊網(wǎng)——每日最新資訊28at.com

pcP28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)象

捕獲異常打印日志的代碼類似這樣:pcP28資訊網(wǎng)——每日最新資訊28at.com

try {    // ...} catch (Exception e) {    log.error("系統(tǒng)異常 customerCode:{},data:{}", customerCode, data, e);    // ...}

查到的日志是這樣的:pcP28資訊網(wǎng)——每日最新資訊28at.com

2023-06-26 11:11:11.111 ERROR 1 --- [pool-1-thread-1] c.mazhuang.service.impl.TestServiceImpl  : 系統(tǒng)異常 customerCode:123,data:{"name":"mazhuang","age":18}java.lang.NullPointerException: null

異常堆棧丟了。pcP28資訊網(wǎng)——每日最新資訊28at.com

分析

在之前的一篇文章里已經(jīng)驗(yàn)證過這種寫法是可以正常打印異常和堆棧信息的:AI 自動(dòng)補(bǔ)全的這句日志能正常打印嗎?pcP28資訊網(wǎng)——每日最新資訊28at.com

再三確認(rèn)代碼寫法沒問題,納悶之下只好搜索了一下關(guān)鍵詞「Java異常堆棧丟失」,發(fā)現(xiàn)了這篇文章:Java異常堆棧丟失的現(xiàn)象及解決方法,這里面提到的問題與我們遇到的一樣,而且給出了 Oracle 官方文檔里的相關(guān)說明:pcP28資訊網(wǎng)——每日最新資訊28at.com

https://www.oracle.com/java/technologies/javase/release-notes-introduction.htmlpcP28資訊網(wǎng)——每日最新資訊28at.com

The compiler in the server VM now provides correct stack backtraces for all “cold” built-in exceptions. For performance purposes, when such an exception is thrown a few times, the method may be recompiled. After recompilation, the compiler may choose a faster tactic using preallocated exceptions that do not provide a stack trace. To disable completely the use of preallocated exceptions, use this new flag: -XX:-OmitStackTraceInFastThrow.pcP28資訊網(wǎng)——每日最新資訊28at.com

pcP28資訊網(wǎng)——每日最新資訊28at.com

大致意思就是說,為了提高性能,JVM 會(huì)針對(duì)一些內(nèi)建異常進(jìn)行優(yōu)化,在這些異常被某方法多次拋出時(shí),JVM 可能會(huì)重編譯該方法,這時(shí)候就可能會(huì)使用不提供堆棧信息的預(yù)分配異常。如果想要完全禁用預(yù)分配異常,可以使用 -XX:-OmitStackTraceInFastThrow 參數(shù)。pcP28資訊網(wǎng)——每日最新資訊28at.com

了解到這個(gè)信息后,翻了翻從服務(wù)上次發(fā)版以來的這條日志,果然最早的十幾次打印是有異常堆棧的,后面就沒有了。pcP28資訊網(wǎng)——每日最新資訊28at.com

解決方案

回溯歷史日志,找到正常打印的堆棧信息,定位和解決問題;pcP28資訊網(wǎng)——每日最新資訊28at.com

也可以考慮在 JVM 參數(shù)里加上 -XX:-OmitStackTraceInFastThrow 參數(shù),禁用優(yōu)化;pcP28資訊網(wǎng)——每日最新資訊28at.com

本地復(fù)現(xiàn)

在本地寫一個(gè)簡(jiǎn)單的程序復(fù)現(xiàn)一下:pcP28資訊網(wǎng)——每日最新資訊28at.com

public class StackTraceInFastThrowDemo {    public static void main(String[] args) {        int count = 0;        boolean flag = true;        while (flag) {            try {                count++;                npeTest(null);            } catch (Exception e) {                int stackTraceLength = e.getStackTrace().length;                System.out.printf("count: %d, stacktrace length: %d%n", count, stackTraceLength);                if (stackTraceLength == 0) {                    flag = false;                }            }        }    }    public static void npeTest(Integer i) {        System.out.println(i.toString());    }}

不添加 -XX:-OmitStackTraceInFastThrow 作為 JVM 參數(shù)時(shí),運(yùn)行結(jié)果如下:pcP28資訊網(wǎng)——每日最新資訊28at.com

...count: 5783, stacktrace length: 2count: 5784, stacktrace length: 2count: 5785, stacktrace length: 0Process finished with exit code 0

在我本機(jī)一般運(yùn)行五六千次后,會(huì)出現(xiàn)異常堆棧丟失的情況。pcP28資訊網(wǎng)——每日最新資訊28at.com

添加 -XX:-OmitStackTraceInFastThrow 作為 JVM 參數(shù)時(shí),運(yùn)行結(jié)果如下:pcP28資訊網(wǎng)——每日最新資訊28at.com

...count: 3146938, stacktrace length: 2count: 3146939, stacktrace length: 2count: 3146940, stacktrace length: Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

運(yùn)行了幾百萬次也不會(huì)出現(xiàn)異常堆棧丟失的情況,手動(dòng)終止程序。pcP28資訊網(wǎng)——每日最新資訊28at.com

完整源碼見:https://github.com/mzlogin/java-notes/blob/master/src/org/mazhuang/StackTraceInFastThrowDemo.javapcP28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-10425-0.html解決 Java 打印日志吞異常堆棧的問題

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Python中30個(gè)常見的內(nèi)置函數(shù)使用講解(一)

下一篇: 【Python入門】為什么這門編程語言如此受歡迎?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 影音體驗(yàn)是真的強(qiáng) 簡(jiǎn)單聊聊iQOO Pad

    大公司的好處就是產(chǎn)品線豐富,非常細(xì)分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發(fā)布會(huì)上看到了iQOO的首款平板產(chǎn)品iQOO Pad。雖
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實(shí)用文檔、數(shù)據(jù)圖表及個(gè)性化定制服務(wù)。優(yōu)點(diǎn):OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • 新電商三兄弟,“抖快紅”成團(tuán)!

    來源:價(jià)值研究所作 者:Hernanderz 隨著內(nèi)容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業(yè)內(nèi)一股不可忽視的勢(shì)力,給阿里、京東、拼多多帶去了巨大壓
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭(zhēng)霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 半導(dǎo)體需求下滑 三星電子DS業(yè)務(wù)部門今年?duì)I業(yè)虧損預(yù)計(jì)超10萬億韓元

    7月17日消息,據(jù)外媒報(bào)道,去年下半年開始的半導(dǎo)體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營(yíng)收明顯下滑,部分廠商甚至出現(xiàn)了虧損。作為
  • OPPO K11搭載長(zhǎng)壽版100W超級(jí)閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會(huì),屆時(shí)全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣
  • 機(jī)構(gòu)稱Q2全球智能手機(jī)出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據(jù)外媒報(bào)道,研究機(jī)構(gòu)的報(bào)告顯示,由于需求下滑,今年二季度全球智能手機(jī)的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
Top