欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

出現(xiàn)log.info報紅的解決方案

 更新時間:2022年06月20日 11:03:49   作者:welfna  
這篇文章主要介紹了出現(xiàn)log.info報紅的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

出現(xiàn)log.info報紅

1.裝lombok插件

File——>Settings——>plugins——>search plugins   搜索lombok    安裝,重啟Intellij

如果您已經(jīng)安裝lombok插件,您也可選擇重裝lombok插件,但作者并不推薦,只作為下策使用。

2.導(dǎo)包

無論使用Maven還是從本地導(dǎo)包,切記,要導(dǎo)入lombok與slf4j-log4j兩個包。前者依賴后者。

Maven導(dǎo)包如圖所示:

3.配置log4j.properties

本文意在說明log.info報紅的原因,所以這里不做敘述,您可以另行查找。

4.報錯的解決方案

  • 程序包org.slf4j不存在:此錯誤可能是未導(dǎo)入slf4j-log4j包導(dǎo)致。
  • lombok.javac.apt.LombokProcessor could not be initialized:出現(xiàn)此錯誤請升級  lombok  jar包版本
  • 其他錯誤:請到Setting——>Build、Execution、Deployment——>Compiler——>Annotation Processors勾選Enable annotation processing。

項目問題:log.info()導(dǎo)致CPU飆升

項目問題:log.info()導(dǎo)致CPU飆升

最近公司有個需求是對接E簽寶的,也就是CA認(rèn)證,大致的情況就是我們拿著文件去E簽寶做CA認(rèn)定,簡單的理解就是拿著合同去E簽寶蓋章。

因為是對接三方的嗎,所以在調(diào)E簽寶服務(wù)的時候我就用log.info()把請求參數(shù)給打印了出來,方便看組裝的參加,排查問題,參數(shù)中就包含我們的合同文件流,所以整個參數(shù)是一個大對象。在做壓測的時候發(fā)現(xiàn)CPU很快就飆升到100%,并且耗時很久。但是我把打印日志的log.info()去掉之后,CPU和耗時馬上就降下來了。下面開始排查這個問題:

首先使用top命令查看進(jìn)程運(yùn)行情況

# top
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 7020 root      20   0 2538892 164144  11856 S  90.3  8.7  61:23.54 java
11022 root      20   0 2560528 241340  11920 S  0.3 12.8 311:23.23 java
26805 root      20   0   32612   4036   2472 S  0.3  0.2  24:50.95 AliYunDunUpdate
26838 root      10 -10  134120  14524   5924 S  0.3  0.8 343:05.22 AliYunDun
    1 root      20   0   43280   3300   2108 S  0.0  0.2   2:16.82 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:01.78 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   1:30.68 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                 
    9 root      20   0       0      0      0 S  0.0  0.0  65:15.85 rcu_sched             
   10 root      rt   0       0      0      0 S  0.0  0.0   2:14.65 watchdog/0             
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs             
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                 
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd             
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback             
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd

查詢到7020這個進(jìn)程有異常,在繼續(xù)查看具體異常線程。

# top -Hp 7020
 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 23328 root      20   0 2538892 164144  11856 S  90.0  8.7   0:00.00 java

找到了當(dāng)前異常進(jìn)程下的異常線程后使用jstack查看詳細(xì)情況

# jstack -l 6377 > error.log
將線程ID打印成16進(jìn)制形式
# printf "%x\n" 23328
5b20

然后從jstack里查詢該線程信息

# grep '18e9' error.log --color
"http-bio-6379-exec-200" #8869954 daemon prio=5 os_prio=0 tid=0x00007f74a81f6800 nid=0x5b20 waiting for monitor entry [0x00007f742457f000]

最后從jstack文件定位到堆棧信息

"http-bio-7020-exec-200" #8869954 daemon prio=5 os_prio=0 tid=0x00007f74a81f6800 nid=0x5b20 waiting for monitor entry [0x00007f742457f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.log4j.Category.callAppenders(Category.java:204)
    - waiting to lock <0x00000000800371d0> (a org.apache.log4j.spi.RootLogger)
    at org.apache.log4j.Category.forcedLog(Category.java:391)
    at org.apache.log4j.Category.log(Category.java:856)
    at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:368)

結(jié)論

在log4j 中,logger.info等日志記錄方法是同步的(使用了synchronized),大量的日志導(dǎo)致線程阻塞在callAppenders()這個方法,也就是這個地方導(dǎo)致壓測阻塞,響應(yīng)耗時比較久的問題。

public void callAppenders(LoggingEvent event) {
        int writes = 0;
        for(Category c = this; c != null; c = c.parent) {
            synchronized(c) {
                if (c.aai != null) {
                    writes += c.aai.appendLoopOnAppenders(event);
                }
                if (!c.additive) {
                    break;
                }
            }
        }
        if (writes == 0) {
            this.repository.emitNoAppenderWarning(this);
        }
    }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法

    Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法

    這篇文章主要給大家介紹了關(guān)于Java中字符串和byte數(shù)組之間的簡單轉(zhuǎn)換方法,Java中將String類型轉(zhuǎn)換為byte[]類型,可以使用String的getBytes()方法,還有很多其他的辦法,需要的朋友可以參考下
    2023-08-08
  • Spring Boot讀取配置屬性常用方法解析

    Spring Boot讀取配置屬性常用方法解析

    這篇文章主要介紹了Spring Boot讀取配置屬性常用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • springboot 接口返回字符串帶引號的問題解決

    springboot 接口返回字符串帶引號的問題解決

    本文主要介紹了springboot 接口返回字符串帶引號的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • java實現(xiàn)上傳和下載工具類

    java實現(xiàn)上傳和下載工具類

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)上傳和下載工具類,文件上傳到ftp服務(wù)工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java?Object類中常用API分享

    java?Object類中常用API分享

    Object類是java中所有類的祖宗類,因此java中所有的類的對象都可以直接使用Object類中提供的一些方法,下面小編為大家整理了Object類中常用API,希望對大家有所幫助
    2023-10-10
  • java報錯之springboot3+vue2項目web服務(wù)層報錯總結(jié)

    java報錯之springboot3+vue2項目web服務(wù)層報錯總結(jié)

    java入門學(xué)習(xí),隨手記錄一下開發(fā)過程中產(chǎn)生的報錯,有些錯誤是網(wǎng)上搜索再加上自己嘗試,隨手引用了一些其他人的記錄,也是留給自己看的,或是希望能對其他初學(xué)者有幫助

    2023-06-06
  • 基于線程的wait和notify使用,生產(chǎn)消費(fèi)案例

    基于線程的wait和notify使用,生產(chǎn)消費(fèi)案例

    這篇文章主要介紹了基于線程的wait和notify使用,生產(chǎn)消費(fèi)案例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中的JPA實體關(guān)系:JPA一對一,一對多(多對一),多對多

    Java中的JPA實體關(guān)系:JPA一對一,一對多(多對一),多對多

    Java Persistence API(JPA)是Java平臺上的一個對象關(guān)系映射(ORM)規(guī)范,用于簡化數(shù)據(jù)庫操作,其中實體關(guān)系的映射是核心內(nèi)容之一,本文將深入淺出地探討JPA中的三種基本實體關(guān)系類型:一對一、一對多、多對多,揭示常見問題、易錯點及其避免策略,希望能幫助大家
    2024-06-06
  • Go?Java算法猜數(shù)字游戲示例詳解

    Go?Java算法猜數(shù)字游戲示例詳解

    這篇文章主要為大家介紹了Go?Java算法猜數(shù)字游戲示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java中值類型和引用類型的比較與問題解決

    Java中值類型和引用類型的比較與問題解決

    這篇文章主要給大家介紹了關(guān)于Java中值類型和引用類型的比較與問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論