我的编程空间,编程开发者的网络收藏夹
学习永远不晚

出现log.info报红的解决方案

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

出现log.info报红的解决方案

出现log.info报红

1.装lombok插件

File——>Settings——>plugins——>search plugins   搜索lombok    安装,重启Intellij

如果您已经安装lombok插件,您也可选择重装lombok插件,但作者并不推荐,只作为下策使用。

2.导包

无论使用Maven还是从本地导包,切记,要导入lombok与slf4j-log4j两个包。前者依赖后者。

Maven导包如图所示:

3.配置log4j.properties

本文意在说明log.info报红的原因,所以这里不做叙述,您可以另行查找。

4.报错的解决方案

  • 程序包org.slf4j不存在:此错误可能是未导入slf4j-log4j包导致。
  • lombok.javac.apt.LombokProcessor could not be initialized:出现此错误请升级  lombok  jar包版本
  • 其他错误:请到Setting——>Build、Execution、Deployment——>Compiler——>Annotation Processors勾选Enable annotation processing。

项目问题:log.info()导致CPU飙升

项目问题:log.info()导致CPU飙升

最近公司有个需求是对接E签宝的,也就是CA认证,大致的情况就是我们拿着文件去E签宝做CA认定,简单的理解就是拿着合同去E签宝盖章。

因为是对接三方的吗,所以在调E签宝服务的时候我就用log.info()把请求参数给打印了出来,方便看组装的参加,排查问题,参数中就包含我们的合同文件流,所以整个参数是一个大对象。在做压测的时候发现CPU很快就飙升到100%,并且耗时很久。但是我把打印日志的log.info()去掉之后,CPU和耗时马上就降下来了。下面开始排查这个问题:

首先使用top命令查看进程运行情况

# 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这个进程有异常,在继续查看具体异常线程。

# 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

找到了当前异常进程下的异常线程后使用jstack查看详细情况

# jstack -l 6377 > error.log
将线程ID打印成16进制形式
# 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)

结论

在log4j 中,logger.info等日志记录方法是同步的(使用了synchronized),大量的日志导致线程阻塞在callAppenders()这个方法,也就是这个地方导致压测阻塞,响应耗时比较久的问题。

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);
        }
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

出现log.info报红的解决方案

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

cubes出现ValueError(reference)的解决方案

报错的原因在 Python 中,当函数或程序尝试使用不合法的值或参数时,可能会出现 ValueError。如何解决解决 ValueError 的方法因具体原因而异。使用例子是的,下面是一个使用 try-except 语句来处理 ValueE
cubes出现ValueError(reference)的解决方案
2024-02-28

django出现TypeError(other)的解决方案

报错的原因"TypeError" 通常是由于您尝试进行不支持的操作时出现的。在您看到 "TypeError" 错误时,需要检查您正在执行的操作是否对目标对象支持。如何解决解决 "TypeError" 错误的方法取决于错误的原因。举个例子,假
django出现TypeError(other)的解决方案
2024-02-28

tornado出现gen.Return("hello")的解决方案

报错的原因在 Python 中,Tornado 是一个基于事件循环的网络框架。如何解决在 Tornado 中,使用 yield 和 gen.Return() 来返回值。例如在函数外使用 asyncio.run() 或来获得返回值如果想要在协
tornado出现gen.Return(
2024-02-28

python更新pip出现红色报错如何解决

出现红色报错提示通常是由于安装包时出现错误或网络连接问题导致的。以下是一些可能的解决方法:1. 确认网络连接正常:检查网络连接是否正常,尝试重新连接网络或更换网络环境。2. 使用代理:如果您正在使用代理服务器,请确保代理服务器设置正确,并且
2023-09-08

win10红警图框的解决方案很小

不少玩红警的朋友在win10系统上遇到了图框变小的问题,不知道该怎么解决。今天给大家带来了win10红警图框的小解决方案。想知道就来看看win10红警图框的小解决方案。win10红警图框的小解决方案:1.右击桌面空白处,点击图形属性。2.然
2023-07-10

tornado出现gen.Return(\"hello\")的解决方案

报错的原因在 python 中,Tornado 是一个基于事件循环的网络框架。它使用了协程来处理并发,gen.Return("hello") 是一种用于在协程中返回值的方法。在使用 Tornado 的异步功能时,使用 gen.Return
tornado出现gen.Return(\"hello\")的解决方案
2024-03-01

PHPExcel导出Excel报错:PHPExcel_IOFactory::load()的解决方案

PHPExcel_IOFactory::load()报错解决方案解决方法包括:启用文件读取权限检查文件格式升级PHPExcel库确保PHP扩展已安装设置内存限制使用其他加载器检查文件损坏禁用PHP错误报告使用异常处理联系PHPExcel支持
PHPExcel导出Excel报错:PHPExcel_IOFactory::load()的解决方案
2024-04-02

Eclipse 项目出现错误(红色叹号)解决方法

Eclipse 项目出现错误(红色叹号)解决方法情况:就是项目出现红色感叹号 解决方法:  对准项目右键选择Build Path → configure build path  点击eclipse项目的configure build pat
2023-05-31

django出现ValidationError("Clean method called")的解决方案

如果你的 Django 代码中出现了 `ValidationError` 这个错误,那么可能是因为你的代码中调用了一个模型字段的 `clean()` 方法,而该方法已经被废弃。希望这些信息能帮助你解决问题。如何解决为了解决 `Validat
django出现ValidationError(
2024-02-28

win10启动时,recovery解决方案出现

若遇到win10系统中出现的recovery现象,win10启动recovery会怎样?放轻松点,跟小编一起来看具体解决办法。1.首先进入pe桌面,双击计算机图标,进入系统盘符。2.输入之后,检查前一个是系统盘。3.在您回到pe桌面之后,启
2023-07-11

Android编译出现Warning:Mapping new ns to old ns报错的解决方案

android在编译的过程中难免会出现些错误,下面这篇文章主要给大家介绍了关于Android编译出现Warning:Mapping new ns to old ns报错的解决方案,需要的朋友可以参考下
2023-02-09

Win11红警运行出现FATAL的原因分析及解决方法

出现FATAL错误可能是由于以下原因之一导致的:1. 系统要求不满足:Win11对硬件配置有一定要求,如CPU、内存和存储等,如果您的计算机不满足这些要求,就可能会出现FATAL错误。您可以查阅Win11的系统要求,并确保您的计算机符合这些
2023-09-17

出现java.lang.NullPointerException的可能原因及解决方案

出现 java.lang.NullPointerException 错误通常是因为代码中出现了一个空引用,即 null。当尝试对这个空引用进行操作时,就会出现 NullPointerException 错误。以下是可能导致该错误的几个原因:
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录