去年,领导一直催让我整理一个排查性能问题和查BUG的文档,我一直拖着,因为很很想到一套体系把所有问题串连起来,而且大部分排查也是出于经验。

前一段时间翻译过一骗很好的性能排查与优化的文章:

  • 性能排查与优化综述
  • CPU性能排查与优化
  • 内存性能排查与优化
  • IO性能排查与优化

最近又读了一篇关于linux常用工具的文章linux-performance-monitoring-tools,感觉不错,结合自己的经历,描述一下,可能不全面,以后再补充。

SA

oceanbase一些重要应用上会部署sar后台运行,主要是为了分析一天的网络和磁盘性能数据,方便性能问题提成查。曾经一个合并问题,导致网络流量过大的问题,就是通过sar来辅助排查的。不过sar使用的时候,会写大量记录,所以最好选择一个单独的盘来用,不要影响正常的业务磁盘。

sar是sysstat包的一部分,sar可以做两件事情

  • 监控系统实时性能(CPU,内存,I/O)
  • 在后台收集数据,分析历史数据来查找性能瓶颈

sar详细功能说明

  • 收集cpu利用率
  • 单个cpu统计
  • 内存使用率
  • swap使用率
  • 系统的全部IO活动
  • 单个设备的IO活动
  • 上下文切换
  • 运行队列和load
  • 网络状态

sar使用实例

1
2
3
4
5
sar -b 1 3

-b: 报告io状态
1: 每一秒执行一次
3: 总共汇报3次

TCPDUMP

oceanbase曾经一个线上集群(天猫评价),这个集群内部总是有一些slow query(>100ms),一直没查到什么原因;后来我使用tcp dump分别dump其中两台机器的tcp的收发包,可以抽象为类似的现像:源端序号为1,2,3,收端的序号则为2,3,1,1这个包到的特别晚,有时候是超时,重传,有时候正常到达,但是花的时间特别多;最终的原因是这个集群所在的交换机,其中一个芯片挂掉,到达这个转发芯片的请求,会丢掉,重新选择转发芯片,导致时间过长,而交换机上配置的监控程序有问题,没有去监控这块问题,所以才导致了这个问题。此外tcpdump可以将数据包的内容dump出来,对于分析网络程序bug,core的时候特别有用。

tcpdump功能

  • 捕获packet并解析
  • 可以捕获特别端口的packet
  • 可以捕获两机器之间的tcp packet
  • 可以捕获特定协议的packet

tcpdump使用实例

tcpdump -A -i etho

NAGIOS

oceanbase监控自身机器的状态,一是依赖于内部表,另一个是依赖于部署在机器上的监控程序,监控ERROR日志或是linux系统本身的状态,比如磁盘利用率,load等,并没有使用其它开源的软件,如nagios。

nagios可以用来监控IT基础设施的很多状态

  • 任何硬件(服务器,交换机,路由器)
  • linux servers,windows servers
  • 数据库(oracle,mysql,postgresql)
  • 运行到OS上的各种server(sendmail,nis,nfs,ldap,etc)
  • web servers
  • 定制应用

IOSTAT

iostat对于我来说,应该是用的最频繁的工具,主要用来排查一些磁盘的性能问题,比如磁盘合并期间负载不均衡,iowait过高等。不过dstat更好用一些,可以监控网卡的流量,数据展现也更直观。iostat主要监控cpu,io

iostat使用实例

iostat -p sda

MPSTAT

mpstat打印处理器状态信息,不过一般没用到这个工具,top可以起到同样的作用。

使用实例

mpstat -P ALL

VMSTAT

vmstat主要来用打印内存信息,对于排查内存和CPU问题特别好用;用它很容易定位性能问题的根源,比如,如果swpd过多,那原因很可能是内存不足。具体排查方法见以前的博客:linux系统性能监控与优化(3)–memory

vmstat是sar工具集的一部分

PS

打印进程信息,应该是用到的最频繁的linux命令吧。

FREE

打印系统物理内存与swap信息,可以使用top替代

TOP

打印所有的进程状态,并可以根据CPU/memroy等排序

PMAP

pmap可以用来打印进程的mmap信息。曾经用它来查过一个内存分配的find_vma性能问题分析。此外,因为ups内存没有对齐,导致mmap数量过多的问题,这个问题不是我排查的,所以更细节的原因不太清楚,但是也是通过pmap来排查的。

NETSTAT

netstat主要是打印网络连接的信息;比如某个端口被战用,导致服务启动不起的问题,使用netstat很快就能定位到使用这个端口的程序。

IPTRAF

没用过,监控IP网络的

STRACE

打印系统调用的执行路径,用这个工具,主要是在学习内核源码的时候用到过,此外还用它来学习cs启动加载各种库和文件的流程。

strace实例

strace -e open ls

LSOF

列出所有打开的文件。线上曾经出现过收藏夹的一个集群的6台机器的数据被误清空的问题,但是server还在正常运行,偶尔会一些找不到tablet的报错,通过lsof查看,发现这些文件还在打开状态,实际上这些文件并没有物理删除,所以还能使用。

还有曾经出现过一个cs因为BUG的原因,导致inode用完的问题,用lsof也可以看到,很多文件打开,但并没有关闭。

NTOP

主要用于网络,类似于top

GKRELLM

没用过

W/UPTIME

w用来看谁最近登录到线上机器,在干什么。

PROC
proc应该是用来排查问题功能最强大的工具,上面那些工具,很多都是通过读proc文件系统得到的
比如pmpa相当于cat /proc/进程号/mmaps

GNOME SYSTEM MONITOR

CONKY

CACTI

VNSTAT

HTOP

SOCKST STATISTICS

Comments