如何用BIP分析项目中的问题

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: BIP

1.总体统计网络调用的应用负载是否过大
netstat -tuanlp | grep pid
image.png

如果接收队列数较大,说明本应用负载过大, 需要优化处理速度或扩容;
如果发送队列数较大,说明对端应用负载过大。
使用网络状态跟踪方法,可以分析出应用、中间件、数据库等的各类 TCP 调用的负载情况。

2.线程栈分析
通过命令: jstack -l pid 分析, 可以看出线上的应用阻塞或死锁的代码位置,然后针对性的进行优化。
如果发现大量线程阻塞, 会导致线程池满而无法生成新的线程,此时可调整线程池大小。
通常表现在单个请求时本来应用响应缓慢, 当请求人数较多时,很多时候会出现请求超时异常(客户端设置的超时 等待时间已经超过了服务的响应时间),这种情况如果程序不便于做优化,通常需要调整线程池大小,同时部署实例数 相应增加。
查看 tomcat 工作线程数:jstack pid | grep exec

image.png

3.GC分析
image.png

FGC 一列如果数值较大 (通常超过 10 以上) ,通常都是因为内存不足, 引起了 FULL GC。
S0C 和S1C:幸存区容量
S0U 和 S1U:幸存区已使用量
EC 和 EU:伊甸区容量和使用量
OC 和 OU:老年代容量和使用量
FGC:full GC 的次数
FGCT:full GC 耗费时间 (单位:秒)
以上几个是比较重要的指标, 通常 EU 接近 EC 时(即-gcutil 中, E 接近 100 时),说明伊甸区太小,容易导致 YGC; OU 接近 OC 时(即-gcutil 中, O 接近 100 时),说明老年代太小,容易导致 FGC。以上两种情况, 通常都是需要增加 JVM 内存大小(Xmx)的。

4.访问日志分析

image.png

image.png

从以上能看出来服务请求路径、响应状态码、服务耗时 、响应的数据量等,如果客户端慢则可以根据这些信息分 析是服务响应慢还是网络慢,或者数据量大造成的传输耗时长。
实时过滤耗时大于 1 秒的请求:
tail -fn 1000 localhost_access_log.2020 -08-28.txt| awk -F ' ' '{if($16>1000)print $0}'

有些 spring boot 应用使用 JAR 包的方式启动的应用,其访问日志的位置可以查看其 properties 配置文件: #内嵌 tomcat 日志
logging.path=/data/logs/app
server.tomcat.accesslog.buffered=true
server.tomcat.accesslog.directory=${logging.path}
server.tomcat.accesslog.enabled=true

每天保存一个

server.tomcat.accesslog.file-date-format=yyyy-MM-dd
server.tomcat.accesslog.pattern=%h %l %D %t %r %s %b %{Referer}i %{User -Agent}i
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.rename -on-rotate=false
server.tomcat.accesslog.request -attributes -enabled=false
server.tomcat.accesslog.rotate=true
server.tomcat.accesslog.suffix=.log
从以上得知其访问日志的位置为/data/logs/app

以上的配置, 实时查看耗时大于 1 秒的请求:
tail -fn 10000 /data/logs/app/access_log2021-01-08.log | awk -F ' ' '{if($3>1000)print $0}'

5.OOM分析
1.设置内存参数:
如果应用的内存设置如下:

image.png

则,设置 JVM 内存参数如下:
-Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/
( -Xmx 不能超过应用内存最大值,否则 jvm OOM 时,容器会被 croup oomkiller 杀掉,而导致无法进行dump)

image.png

模拟 OOM 场景:测试地址:
http://iuap-boot-train.dev.app.yyuap.com/test

image.png

JVM OOM 时,会自动 dump 出 heap 文件到/tmp/目录下。
将 dump 文件从容器中拷到宿主机,再拷到本地机器。

2.堆文件分析:
使用 JDK 自带工具 jvisualvm 进行分析。
image.png

image.png

从以上概要信息可以看出导致 OOM 的线程,点击可以显示线程栈详情
image.png

以上可以看出导致 OOM 的类和方法,以及本地变量,点击本地变量,并点击计算保留大小:

image.png

此时,可以看出来每个对象占用的内存大小,空间占用比较大的通常就是内存溢出的原因。

6.监控分析
1.资源池主机总资源分配和剩余量,主要涉及 CPU、Memory、磁盘分区的使用率指标。

image.png

2.单台资源池主机的监控资源
点击资源池工具箱中---> 查看监控页面

image.png

可在选择主机的选择框中选择对应的主机,查看单台主机的资源分配,主要指标有 CPU 总数和负载、内存的总量和使用率、根分区和磁盘分区的总使用量、tcp 连接数、以及网卡的流入流出带宽。

image.png

3.容器资源监控
对于容器的资源监控,我们可以在应用管理中的“监控与报警”页面查看

image.png

在容器监控面板中, 我们应常关注的资源为CPU 和内存在范围时间内的负载情况, 在cpu 方面需要关注资源的峰值是否有到达100%的情况,内存方面需要关注峰值是否达到分配的最大内存资源中。

image.png

4.中间件资源监控
对于技术中台自身的中间件,我们可以通过admin/admin123 账户登陆运维后台页面,在监控管理中查看对应中间件的监控指标:
例如 mysql 中的已启动时间、QPS(每秒查询率) 指标、InnoDB 的缓冲池大小等。

image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
安全
dapp公排矩阵互助模式系统开发指南步骤/详细需求/功能设计/源码案例
The development of a public matrix mutual aid crowdfunding model system for DApp (decentralized application) involves the application of blockchain technology and smart contracts. The following are the main steps and requirements for development:
|
8月前
|
人工智能 监控 数据可视化
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】
103 0
WRF模式案例运行初体验--飓风示例全过程记录
本文主要记录一下首次学习WRF并运行官网案例的全过程。
WRF模式案例运行初体验--飓风示例全过程记录
|
5月前
|
数据采集 数据可视化 数据挖掘
【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】
【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】
|
5月前
|
存储 供应链 数据可视化
【python】python 大型商超会员数据研究分析可视化 (源码+数据集+论文)【独一无二】
【python】python 大型商超会员数据研究分析可视化 (源码+数据集+论文)【独一无二】
|
5月前
|
数据采集 JSON 数据可视化
基于Python的51job招聘数据采集与可视化项目实践
本文介绍了一个基于Python的51job招聘数据采集与可视化项目,该项目通过自动化手段获取大量招聘信息,并运用数据分析和可视化工具对就业市场进行深度分析,旨在为求职者和企业提供数据支持和决策依据。
281 5
|
数据采集 数据可视化 数据挖掘
Python实战项目——物流行业数据分析(二)
Python实战项目——物流行业数据分析(二)
422 0
|
机器学习/深度学习 算法 数据可视化
微生物组(16S rRNA)数据分析套件PMS尝鲜
前几日宏基因组公号上推送了《iMeta:青岛大学苏晓泉组开发跨平台可交互的微生物组分析套件PMS》一文,但软件中示例文件貌似是单端数据,于是想着拿手里一批已发表过的双端测序16S数据集尝试一番。
217 0
|
JavaScript 程序员 编译器
0基础必读!用Python的视角快速理解【组装式开发】
拒绝高大上,这应该是你听过关于【组装式开发】最接地气的解释!
289 1
0基础必读!用Python的视角快速理解【组装式开发】
|
编解码 Shell Linux
使用GFS数据驱动WRF模式场--2层嵌套 全过程学习记录
使用GFS数据驱动WRF模式场--2层嵌套 全过程学习记录
使用GFS数据驱动WRF模式场--2层嵌套 全过程学习记录

热门文章

最新文章