linux性能分析工具_Linux性能优化的工具集和方法论

引言:

“为啥我的程序卡住了,它在做啥?”

“磁盘卡死了,啥程序占用的?”

“该不该换成ssd?”

我们常遇到各种性能问题, 该如何定位问题,解决问题。

本文主要介绍系统性能的度量指标,分析思路,及相关工具集。

目录:

•系统性能指标和观测方法

•常用命令及平台-分析系统负载

•动态追踪-了解程序在做什么

•实战案例

性能问题是充满挑战的:

性能是主观的

磁盘平均io响应时间是10ms, 好或坏?

取决于业务需求及程序热点

系统是复杂的

子系统相互关联,甚至有连锁故障

运行环境不一(硬件/软件)

可能多问题并存

量化数据

控制变量法

观测视角

资源分析(自下而上)

从系统的资源指标开始

更通用,适合资源被打满的情况

ee3a7bc7145f8755cdca62a39025ea95.png

工作负载分析(自上而下)

从应用的metrics和stack开始

贴近代码逻辑,适合并发锁问题

系统资源有哪些

硬件资源

•CPU

•内存

•磁盘

•网络

软件资源

•软件锁

•线程池/连接池

cce66c1cb336d95752ec0180f9d7dd45.png

观测方法-USE方法

8eb3201e90beb3976c2dae93a6a55e67.png

使用率( Utilization )

设备繁忙程度

工作时间/观测时间

饱和度( Saturation )

队列长度,排队时间

超出设备处理能力的程度

错误率( Errors )

设备出错率

分析方法:

问题

为什么A主机到B主机网络延迟很大?(事实:A和B在不同机架)

假设

A和B机架的交换机有故障

预测

A/B机架内互联通畅,A到另一机架的主机C通畅,A/B各机架各换一台机器互联延迟

实验

分别测试以上场景

分析

结果与预测相同,说明问题出在A和B的交换机有故障

常用命令及平台-分析系统负载

821e5bb4cf0b9dc50d880ec1b3af9bc2.png

86df84f21aff26aea22c24f28345fba2.png

aebd2b15e679cf0225429959aa71bff2.png

f6ce607cce794c454d663e650638a870.png

5dd7a08288ec2c02987bbbbb5f34fdc0.png

动态追踪-了解程序在做什么

动态追踪定义

无需修改程序源代码,活体分析

可实时跟踪程序状态,用于统计及分析

可以动态注入探针

本章主要介绍通用工具,及java相关工具

66183af4b90a7d803717b20cffd0f724.png

e52e19f6f69d3dcf5f03398685fdcd13.png

eb397b980b45b3db697a399a78fadb2c.png

534f8bf0e95e3dd32a80625422540b46.png

a5fd52a575ce9fc06219238f38d65ff5.png

6af027b9b6036b8490e93bf7b05f164a.png

e287826114b73513147f5b901b67bceb.png

6b26a6b8d40a22b5374060c6dadc7597.png

7452f90abc31115fd4dc92665cd72836.png

实战案例:

某查询服务日志锁问题

1.问题:

某查询服务上线新版后,查询时间从0.1s,变成几十秒,严重影响线上查询

2.排查:

依赖的底层存储hbase响应正常

机器的cpu,mem等参数均正常(可能是软件资源锁问题,着重排查)

本次上线代码主要加日志,回滚版本后正常(代码某处导致)

3.试验:

部署一台新版代码的服务,并引线上流量

使用jstack分析

b8be8de8bb7298c0709ca84b9999ccad.png

fe9c20492af224b13c7c77cae7bb1fdc.png

Kylin服务cpu占用过大问题

1.问题:

kylin是一个开源分析服务,试用发现并发在几十就上不去

2.排查:

cpu在查询时占用很高,2000%,均是user态(代码本身导致)

jstack分析(逻辑较为复杂,肉眼较难分辨)

3.试验:

使用火焰图采样,查找代码热点

4.措施

修改加密验证方式为md5

性能提升5倍

修改前后的火焰图如下:

730876bb25c27719776bf4ef716f756a.png

a2141945b804412ba7e6d81ad04b880d.png

Cache对hbase的影响1.疑惑:

hbase压测时经常宕掉,在将机器内存从64G升级128G非常稳定

2.排查/猜想:

hbase进程内存设置为50G,升级内存后也未调整

hbase本身堆使用率不高

多增加的内存会被OS用来做文件缓存(应该会大幅提升命中率)

相关资料提示hbase为IO敏感型,缓存命中率与稳定性有啥关系

3.试验:

借助systemtap统计cache命中率

2f3ac4c7b5036655bc3f845ed5aa0664.png

推荐资料

f8f76799402c66d267400c3a0fbd47e7.png

Brendan Gregg:

原SUN公司首席性能和内核专家

Solaris,dtrace等系统

Netflix首席架构师

http://www.brendangregg.com

章亦春:

OpenResty(nginx高性能模块)开源项目创始人

阿里技术专家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值