应用系统瓶颈排查和分析的思考-Arthas 实战

本文通过 Arthas 实战分析了一次业务应用系统的性能瓶颈,发现应用存在 CPU 负载过高、线程过多、磁盘 IO 使用异常等问题。在监控中观察到应用中有大量阻塞线程与 Log4j 的日志打印有关,可能成为性能瓶颈。文章探讨了如何根据应用资源使用情况评估和调整参数,以优化系统性能和资源利用。
摘要由CSDN通过智能技术生成

背景

业务应用系统接入流程引擎来处理业务应用的流程执行,流程引擎提供多线程高性能异步化来执行流程元素的执行,但是如何设置流程引擎的线程池线程数执行,以及执行线程数和任务数,应用机器资源使用情况之间的关系如何,目前只能通过接入方的人工经验评估,比较粗泛评估,参数的合理性也很难直观的评估,现通过现有的应用系统默认的参数配置进行问题说明。

性能监控

查看 CPU 核数

应用机器的配置是 2 核 CPU 配置:

1.png

查看应用机器的负载情况

应用程序的近 15 分钟内的负载严重的超载(平均超出 CPU 执行的 10 倍之多),应用程序对应的 CPU 和 MEM 的利用率都很高,按照本次单机模拟线上的流量(QPS:10) 不至于出现如此的负载情况吧。

2.png

查看应用机器的综合统计

CPU 运行队列中也严重的堵筛(Procs列中指标),应用的 CPU 有效利用率其实并不算太高(US+SY),但是系统出现了严重的 CS(上下文切换),配合 BI,BO 执行,也间接反馈出一些端倪,具体反馈到应用程序中,还需要进一步分析。

3.png

查看应用服务(PID=512)的进程 CPU 执行情况

4.png

5.png

6.png

查看应用机器的磁盘 IO 使用情况

7.png

8.png

应用系统的线程统计概要

应用系统中居然有如此多的线程(1285),应用系统接入流程 SDK 中的线程池数据设置也不会超过80个线程,为何有如何大的偏差,考虑到应用系统中还存在 RPC,kafka 等相关的技术栈,对于应用系统的线程分布还需要进一步的分析。

9.png

应用系统执行 dashboard

10.png

GC 回收线程监控统计

11.png

应用系统线程执行栈的统计

12.png

13.png

14.png

阻塞线程 ThreadDump 信息

15.png

org.apache.log4j.spi.RootLogger is blocking 379 threads.

Pigeon-Server-Request-Processor-46-thread-318
Stack Trace is:
java.lang.Thread.State: RUNNABLE
at java.lang.Throwable.printStackTrace(Throwable.java:665)

  • locked <0x000000075332fde8> (a java.io.PrintWriter)
  1. java.lang.Throwable.printStackTrace(Throwable.java:721)

at org.apache.log4j.DefaultThrowableRenderer.render(DefaultThrowableRenderer.java:60)
at org.apache.log4j.spi.ThrowableInformation.getThrowableStrRep(ThrowableInformation.java:87)

  • locked <0x000000074ae96550> (a org.apache.log4j.spi.ThrowableInformation)
  1. org.apache.log4j.spi.LoggingEvent.getThrowableStrRep(LoggingEvent.java:413)

at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:313)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at com.dianping.combiz.misc.ExtendedConsoleAppender.append(ExtendedConsoleAppender.java:82)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)

  • eliminated <0x000000075f880030> (a com.dianping.combiz.misc.ExtendedConsoleAppender)
  1. com.dianping.combiz.misc.ExtendedConsoleAppender.doAppend(ExtendedConsoleAppender.java:75)
  • locked <0x000000075f880030> (a com.dianping.combiz.misc.ExtendedConsoleAppender)
  1. org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)

at org.apache.log4j.Category.callAppenders(Category.java:206)
- locked <0x000000075ed2bd58> (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.error(Log4jLoggerAdapter.java:576)
at com.meituan.mafka.client.producer.Def

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值