百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

网关性能优化(二) - log4j2异步模型提升服务性能

off999 2025-03-19 15:27 26 浏览 0 评论

一. 背景:

webgate (网关服务)作为中台的组件之一,也是web组件的入口, 那么webgate稳定性如何、性能如何既是平台所关注的,也是使用者所关心的。近日对webgate服务进行了性能和稳定性压测。在压测过程中发现关于log4j影响服务性能,并得以解决。


二.结论先行:


webgate在使用log4j2异步模型后,服务的性能由原来的 700QPS 提升到 1000QPS。提升性能42%。 所以lo4j2的异步性能是绝佳的。


看图说话:

通过webbench并发180,持续访问 100秒 压测通过网关来路由访问demoapp/greeting 接口。


webgate在使用log4j2 同步模型时的性能


webgate在使用log4j2 异步模型后的性能


服务器性能监控:CPU 使用率70% 堆内存 使用800M(分别做了2小时,12小时的压测 图是2小时的效果图 ,期间gc正常、无fullgc发生)


看了结论,大家应该会有疑问,是如何发现服务慢,又是如何定位到log4j导致服务慢的问题。OK我们慢慢道来。


三.过程:

首先说压测准备这个很重要


选择 网络、磁盘、CPU、内存 符合其服务压测的标准

  • 网络,在内网进行压测所以网络瓶颈可忽略
  • CPU 16核 内存 16G


2. 在网络 磁盘 CPU 内存满足服务的要求下,对于一个基于TCP协议传输的服务,系统内核参数的优化必不可少。

好在测试的同学提供的机器很给力(内核参数进行了优化,Tcp连接快速释放,端口数调大)


3. 服务部署图谱: 部署了一个网关实例(Tomcat), 部署了四个Demoapp服务实例 (本质是四个Nginx服务,避免因demoapp的性能影响网关压测)


4. tomcat[apache-tomcat-8.5.34] conf/server.xml优化:




5.Jvm设置: (这些参数设置有其关联性,需要根据具体的服务进行设置 感兴趣自行google)

-Xms4G -Xmx4G -Xmn800M -XX:PermSize=512M -XX:MaxPermSize=512M -XX:SurvivorRatio=8 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=3 -XX:+CMSScavengeBeforeRemark -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled



6.启动Jvisualvm监控工具:

连接网关服务,监控系统资源(线程、cpu、内存等,当然这些都可以通过jdk提供的java命令去查看,它的好处在于可视化)


接下来开始压测

开始压测,QPS 只有600+ ,加到并发量 会更慢 [zuul 官方数据上万qps、性能损耗有点大,怀疑有问题。Webgate是基于zuul1实现]。


1.查看系统资源:

发现CPU正常(排除死循环,或计算型导致慢) IO 正常 内存正常(无内存、栈溢出) 查看网卡流量(网络正常)


2.查看fullGc:无fullGc产生


3.排除外部依赖原因:直接压测demoapp nginx提供的demoapp服务单机性能在7000qps


猜测:那可能是webgate中的服务阻塞、等待了。(这里可以通过jstack看堆栈信息,关注线程状态为BLOCKED、TIMED_WAITING的线程)


期间把webgate怀疑的损耗性能的方法进行了日志统一打印:发现并发大的时候各个环节耗时均有增长。数据结构如图:



4.利用可视化工具Jvisualvm 查看的 CPU快照信息,发现问题。



看第一行,org.apache.logging.log4j…….. 是不是很亲切 它花的CPU时间Number One。

疑问:日志打印耗时最长,这个不太正常


再看第二行
java.util.concurrent.LinkedBlockingQueue.poll() 队列轮询方法,它花的CPU时间 Number Two
(后边会介绍)


咱们先看log4j继续跟进 通过反向跟踪 ,看是哪些方法调用了:



均是服务正常调用,然后调用打印了日志。


疑问:我们使用的是Log4j2,为什么log还会耗时最长呢?


看官方数据:


1. Log4j2 在log界号称性能第一,我们来看官方性能报告:


2.再看 sync vs aysnc logger



3.看完第二个图似乎有了答案。(来确认下我们服务使用的Log4j2的模式 – Log4j2-sync)


[有些事知道,跟去实践完全是两回事]

只知道log4j2号称性能第一,不知道它通过异步实现了高性能;只知道异步实现了高性能,殊不知它有两个模块asynclogger 和 asyncappender两个部分都实现了异步化,且可以灵活 的分模块异步和全异步。 更重要的是asynclogger异步方式 和asyncappender 异步方式不一样。Asynclogger使用的是LMAX Disruptor技术进行异步化,asyncappender 使用的是Java的ArrayBlockingQueue进行异步化。

扯远了,回正题。


4.查阅了log4j2的官方文档(一定要官方的)

https://logging.apache.org/log4j/2.x/manual/async.html


文中对异步log4j介绍的很详细 异步的几种方式的使用,性能,使用权衡(优缺点)这个需要仔细读


按照官方的介绍,在webgate上进行了实践。

Log4j2:loggers all async 全异步化后,进行压测,看图说话:


跃居第一位的是什么?

是不是很熟悉
java.util.concurrent.LinkedBlockingQueue.poll()
log异步化前压测时的Number Two。

原来的org.apache.logging.log4j… 不见了

说明一个问题:耗时最长的不是log4j2了,说明log4j2异步优化生效了。原来的Number Two 跃升为第一位 在期望中。

接下来我们看:
java.util.concurrent.LinkedBlockingQueue.poll()的方法调用链,看图说话:



Tomcat的线程池 请求轮询。[连接数是不是开的少了,线下证实了这个想法是正确的]

我们再看此时耗时第二位:


java.util.concurrent.locks.ReentrantLock.lock() – 重入锁

追踪其方法的调用链,看图说话:



这里分两部分看:

第一部分 com.lmax.disruptor.. 是什么? Log4j2 异步使用的框架[日志打印的是不是多?] 追踪方法调用链


初步结论:所有日志打印均是路由的核心类日志打印,应该是日志打印的多导致的,暂没有证实。[鉴权、限流、熔断、负载均衡、http转发]


第二部分 org.apache.http.pool.. 是什么? http连接池[webgate的核心http请求转发,情理之中?]

初步结论:跟综进去 发现是zuul路由,正常。

之前关于连接池的使用在这里踩过坑 ,那是 网关性能优化(一) – http连接池优化提升服务性能^_^


四.最后小结下

1、服务优化涉及方方面面,这里只是冰山一角,以此篇献给大家。重要的是思路不是结果。性能优化最重要的是发现问题,定位问题,关于解决方案可以有一大堆。

2、关于log4j2使用的几点建议:

1)log4j2的全异步模型性能在log界Number One。

2)使用了log4j2异步,日志中一定要有全链路唯一ID 主要是能把一次请求串起来。要不然异步后,根本没法根据日志去定位问题

3)没有最好的,只有最合适的。Log4j2 对服务来说亦是。可根据服务的业务选择最合适的。详细参考官方 log4j2使用权衡(优缺点)

相关推荐

win10取消电脑开机密码(win10如何取消电脑开机密码取消)

取消Windows10开机密码的方法如下:1.在Windows10桌面上,按下WIN+R组合键,打开运行窗口。2.输入"netplwiz"然后按下回车键,这...

微信记录恢复助手(微信记录恢复助手安全吗)
  • 微信记录恢复助手(微信记录恢复助手安全吗)
  • 微信记录恢复助手(微信记录恢复助手安全吗)
  • 微信记录恢复助手(微信记录恢复助手安全吗)
  • 微信记录恢复助手(微信记录恢复助手安全吗)
五笔打字怎么打(曹五笔打字怎么打)

操作步骤:1、按住Ctrl+空格键切换到五笔输入法;2、在输入面板上面单击右键选择“软键盘”——特殊符号;3、在打开的软键盘上单击“☆”即可。五笔打字是指采用五笔字型输入法向电脑中输入汉字。这种输入...

内存不能为written修复工具(一直出现内存不能为written)
  • 内存不能为written修复工具(一直出现内存不能为written)
  • 内存不能为written修复工具(一直出现内存不能为written)
  • 内存不能为written修复工具(一直出现内存不能为written)
  • 内存不能为written修复工具(一直出现内存不能为written)
电脑高手24在线咨询(电脑高手联系方式)

现在的电脑一般都不要重启键了。如果死机的话,按住开关键五秒,自动关机。再开机就行。至于他们说的快速关机CTRL+ALT+ENT快速重启CTRL+ALT+HOME是GOHST版安装后自带的快捷键,你的系...

你的电脑未正确启动自动修复

1、试试“禁止驱动强制签名”能不能进入桌面在“疑难解答”->“高级选项”->“启动模式”中选择“禁止驱动强制签名”,如果这样能正常开启,那么就说明是某个驱动的问题2、把错误驱动删掉如果你安...

电脑开机弹出系统恢复选项(电脑开机经常出现系统恢复界面)

  这种情况一般都是系统引导出现问题,可以【F8】选择【最后一次正确配置】,重启后一般都能恢复;如果不行可以选择进入【安全模式】【恢复我的计算机到一个较早的时间】。以下是详细介绍:  1、开机时多次点...

手机版电脑模拟器下载(手机电脑模拟器下载的文件在哪)
手机版电脑模拟器下载(手机电脑模拟器下载的文件在哪)

  玩家们想要在电脑上畅快地玩真实手机,首先就需要先下载它的电脑版模拟器啦。在这里推荐大家使用的是电脑安卓模拟器,这是一款十分流畅好用的真实手机安卓模拟器,性能强悍,功能完备。  1、下载完真实手机安卓模拟器。  2、在电脑上进行安装,双击...

2026-01-01 16:03 off999

下载计算机到手机(手机下载计算机怎么下载)
  • 下载计算机到手机(手机下载计算机怎么下载)
  • 下载计算机到手机(手机下载计算机怎么下载)
  • 下载计算机到手机(手机下载计算机怎么下载)
  • 下载计算机到手机(手机下载计算机怎么下载)
u盘启动不了怎么回事(u盘启动也启动不了)

原因三:USB传输性能不佳导致;解决三:换个USB插口试试,建议将u盘插入到电脑机箱后置的USB插口处。原因四:u盘自身的质量问题导致;解决四:换一个u盘制作试一试。原因五:电脑系统问题导致;解决五:...

联想笔记本电脑键盘输入没反应

1.首先在可以进行输入的位置,长按下某个按键1秒以上,看看有没有反应。有反应看第2,没反应看第3。2.控制面板~轻松使用~轻松使用设置中心~更改键盘的工作方式~取消筛选键并应用即可。3.打开设备管理器...

软件管家电脑版下载官网(软件管家电脑版下载官网安装)

要下载和安装应用程序,您可以按照以下步骤使用电脑管家:1.打开电脑管家应用程序。2.在主界面上,您可以找到一个名为“应用中心”的选项,点击它。3.在应用中心中,您可以浏览各种应用程序的列表。您可...

台式电脑怎么取消定时关机(台式电脑设置自动关机怎么取消)

电脑设置了每天定时关机,取消的方法有多种,以下提供三种方式:方法一:打开任务计划程序(TaskScheduler)。找到“任务计划程序库”(TaskSchedulerLibrary),找到设置的...

win7怎么截屏快捷键(win7怎样截屏快捷键)

在Win7系统中,自带的截图快捷键是“PrtScn”键,即PrintScreen键。按下这个键后,系统会将当前屏幕的内容复制到剪贴板中,然后用户可以将其粘贴到其他应用程序中进行编辑或保存。此外,Wi...

如何查看笔记本配置(如何查看笔记本配置高低)

两种方法一种你在笔记本背面有个ID号,也就是序列号,你把它抄下来,输到笔记本品牌的官网上,查看他的配置就可以,这是第1种方法,第2种方法,你开机后,我的电脑上单击右键,点属性,就会在出来你的CPU内存...

取消回复欢迎 发表评论: