在本文中,我们来看在调查某个主机的性能问题时,前60S内应该首先查看哪些信息,从而快速了解整个主机的运行状况。
在前60S内,通过运行以下10个命令,我们可以对系统的资源使用情况、进程运行状况有个整体了解
1 | uptime |
uptime
1 | $ uptime |
uptime可以使我们快速了解系统的整体负载信息,以上输出中显示的信息依次为:系统当前时间、已运行时间、 登陆用户数、平均负载,其中平均负载这里的三个数字分别表示过去1分钟、5分钟、15分钟内CPU的负载情况。对于CPU的单个核心来说,负载为1.0则说明CPU负载已经较高,没有剩余的资源了,如果长期保持在这个负载的话,则容易造成请求的积压,对于多核CPU,则该值是表示所有核的累加值。在实际定位过程中,主要是以15分钟内CPU的负载数为准,如果15分钟内CPU的负载仍然较高,那就需要注意了
dmesg
dmesg是用来显示内核环缓冲区的内容,内核将各种消息都存放在这里,内核环缓冲区的消息对于诊断系统问题很有用。例如我们可以通过dmesg查看是否有进程因为OOM被杀死、是否有TCP请求被丢弃等
vmstat
vmstat可对操作系统的虚拟内存、进程、CPU活动进行监控,如下所示:
1 | $ vmstat 1 |
以上输出中,主要关注如下列:
- r: 运行队列中的进程数量,即占用CPU的进程数。如果CPU单核上超过3个进程,那么CPU的负载就较高了
- swap: 使用的虚拟内存大小,如果此值较高,说明内存可能不足
- free: 可用内存大小
- si,so: 每秒从交换区写入内存的大小,每秒从内存写入交换区的大小
- us,sy,id,wa,st: 用户空间时间、系统空间时间、空闲时间、等待IO时间、被强制等待CPU的时间。如果us+sy所占的比例较高的话,则说明CPU负载较高,如果wa的比例较高,则说明磁盘可能存在瓶颈
mpstat
mpstat是CPU的实时监控工具,可以检测CPU中每个核的运行状况,如下所示:
1 | $ mpstat -P ALL 1 |
通过vmstat可以获取CPU的综合使用情况,而通过mpstat可以获取每个CPU核心的使用情况,某些糟糕的程序可能会一直只使用一个CPU核心,而不是运行在所有处理器上,从而导致某个CPU核心负载很高,其他CPU资源却是空闲的。通过mpstat便可诊断这类问题
pidstat
pidstat同top命令类似,用以监控全部或者指定进程的CPU、内存等资源的占用情况,它会将这些信息滚动打印,如下所示:
1 | $ pidstat 1 |
iostat
iostat用以监控系统中的IO状态,如下所示:
1 | $ iostat -xz 1 |
各列的含义如下:
- r/s, w/s,rKB/s,wKB/s: 一秒内读次数、写次数、读数据大小、写数据大小
- await: IO的平均响应时间,包括IO’的等待时间、服务时间,如果这个时间较长,则说明磁盘可能存在瓶颈。一般来说,这个时间应该小于5ms
- svctm: IO的平均服务时间,如果该值比较接近await,则说明IO几乎没有等待时间
- avgqu-sz: IO的平均队列长度,如果该值超过1,则说明排队请求较多,磁盘可能存在瓶颈
- %util: 磁盘用以IO操作的时间百分比,如果该值接近100%,则说明产生的IO请求太多,磁盘负载已经很高
free
free可以用以显示系统的内存使用状况,如下所示:
1 | $ free -m |
其中最后一行表示swap分区的使用信息,第二行是操作系统层面的内存使用情况,其中buffers是buffer缓存内存数(写缓存),cached是page cache使用的内存缓存数(读缓存),第三行是减去buffer、cache的已使用量和加上buffer、cache的空闲量,这是用户层面的统计信息,因为对于用户程序来说,buffers、cached占用的内存是可以立即重新分配,供用户程序使用的。
sar
sar是目前Linux上最为全部的系统性能分析工具之一,我们可以通过sar来查看网络吞吐状况,如下所示:
1 | $ sar -n DEV 1 |
每列的含义如下:
- rxpck/s, txpck/s: 每秒接收、发送的包数目
- rxkB/s, txkB/s: 每秒接收、发送的数据大小
我们也可以通过sar来查看主机上TCP连接的状况,如下所示:
1 | $ sar -n TCP,ETCP 1 |
每列的含义如下:
- active/s: 本地每秒初始化的TCP连接数(通过connect()连接远程服务器)
- passive/s: 每秒远程连接的TCP数(通过accept()接收远程连接)
- retrans/s: 每秒TCP包重发次数,它通常是网络服务出现问题的标志(如出现丢包、网络负载太高等)
top
top命令可以简单快捷地统计系统中的资源使用情况、进程运行状况等,如下所示:
1 | $ top |
通过此命令可一目了然得看出系统资源的负载是否较高,哪些进程占用了较多资源等,以便进一步分析