java log 对性能影响_Java日志框架性能比较

1 Java日志框架性能比较

前面几章,笔者分别介绍了log4j,logback,log4j2三大日志实现框架。

接下来,就用具体的数据比较下,哪个日志框架的性能更好!

单线程:外循环100次,内循环100000次;

多线程:开启100个线程,每个线程执行100000次;

1.1 测试代码:

(1)log4j:

public class log4jDemo {

Logger logger = Logger.getLogger(log4jDemo.class);

@Test

public void testThread() throws InterruptedException {

int THREAD_NUM = 100;

final int LOOP_NUM = 100000;

final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);

long start = System.currentTimeMillis();

for(int x= 0;x < THREAD_NUM;x++){

new Thread(new Runnable() {

public void run() {

for (int y = 0; y < LOOP_NUM; y++) {

logger.info("Info Message!");

}

countDownLatch.countDown();

}

}).start();

}

countDownLatch.await();

System.out.println(System.currentTimeMillis() - start);

}

@Test

public void test() throws InterruptedException {

int X_NUM = 100;

int Y_NUM = 100000;

long start = System.currentTimeMillis();

for(int x=0;x < X_NUM;x++) {

for (int y = 0; y < Y_NUM; y++) {

logger.info("Info Message!");

}

}

System.out.print(System.currentTimeMillis() - start);

}

}

(2)logback:

public class logbackDemo {

Logger logger = LoggerFactory.getLogger(logbackDemo.class);

@Test

public void testThread() throws InterruptedException {

int THREAD_NUM = 100;

final int LOOP_NUM = 100000;

final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);

long start = System.currentTimeMillis();

for(int x= 0;x < THREAD_NUM;x++){

new Thread(new Runnable() {

public void run() {

for (int y = 0; y < LOOP_NUM; y++) {

logger.info("Info Message!");

}

countDownLatch.countDown();

}

}).start();

}

countDownLatch.await();

System.out.println(System.currentTimeMillis() - start);

}

@Test

public void test() {

int X_NUM = 100;

int Y_NUM = 100000;

long start = System.currentTimeMillis();

for(int x=0;x

for (int y = 0; y < Y_NUM; y++) {

logger.info("Info Message!");

}

}

System.out.print(System.currentTimeMillis()-start);

}

}

(3)log4j2:

public class log4j2Demo {

private Logger logger = LogManager.getLogger(log4j2Demo.class);

@Test

public void testThread() throws InterruptedException {

int THREAD_NUM = 100;

final int LOOP_NUM = 100000;

final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);

long start = System.currentTimeMillis();

for(int x= 0;x < THREAD_NUM;x++){

new Thread(new Runnable() {

public void run() {

for (int y = 0; y < LOOP_NUM; y++) {

logger.info("Info Message!");

}

countDownLatch.countDown();

}

}).start();

}

countDownLatch.await();

System.out.println(System.currentTimeMillis() - start);

}

@Test

public void test() throws InterruptedException {

int X_NUM = 100;

int Y_NUM = 100000;

long start = System.currentTimeMillis();

for(int x=0;x

for (int y = 0; y < Y_NUM; y++) {

logger.info("Info Message!");

}

}

System.out.print(System.currentTimeMillis() - start);

}

}

1.2 配置文件:

(1)log4j:

(2)logback:

e:/log.out

true

%d{HH:mm:ss.SSS} %p %c - %m%n

e:/log.out

true

false

8192

%d{HH:mm:ss.SSS} %p %c - %m%n

0

128

(3)log4j2:

<

%d{HH:mm:ss.SSS} %p %c - %m%n

immediateFlush="false" bufferedIO="true" bufferSize="8192">

%d{HH:mm:ss.SSS} %p %c - %m%n

1.3 结果比较(毫秒)

笔者从单线程、多线程2种情况下进行的测试!

无论是多线程还是单线程,在启用缓存的情况下,系统性能得到了巨大的提升;

在单线程情况下,相比较来说,启用异步Appender并没有对性能有较大的提升!

值得一提的是,在log4j2中,多线程情况下,相对于同步logger来说,异步logger并没有进一步提高系统的性能,两者不相上下;

但是,对于其他情况而言,异步logger还是有较大的提升!

单线程

(1)单线程,未开启缓存,立即刷出

log4j:29772、29959、30911

logback:25423、24552、26006

log4j2:37927、38240、40164

(2)单线程,开启缓存,不立即刷出

log4j:9858、9677、9665

logback:5561、5604、5611

log4j2:5782、5505、5499

(3)单线程,异步appender,未开启缓存,立即输出

log4j:29683、29929、29385

logback:33102、31779、30516

log4j2:39298、39562、41872

(4)单线程,异步appender,开启缓存,不立即输出

log4j:10110、10068、10177

logback:8753、9112、8922

log4j2:8692、8400、8252

多线程

(1)多线程,未开启缓存,立即刷出

log4j:38541、37791、38366

logback:35644、35463、35442

log4j2:38544、38746、38706

(2)多线程,开启缓存,不立即刷出

log4j:13296、12938、12686

logback:6547、6294、6576

log4j2:5596、5423、5421

(3)多线程,异步appender,未开启缓存,立即输出

log4j:30844、32088、30734

logback:44203、42191、43228

log4j2:46804、46034、46232

(4)多线程,异步appender,开启缓存,不立即输出

log4j:10422、10204、10495

logback:40249、40437、40173

log4j2:7832、8447、8660

(5)多线程,异步logger,未开启缓存,立即输出

log4j2:40555、40245、40325

(6)多线程,异步logger,开启缓存,不立即刷出

log4j2:5319、5407、5305

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备案域名绑定服务器后 提示需要备案_小程序开发需要多少钱?

现在越来越多的企业想通过微信小程序来宣传产品&#xff0c;为什么小程序那么火爆呢&#xff1f;奥晶科技为您解答&#xff0c;其优点不言而喻&#xff1a;1. 小程序建设的成本比APP建设成本低&#xff1b;2. 小程序能紧跟市场发展潮流&#xff0c;随时更新功能&#xff1b;3. …

Nacos配置安全最佳实践

简介&#xff1a; 本文讨论了自建Nacos和阿里云MSE的配置安全原理。并提出配置安全最佳实践。 作者&#xff1a;鲁严波 前言 配置管理作为软件开发中重要的一环&#xff0c;肩负着连接代码和环境的职责&#xff0c;能很好的分离开发人员和维护人员的关注点。 Nacos的配置管理…

云原生之上,亚马逊云科技发布多项容器与Serverless服务,持续发力现代化应用

亚马逊云科技持续发力现代化应用领域&#xff0c;在中国区域新推多项容器与Serverless服务及功能 在中国区域推出Amazon ECS Anywhere、Amazon Lambda容器镜像功能以及Amazon EMR on EKS等 2021年至今已发布近50个现代化应用领域全新服务与功能 编辑 | 宋 慧 出品 | CSDN云计…

2B 领域下低代码的探索之路

简介&#xff1a; 低代码将成为B端服务领域的基础设施&#xff0c;必将颠覆传统开发方式&#xff0c;未来可期。 作者&#xff1a;天晟 前言 大家好&#xff0c;我是钉钉宜搭前端一个小团队的负责人天晟&#xff0c;在阿里做了五年的低代码。今天的分享我们不讲技术细节&…

php全站文章搜索,翻出一篇老文章:php文本站内全文检索-PHP教程,PHP应用

/****************************************************原作者: uchinaboy修改&#xff1a;lingshidao特点&#xff1a;无需mysql支持&#xff1b;速度快&#xff1b;无需设置路径&#xff0c;放在哪级目录下&#xff0c;就搜索该目录和子目录&#xff1b;可以搜索一切文本类型…

启动延时缩短 50%-80%,函数计算发布镜像加速功能

简介&#xff1a; 容器镜像因其颠覆式创新成为云原生时代应用部署格式的事实标准。头部云厂商 FaaS (Function-as-a-Service) 服务如阿里云函数计算、AWS Lambda 也相继在 2020 年支持使用容器镜像部署函数&#xff0c;全面拥抱容器生态。 作者 | Shuai Chang 阿里云云原生 Se…

python字符串转化为数字-python 中判断字符串能否转换为数字类型

方法一: isdigit() 不可识别汉字 小数类型 str1 "1" str2 "2.1" str3 "三" str4 "3.3.3.3" print(str1.isdigit()) print(str2.isdigit()) print(str3.isdigit()) print(str4.isdigit()) 结果: True False False False 方法二: is…

易点云在京发布璇玑调度系统 中小企业办公IT升级步伐加快

中小企业是中国经济的基本细胞。数据显示&#xff0c;中小企业数量占我国企业总数的90%以上&#xff0c;对全国GDP的贡献达65%、税收贡献超过50%、解决了75%以上的城镇就业。 这些规模庞大的中小微企业的IT基础设施水平远远低于大型企业&#xff0c;“得过且过”是中国中小企业…

php explode txt,PHP explode():字符串转数组

PHP 使用 explode() 函数分割一个字符串&#xff0c;并将结果保存在一个数组中&#xff0c;其语法如下&#xff1a;array explode ( string $delimiter , string $str [, int $limit ] )参数说明&#xff1a;delimiter 表示分隔符&#xff0c;它是 str 的一个子串&#xff0c;可…

MaxCompute作业日常监控与运维实践

简介&#xff1a; MaxCompute作业日常监控与运维实践 监控项目作业超时运行 案例一 专用于业务团队取数的project_A &#xff0c;基本都是手动跑SQL查询&#xff0c;每个作业执行基本不会很长时间&#xff0c;由于目前使用的是包年包月计算资源&#xff0c;为了防止单个作业…

resttemplate post提交json_SEO工具脚本,Python百度普通收录API提交工具

百度收录问题一直是不少渣渣头痛的问题&#xff0c;而官方其实提供了普通收录和快速收录这样的接口&#xff0c;直接调用官方api接口&#xff0c;大力出奇迹&#xff0c;你需要相信&#xff0c;你尽管seo&#xff0c;有排名算我输&#xff0c;不收录&#xff0c;怎么会呢&#…

OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力

简介&#xff1a; OpenKruise 是阿里云开源的云原生应用自动化管理套件&#xff0c;也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目。它来自阿里巴巴多年来容器化、云原生的技术沉淀&#xff0c;是阿里内部生产环境大规模应用的基于 Kubernetes 之…

云原生时代,底层性能如何调优?

作者 | 宋慧出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;现在&#xff0c;当企业提及数字化转型&#xff0c;上云用云的话题时&#xff0c;言必谈及云原生。在云原生吞噬一切的口号下&#xff0c;云原生被频繁、高热度的讨论之后&#xff0c;其真正的价值…

linux ubuntu php,linux ubuntu安装php运行环境

1. 下载下载apache。http://httpd.apache.org/。因为我想安装2.2.9&#xff0c;去这里下载&#xff1a;http://archive.apache.org/dist/httpd/下载php。http://www.php.net/downloads.phpMysql。http://dev.mysql.com/downloads/mysql/5.1.html。可能是ubuntu 10.04没有安装rp…

4米乘以12米CAD图_孙吴镀锌钢管大棚骨架图片4-12米可定尺

孙吴镀锌钢管大棚骨架图片4-12米可定尺泽沃温室大棚管厂家是集生产销售为一体&#xff0c;生产经销大棚管、大棚钢管、热镀锌大棚管、大棚镀锌管、热镀锌带管。温室大棚产品广泛用于温室工程建设、大棚蔬菜基地建设、水果、水稻育秧、药材、种植、畜牧养殖等温室大棚骨架等行业…

Raft成员变更的工程实践

简介&#xff1a; 成员变更是一致性系统实现绕不开的难题&#xff0c;对于提升运维能力以及服务可用性都有很大的帮助。 本文从Raft成员变更理论出发&#xff0c;介绍了Raft成员变更和单步成员变更的问题&#xff0c;其中包括Raft著名的Bug。 对于Raft成员变更的工程实现上需要…

No.1-Apache IoTDB 随笔 - Time Series DBMS 综述

简介&#xff1a; 这是一篇无法一口气读完的、文字过万[正文字数14390]的长文&#xff0c;这是一个无法中途不上厕所就看完的、关于时序数据库的视频[时长111分钟]分享的文字整理.. 大家好&#xff0c;很开心能够和大家一起交流时序数据库的相关的内容 首先还是简单自我介绍一…

overflowhidden把内容遮住了怎么办_图片有水印怎么办?不用PS,有这4招就够了

大家好&#xff0c;我是热衷解决问题的秋小叶&#xff01;俗话说&#xff0c;文不如表&#xff0c;表不如图&#xff01;图片是我们在做 PPT 时经常会使用到的高频元素。阿文老师曾经说过&#xff1a;但是&#xff0c;在没有接触到正确的搜图方法前&#xff0c;我们往往会在搜索…

谷歌云试图抢占SAP软件云市场;企业上云迎来“黄金时代”;IBM和SAP帮助金融机构加快采用云技术……...

NEWS本周新闻回顾调查表明80%的企业在云计算方面超支云计算优化服务商Virtana公司委托研究机构Arlington Research公司对350位云计算决策者进行的这项研究发现&#xff0c;82%的受访者表示其所在的公司在云计算方面的支出远远超过他们的需要。Market Research Future&#xff1…

Java设计模式-桥接模式

目录 一、手机操作问题 二、传统方法 三、基本介绍 四、原理类图 五、使用桥接模式解决手机问题 一、手机操作问题 现在对不同手机类型的不同品牌实现操作编程( 比如 : 开机、关机、上网&#xff0c;打电话等) &#xff0c; 如图: 二、传统方法 传统方案解决手机操作问题分…