1、 CPU问题
- 机器负载高
- CPU消耗高
- 响应时耗高
- 资源消耗低,但是压力上不去
- 上下文切换频繁,cache miss率高
- 锁冲突严重
CPU问题分析总结
粗看系统负载情况: uptime,vmstat | 开发测试环境+线上环境 |
---|---|
机器实时的CPU资源消耗详细情况top | 开发测试环境+线上环境 |
分析系统调用: strace | 开发测试环境 |
分析函数的热点:perf,可以输出成火焰图便于直观观察 | 开发测试环境+线上环境 |
分析各个线程的资源消耗情况,线程内的函数消耗情况: valgriand | 开发测试环境 |
分析程序各个线程的堆栈执行情况: pstack & pt-pmp | 开发测试环境 |
2、磁盘IO问题
- IO消耗太多,引起系统影响慢
- 大量随机IO
- 句柄泄漏
- swap引起系统响应变慢
- 写入磁盘的数据丢失,磁盘损坏等
使用dd和fio测试IO的性能4.iostat输出结果会解读
iotop观察具体进程IO的消耗情况
通过proc文件系统和lsof分析句柄的使用,定位是否有句柄泄漏,某个句柄具体对应哪个文件
3、网络IO问题
- 网络不通
- 延时大
- 网络超时,丢包
- 连接异常
- 大量无效连接
- 网卡跑满
- CPU处理网卡中断繁忙
1.通过netstat查看网络连接状况
2.lsof分析具体端口被谁占用
3.通过sar查看网卡流量
4.利用tcpdump& wireshark进行网络包的分析
4、内存问题
- 内存消耗多,内存泄漏,内存碎片
- 内存分配回收性能差
- 内存越界,空指针,野指针
- 系统coredump或者数据异常
1.C++开发的时候必须掌握智能指针
2.熟练使用valgriand分析内存泄漏
3.了解多线程内存库jemalloc/tcmalloc
4.free的输出结果会解读
5.建议关闭swap
6.熟悉/proc/sys/vm/下的参数,比如控制刷脏页的频率,脏页占有量,swappinness等
其他
程序调试工具gdb
gdb∶常见的调试入口信息
- gdb ./testperf通过调试的方式启动程序
- gdb-p 81369对指定的进程进行调试
- gdb testperf core-testperf-52784-1555319546程序异常退出产生core,可以用来调试
总结
1.假如运营人员突然反馈你负责的系统响应变慢,并给出了具体的IP机器,如何分析问题
回答:
系统响应变慢,说明系统内的机器负载较高,对CPU的消耗也在增高,此时我可以从以下几个步骤对具体IP的机器进行测试:
&#x