本文共 1873 字,大约阅读时间需要 6 分钟。
背景
有时在分析系统性能问题时,监控插件无法快速定位根源。这时需要结合服务器端深入分析,并结合经验,仅有一套好工具才能事半功倍,方便更高效地定位问题。
问题定位的方法学
采用5W(What、When、Why、Where、How)结合H(How to do)的方法,提出性能分析问题:
What:现象是什么样 When:什么时候发生 Why:为什么会发生 Where:发生的问题具体地点 How much:耗费了多少资源 How to do:解决问题的方法 CPU分析
内核CPU调度器功能和性能问题 线程状态分析: - on-CPU:执行中,分为用户态(user)和系统态(sys)
- off-CPU:等待下一轮CPU或I/O等状态,可细分为可执行、匿名换页、睡眠、锁、空闲等
需要理解以下概念:
- 处理器
- 核
- 硬件线程
- CPU内存缓存
- 时钟频率
- 每指令周期数(CPI)和每周期指令数(IPC)
- CPU指令
- 使用率
- 用户时间/内核时间
- 调度器
- 运行队列
- 抢占
- 多进程多线程
- 字长
分析工具
- uptime、vmstat、mpstat、top、pidstat用于查询CPU及负载情况
- perf用于跟踪进程内部函数耗时
使用方式
- 查看系统CPU使用情况:
top
- 查看所有CPU核信息:
mpstat -P ALL 1
- 查看进程CPU统计信息:
vmstat 1
-跟踪进程内部函数级CPU使用情况:perf top -p pid -e cpu-clock
内存分析
内存为提高效率而生,内存问题不仅影响性能 理解以下概念:主存、虚拟内存、常驻内存、地址空间、OOM、页缓存、缺页、换页、交换空间、交换、用户分配器(如libc、glibc、libmalloc、mtmalloc)、LINUX内核级SLUB分配器 分析工具
- free、vmstat、top、pidstat、pmap用于统计内存信息
- valgrind用于内存泄漏检测
- dtrace动态跟踪需要对内核函数有深入了解
使用方式
- 查看系统内存使用:
free -m
- 查看虚拟内存统计:
vmstat 1
- 查看进程内存映像信息:
pmap -d pid
磁盘IO分析
磁盘是计算机中最慢的子系统,最容易出现性能瓶颈 理解概念:文件系统(VFS)、文件系统缓存、页缓存、目录缓存、inode、inode缓存、noop调用策略 分析工具
- iotop:查看详细IO信息
- iostat:查看系统IO统计
使用方式
- 查看系统IO信息:
iotop
- 统计IO详细信息:
iostat -d -x -k 1 10
网络分析
网络监测复杂度大,需了解延迟、阻塞、冲突、丢包等因素 自适应网卡根据网络环境自动调整 分析工具
- netstat用于显示网络连接状态
- sar用于查看网络性能指标
使用方式
- 查看网络统计信息:
netstat -s
- 查看UDP连接状况:
netstat -nu
系统负载分析
负载指的是计算机执行多少工作(Load Average是1分钟、5分钟、15分钟的平均值) 分析工具:uptime、top、vmstat 使用方式
- 查看负载情况:
uptime
、top
- 统计系统调用耗时:
vmstat
- 跟踪指定系统操作:
strace -c -p pid
火焰图分析
火焰图展示CPU调用栈,y轴为调用栈深度(函数层级),x轴为抽样次数 常用类型:on-CPU、off-CPU、Memory、Hot/Cold、Differential 火焰图安装与使用
- 安装systemtap:
yum install systemtap systemtap-runtime
- 生成火焰图:
perf record -F 99 -p pid -g -- sleep 30 perf script > out.stacks1
示例火焰图DEMO
- Corsairs-mage-tilting-joystick图形展示cpu占用情况
内存级别火焰图
分析内存泄漏问题,使用火焰图可快速定位内存分配问题
性能红蓝差分火焰图
通过比对修改前后火焰图,快捷定位性能变化原因
案例分析
Nginx集群500+异常 - 通过监控插件发现499、5xx状态码
- Cpu使用率升高
分析工具使用
Top观察系统指标:top
perf分析进程内部:perf top -p pid
火焰图显示json解析和内存操作占用CPU,发现解析json库性能问题
总结
网络安全学习
专业知识体系完整化 学习视频教程覆盖网络安全法、渗透测试、漏洞详解等 转载地址:http://wgwfk.baihongyu.com/