时间的车轮已经滚过了2017,本来是计划年底12月份结束之前将过去一年的工作和学习总结下,无奈一直托更,看来拖延症还是没有改善;趁着2018年到来之时,月初留空,就将这件事情落实下。
其实2017年大概就是折腾以下三件事情:
一、以性能为相关的工作,这占用这一年的大部分时间,包括性能测试,性能分析和性能调优。
1、性能测试:这没什么好说的,大都是重复的执行,先根据测试需求将测试场景设计好,然后重复执行,找到问题就需要记录,然后重新执行验证,挺枯燥的。
2、性能分析:性能分析的关键在于数据的收集,没有数据收集何来分析呢,大数据分析也是这套路;数据收集又在于监控,针对不同的运行环境部署相应的监控配置;待数据收集完毕后,按预期的数据需求来分析数据,服务器的性能分析基本都是看CPU,内存,磁盘和IO,网络和IO等这些数据。大多数服务器又分为应用,中间件,数据库,让服务器专心干一种事情。
CPU分析
在观察CPU性能的时候,按照负载特征归纳的方法,可以检查如下清单:
* 整个系统范围内的CPU负载如何,CPU使用率如何,单个CPU的使用率呢?
* CPU负载的并发程度如何?是单线程吗?有多少线程?
* 哪个应用程序在使用CPU,使用了多少?
* 哪个内核线程在使用CPU,使用了多少?
* 中断的CPU用量有多少?
* 用户空间和内核空间使用CPU的调用路径是什么样的?
* 遇到了什么类型的停滞周期?
这里列举了一些系统性能分析工具,调用路径和停滞周期的分析可以使用perf工具,dstat工具也比较常用,也可以使用DTrace等更灵活的工具。
工具 |
描述 |
uptime | 平均负载 |
vmstat | 包括系统范围的CPU平均负载 |
top | 监控每个进程/线程CPU用量 |
pidstat | 每个进程/线程CPU用量分解 |
ps | 进程状态 |
perf | CPU剖析和跟踪,性能计数器分析 |
更强大的工具可以使用火焰图,火焰图可以帮助分析CPU的调用路径。
内存分析
内存问题检查清单:
* 系统范围内的物理内存和虚拟内存使用率
* 换页、交换、oom的情况
* 内核和文件系统缓存的使用情况
* 进程的内存用于何处
* 进程为何分配内存
* 内核为何分配内存
* 哪些进程在持续地交换
* 进程或者内存是否存在内存泄漏?
内存的分析工具如下:
工具 | 描述 |
free | 缓存容量统计信息 |
vmstat | 虚拟内存统计信息 |
top | 监视每个进程的内存使用情况 |
ps | 进程状态 |
Dtrace | 分配跟踪 |
对于磁盘IO,可以列出如下等问题来帮助我们分析性能问题:
* 每块磁盘的使用率是多少?
* 每块磁盘上有多长等待队列?
* 平均服务时间和等待时间时多少?
* 是哪个应用程序或者用户正在使用磁盘?
* 应用程序读写的方式是怎样的?
* 为什么会发起磁盘IO,内核调用路径是什么样的?
* 磁盘上的读写比是多少?
* 随机IO还是顺序IO?
Linux对磁盘的性能分析工具主要如下:
工具 | 描述 |
iostat | 各种单个磁盘统计信息 |
iotop、pidstat | 按进程列出磁盘IO的使用情况 |
perf、Dtrace | 跟踪工具 |
* 活跃的TCP/UDP端口是多少?B/s、每秒连接数?
* 哪个进程在主动地使用网络?
工具 | 描述 |
netstat | 网络栈和接口统计信息 |
sar | 统计信息历史 |
ifconfig | 接口配置 |
perf、Dtrace | TCP/IP栈跟踪:连接、数据包、丢包,延时 |