引言:
“为啥我的程序卡住了,它在做啥?”
“磁盘卡死了,啥程序占用的?”
“该不该换成ssd?”
我们常遇到各种性能问题, 该如何定位问题,解决问题。
本文主要介绍系统性能的度量指标,分析思路,及相关工具集。
目录:
•系统性能指标和观测方法
•常用命令及平台-分析系统负载
•动态追踪-了解程序在做什么
•实战案例
性能问题是充满挑战的:
性能是主观的
磁盘平均io响应时间是10ms, 好或坏?
取决于业务需求及程序热点
系统是复杂的
子系统相互关联,甚至有连锁故障
运行环境不一(硬件/软件)
可能多问题并存
量化数据
控制变量法
观测视角
资源分析(自下而上)
从系统的资源指标开始
更通用,适合资源被打满的情况
![ee3a7bc7145f8755cdca62a39025ea95.png](https://i-blog.csdnimg.cn/blog_migrate/4eb1bec49d58f297cab36dd7cc970c80.jpeg)
工作负载分析(自上而下)
从应用的metrics和stack开始
贴近代码逻辑,适合并发锁问题
系统资源有哪些
硬件资源
•CPU
•内存
•磁盘
•网络
软件资源
•软件锁
•线程池/连接池
![cce66c1cb336d95752ec0180f9d7dd45.png](https://i-blog.csdnimg.cn/blog_migrate/27c7f03258fe79f4a91d324df699ddf9.jpeg)
观测方法-USE方法
![8eb3201e90beb3976c2dae93a6a55e67.png](https://i-blog.csdnimg.cn/blog_migrate/3d0617034d08ae115facc649b1dd86fc.jpeg)
使用率( Utilization )
设备繁忙程度
工作时间/观测时间
饱和度( Saturation )
队列长度,排队时间
超出设备处理能力的程度
错误率( Errors )
设备出错率
分析方法:
问题
为什么A主机到B主机网络延迟很大?(事实:A和B在不同机架)
假设
A和B机架的交换机有故障
预测
A/B机架内互联通畅,A到另一机架的主机C通畅,A/B各机架各换一台机器互联延迟
实验
分别测试以上场景
分析
结果与预测相同,说明问题出在A和B的交换机有故障
常用命令及平台-分析系统负载
![821e5bb4cf0b9dc50d880ec1b3af9bc2.png](https://i-blog.csdnimg.cn/blog_migrate/ca49dd7987f7ea9a97da6424f92a389c.jpeg)
![86df84f21aff26aea22c24f28345fba2.png](https://i-blog.csdnimg.cn/blog_migrate/0b18e5f2f234ca10ab590e8a4242861b.jpeg)
![aebd2b15e679cf0225429959aa71bff2.png](https://i-blog.csdnimg.cn/blog_migrate/2c11935f81661729ae00a03412d9dbeb.jpeg)
![f6ce607cce794c454d663e650638a870.png](https://i-blog.csdnimg.cn/blog_migrate/eee9d4049384d099db83a14d1220d542.jpeg)
![5dd7a08288ec2c02987bbbbb5f34fdc0.png](https://i-blog.csdnimg.cn/blog_migrate/ed6d527270dd388b4f5ada7e1b36a613.jpeg)
动态追踪-了解程序在做什么
动态追踪定义
无需修改程序源代码,活体分析
可实时跟踪程序状态,用于统计及分析
可以动态注入探针
本章主要介绍通用工具,及java相关工具
![66183af4b90a7d803717b20cffd0f724.png](https://i-blog.csdnimg.cn/blog_migrate/280df43baa093341c9a5ae516bb8fe96.jpeg)
![e52e19f6f69d3dcf5f03398685fdcd13.png](https://i-blog.csdnimg.cn/blog_migrate/190676d889c06c15c9527c5c511793d2.jpeg)
![eb397b980b45b3db697a399a78fadb2c.png](https://i-blog.csdnimg.cn/blog_migrate/dcbd71942ecb0f6fb575c73c9d7904a2.jpeg)
![534f8bf0e95e3dd32a80625422540b46.png](https://i-blog.csdnimg.cn/blog_migrate/2a1b2582402325d9106b22760899ea7f.jpeg)
![a5fd52a575ce9fc06219238f38d65ff5.png](https://i-blog.csdnimg.cn/blog_migrate/1e60f3620e830514ec68dd893d31f28f.jpeg)
![6af027b9b6036b8490e93bf7b05f164a.png](https://i-blog.csdnimg.cn/blog_migrate/33d95119940c2284a24ab71a549849a1.jpeg)
![e287826114b73513147f5b901b67bceb.png](https://i-blog.csdnimg.cn/blog_migrate/1cae4a59dced71c5967e7f23a752f338.jpeg)
![6b26a6b8d40a22b5374060c6dadc7597.png](https://i-blog.csdnimg.cn/blog_migrate/6208b31b598f0927d6b6b7167d681336.jpeg)
![7452f90abc31115fd4dc92665cd72836.png](https://i-blog.csdnimg.cn/blog_migrate/984d698d807bceaac1fb87b52de084fd.jpeg)
实战案例:
某查询服务日志锁问题
1.问题:
某查询服务上线新版后,查询时间从0.1s,变成几十秒,严重影响线上查询
2.排查:
依赖的底层存储hbase响应正常
机器的cpu,mem等参数均正常(可能是软件资源锁问题,着重排查)
本次上线代码主要加日志,回滚版本后正常(代码某处导致)
3.试验:
部署一台新版代码的服务,并引线上流量
使用jstack分析
![b8be8de8bb7298c0709ca84b9999ccad.png](https://i-blog.csdnimg.cn/blog_migrate/a47d56afa8e1fa915777faa6475320c7.jpeg)
![fe9c20492af224b13c7c77cae7bb1fdc.png](https://i-blog.csdnimg.cn/blog_migrate/789789fd7d0c5e40a53c194a5f009ef8.jpeg)
Kylin服务cpu占用过大问题
1.问题:
kylin是一个开源分析服务,试用发现并发在几十就上不去
2.排查:
cpu在查询时占用很高,2000%,均是user态(代码本身导致)
jstack分析(逻辑较为复杂,肉眼较难分辨)
3.试验:
使用火焰图采样,查找代码热点
4.措施
修改加密验证方式为md5
性能提升5倍
修改前后的火焰图如下:
![730876bb25c27719776bf4ef716f756a.png](https://i-blog.csdnimg.cn/blog_migrate/2b971788facef8625b057b84d778a36b.png)
![a2141945b804412ba7e6d81ad04b880d.png](https://i-blog.csdnimg.cn/blog_migrate/170ede9414b2c4d5302fc109be73355d.png)
Cache对hbase的影响1.疑惑:
hbase压测时经常宕掉,在将机器内存从64G升级128G非常稳定
2.排查/猜想:
hbase进程内存设置为50G,升级内存后也未调整
hbase本身堆使用率不高
多增加的内存会被OS用来做文件缓存(应该会大幅提升命中率)
相关资料提示hbase为IO敏感型,缓存命中率与稳定性有啥关系
3.试验:
借助systemtap统计cache命中率
![2f3ac4c7b5036655bc3f845ed5aa0664.png](https://i-blog.csdnimg.cn/blog_migrate/add259a8532cfe21e24b506a8a5649db.jpeg)
推荐资料
![f8f76799402c66d267400c3a0fbd47e7.png](https://i-blog.csdnimg.cn/blog_migrate/cb467150fe61b181262225ecf86755b9.jpeg)
Brendan Gregg:
原SUN公司首席性能和内核专家
Solaris,dtrace等系统
Netflix首席架构师
http://www.brendangregg.com
章亦春:
OpenResty(nginx高性能模块)开源项目创始人
阿里技术专家