前言

前段时间写了一篇文章(文章链接:Logback配置文件这么写,TPS提高10倍),反响还不错,有很多网友也发表了自己的意见:

总结一下就是:

  • logback性能测试同步和异步TPS相差不大
  • 都9102年了还在用logback

看到网友的意见后又继续去做了一波测试和调研

服务器硬件

  • CPU 六核
  • 内存 8G

测试工具

  • JMeter
  • JProfile
  • APM(New Relic)

logback日志框架同步和异步测试

之前的测试结果存在以下几点问题:

  • 测试样本数过少(即线程数和循环执行次数过少,之前线程数为100,循环1次,样本总数为100)
  • 测试次数过少,只进行了一次测试,结果存在偶然性
  • 两次测试结果存在污染,样本数量不一样

针对以上问题,重新测试中将线程数修改为200,每次测试中循环100次,样本总数为2w,和原来测试的样本数相比扩大200倍,并且重复测试5次。 新的测试结果如下:

新的测试结果表明,使用logback日志框架同步和异步输出日志方式的TPS相差不大。把数据制作成柱形图更直观

但是总觉得异步去写日志了,访问api的线程将更快响应客户端,TPS就应该有明显的变化才对。想不通又去网上查阅了一些资料,有反应说通过APM进行性能监控,同步和异步的TPS将会有较大的差别,TPS一定是会有明显变化的(呐喊),于是用APM去监控JMeter发送的请求(JMeter参数设置为线程数100,Ramp-up Period为0,循环100次): APM测试结果如下:

APM监控下,在执行的五分钟内异步输出日志TPS平均为378rpm

APM监控下,在执行的五分钟内同步输出日志TPS平均为333rpm 发现TPS同步和异步相比还是不明显。又一次证明失败 虽然想不明白但后来和网友探讨了下,醍醐灌顶。TPS变化不明显的原因如下: TPS为每秒处理事务数,每个事务包括了如下3个过程:

  • 用户请求服务器
  • 服务器自己的内部处理
  • 服务器返回给用户

服务器自己的内部请求包括访问数据库、处理逻辑和打印日志,同步和异步中唯一不同的就是打印日志的方式。而从测试结果来看,打印日志耗时只占API访问请求的5.3%,所以缩短打印日志耗时不能很明显的提高TPS,因为打印时间和网络请求、业务处理消耗时间可以忽略不计 但是测试结果表明,虽然使用异步输出方式不能明显提高TPS,但是能够减少打印日志的耗时。所以使用logback日志框架还是推荐使用异步输出方式

推荐使用log4j2而不是logback

log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,带来了一些重大的提升,在异步方面的性能得到了巨大提升,其除了提供Async Append异步实现外还提供了Async Log异步实现,其中Async Append异步实现方式和logback的异步实现差不多,而Async Log基于LMAX Disruptor库,实现了一个高性能的异步记录器。本次测试中log4j2异步实现是基于Async Log。 JMeter测试参数和之前的logback测试一样,线程数200,循环次数100,重复五轮。并且logj2日志配置文件基本和logback异步配置相同,满足:

  • 控制台打印日志
  • 分类输出日志
  • 按天滚动
  • 同样的日志输出格式

测试结果如下:

将TPS制作为柱形图

TPS提升了6倍!!!,并且打印日志的耗时都快到统计不出来了 官方提供的测试报告中,log4j2和logback相比性能提升更明显。附官方测试报告:Asynchronous Loggers for Low-Latency Logging

结论

  • 如果使用logback框架,推荐使用异步输出日志方式
  • 选择日志框架,推荐使用log4j2
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Java基础学习总结(155)——Java 日志框架怎么选?Logback Or Log4j2?相关推荐

  1. java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会 直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有"01 ...

  2. 日志框架,选择Logback Or Log4j2?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:Nginx 为什么快到根本停不下来?个人原创100W+访问量博客:点击前往,查看更多 来源:https://jue ...

  3. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  4. Java基础学习总结(50)——Java事务处理总结

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isol ...

  5. java中哪些可以私有化_《Java基础学习笔记》JAVA修饰符之私有化(Private)

    1,什么是private修饰符? private是权限修饰符,用于修饰类中的成员(成员变量,成员函数). private修饰后的成员只在本类中有效. /* 例: * 将age私有化以后,类以外即使建立 ...

  6. 《Java基础学习笔记》JAVA面向对象之封装

    1,封装,是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 2,好外:        a)将变化隔离.        b)便于使用.        c)提高重用性.        d)提高安全性 ...

  7. Java 基础学习-Java语言概述

    Java 基础学习 第一章 Java语言概述 回顾java基础知识,进行整理记录. 文章目录 Java 基础学习 前言 一. Java语言发展史(了解) 二.Java语言跨平台原理(理解) 三.JRE ...

  8. Java基础学习——第六章 面向对象编程(下)

    Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...

  9. java基础学安卓开发_Android开发学习路线之Java基础学习

    原标题:Android开发学习路线之Java基础学习 很多Android学习开发者刚入手Android开发技术时,稍微有点迫切.任何的开发技术都有其基础语言,Android应用程序开发是以Java语言 ...

  10. struts2深入浅出(备java基础,javaweb,javaee,框架)-任亮-专题视频课程

    struts2深入浅出(备java基础,javaweb,javaee,框架)-12310人已学习 课程介绍         Struts2框架介绍.工作原理与架构分析.6大配置文件分析使用通配符定义a ...

最新文章

  1. python+flask+vue开发(1)--虚拟环境创建
  2. 初识Tcl(二):Tcl 数据类型
  3. python和c哪个好学-c语言和python哪个容易
  4. 简单爬虫-爬取免费代理ip
  5. 高斯滤镜模糊CSS3
  6. /proc/sys/net/ipv4详解(2)
  7. RUNOOB python练习题5
  8. LeetCode 79. Word Search
  9. 深度学习之非极大值抑制(Non-maximum suppression,NMS)
  10. 争议激烈!新晋斯隆奖得主发布最新研究,网友:结果成疑,文章结论和实验结果完全相反...
  11. Docker学习文档之三 其他相关-参考
  12. 【ElasticSearch】es 线程池 ThreadPool 的封装
  13. .net 中使用Javacript弹出提示窗口方法总结
  14. 一句代码实现gzip压缩解压缩
  15. JSON数据格式转换(StringBuffer拼接json串)大全及用法
  16. Compiling XORP v1.2 in Debian 3.1
  17. C++ std::condition_variable wait() wait_for() 区别 怎么用 实例
  18. 在数据库中如果组合主键(假设为stuID和stuName)存在则更新,不存在则新增
  19. lte基站可以做ntp server吗?_你手机信号强吗?学会这几招快速提升你的手机信号...
  20. 2-机器学习入门-读书笔记

热门文章

  1. spring 数据库 链接db2_实例讲解使用Spring通过JPA连接到Db2
  2. c语言goord函数,park、unpark、ord 函数使用方法(转)
  3. 下列计算机设备中运行最慢的是,下列4种存储设备中,读写速度最慢的是( )。A.内存条B.硬盘C. CPU内部寄存器D. Cache - 试题答案网问答...
  4. java web html5区别_html5和html有什么区别啊?
  5. java获取tomcat启动时间不对_部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题...
  6. uml活动图 各个功能的操作流程和分支_做软件架构设计,你不得不知道这些图...
  7. 输入为数字和大写_表格中如何录入分数、邮政编码、大写数字?
  8. java 反射 proper_JAVA提高四:反射基本应用
  9. 高校计算机实验室管理制度,高校计算机实验室管理论文
  10. mysql数据绑定listview_将数据库数据用代码绑定到Listview