服务异常系统排查顺序

服务异常时首先检查监控,观察QPS,RT以及成功率是否有抖动,如果没有明显抖动,再检查服务器状态

 

CPU负载

使用top命令或uptime命令查看CPU负载

top - 18:06:34 up 35 days,  3:53,  1 user,  load average: 1.41, 1.61, 1.70
[root@sean ~]# uptime
 18:07:35 up 35 days,  3:54,  1 user,  load average: 1.46, 1.56, 1.68

CPU的每个核都维护了一个运行队列,特定时间间隔内运行队列中的平均线程数即为CPU负载,例如,一个CPU有8个核,应用程序启动了16个线程,并且这些线程都处于运行状态,平均分配的情况下,每个核的运行队列中有2个线程在运行,持续1分钟,则这1分钟内,CPU的负载为2

load值越大,CPU越繁忙,通常CPU的load值不会超过3,如果load值大于5,表明CPU的负载已经非常高了

三个值分别表示过去1分钟、5分钟以及15分钟内的CPU负载

CPU利用率

使用top命令查看CPU利用率

Cpu(s):  5.3%us,  0.4%sy,  0.0%ni, 94.2%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st

us:User Time,CPU执行用户进程所占用的时间,越大越好

sy:System Time,CPU在内核态所占用的时间,如果该值过大,说明系统某些方面设计不合理,例如,频繁的系统调用导致的用户态与内核态频繁切换

ni:Nice Time,系统调整进程优先级所花费的时间

id:Idel Time,系统空闲时间,等待进程运行,越小越好

wa:Waiting Time,CPU等待IO操作所花费的时间,该值过大表示系统某些方面设计不合理

hi:Hard Irq Time,系统处理硬件中断所占用时间

si:Soft Irq Time,系统处理软件中断所占用时间

st:Steal Time,硬件虚拟化流行后新增,表示等待虚拟CPU时间,st占比较高,表示当前虚拟机与该宿主机上的其它虚拟机间的CPU争用比较频繁

按1可以查看CPU每个核的利用率

Cpu0  :  4.3%us,  0.3%sy,  0.0%ni, 95.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  4.7%us,  0.3%sy,  0.0%ni, 95.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  4.7%us,  0.3%sy,  0.0%ni, 95.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  9.4%us,  1.3%sy,  0.0%ni, 87.9%id,  0.0%wa,  0.3%hi,  1.0%si,  0.0%st
Cpu4  :  4.7%us,  0.3%sy,  0.0%ni, 95.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  : 26.7%us,  0.0%sy,  0.0%ni, 73.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  5.3%us,  0.3%sy,  0.0%ni, 94.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  : 44.4%us,  6.6%sy,  0.0%ni, 49.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

按Shift+H可以按照线程查看CPU使用情况

 

内存使用率

[root@sean ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         32109      28878       3231          0        317      14928
-/+ buffers/cache:      13632      18477
Swap:         2015          0       2015

特别需要注意的是Swap内存,如果Swap内存使用过多,表示物理内存已经不够使用,操作系统将物理内存存储的部分数据调度到了磁盘上,以腾出足够的内存供当前进程使用,当之前的进程需要运行时,再将磁盘上的数据调度至物理内存中,这个过程过于频繁将严重影响系统性能,使用vmstat可以查看swap IO

[root@sean ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 3308192 324940 15289716    0    0     0     4    1    1  6  1 93  0  0

si:每秒从磁盘交换到内存的数据量(KB)

so:每秒从内存交换到磁盘的数据量(KB)

 

磁盘使用率

使用df -h命令查看磁盘使用率

[root@sean ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/ma                37G  3.7G   33G  11% /
tmpfs                  16G     0   16G   0% /dev/shm
/dev/vda1             477M   35M  417M   8% /boot
/dev/vdb               99G   14G   81G  14% /data

如何需要查看具体目录所占用的空间,分析大文件所处位置,需要使用du命令

[root@sean ~]# du -sh /data
13G     /data
[root@sean ~]# du -h --max-depth=1 /data
8.0K    /data/keytab
13G     /data/logs
8.0K    /data/shell
198M    /data/java
16K     /data/lost+found
533M    /data/apps
13G     /data

磁盘IO

使用iostat命令,其中:-k指结果使用KB统计,-d表示查看的是磁盘

[root@sean ~]# iostat -kd
Linux 2.6.32-642.el6.x86_64 (sean)   10/11/2018      _x86_64_        (8 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               1.99         0.15        16.85     455025   51301563
vdb               0.56         0.00        15.04       2221   45808724
dm-0              4.20         0.15        16.75     450297   50997068
dm-1              0.00         0.00         0.00       1308          0

tps:每秒处理的IO请求数

kB_read/s:每秒向设备写入的数据量

kB_wrtn/s:每秒从设备读取的数据量

kB_read:读取数据总量

kB_wrtn:写入数据总量

磁盘每秒能够写入的数据量需要根据具体环境确定,一般的磁盘可以支持几十MB/s的写入速度

IO密集型的应用需要充分测试,以MQ系统为例,写入持久化消息以及事务日志是其主要的性能瓶颈点,需要支持较高的写入速度(例如100MB/s)

CPU密集型的应用磁盘IO一般不是瓶颈

优化策略:使用缓存,使用合理的RAID策略

 

网络traffic

-n指定统计信息,如DEV统计网络接口信息,SOCK统计套接字信息

5表示每5s抽样一次

1表示总共抽样一次

[root@sean ~]# sar -n DEV 5 1
Linux 2.6.32-642.el6.x86_64 (sean)   10/11/2018      _x86_64_        (8 CPU)

07:49:04 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
07:49:05 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:49:05 PM      eth0    637.00    415.00    133.03     84.45      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0    637.00    415.00    133.03     84.45      0.00      0.00      0.00

IFACE:lo为本地回环网络,eth0表示网卡

rxpck/s:每秒接收包个数

txpck/s:每秒发送包个数

rxkB/s:每秒接收字节数(KB)

txkB/s:每秒发送字节数(KB)

txcmp/s:每秒发送压缩包个数

rxmcst/s:每秒接收的广播包个数

TCP连接

主机可以使用的端口范围,可使用端口个数为60999-32768=28231个

root@sean:~# cat /proc/sys/net/ipv4/ip_local_port_range 
32768	60999

使用netstat命令统计处于各种状态下的TCP连接数,重点关注处于TIME_WAIT和CLOSE_WAIT状态下的TCP连接数

root@sean:~# netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key, state[key]}'  
TIME_WAIT 141
CLOSE_WAIT 20
ESTABLISHED 729

出现大量CLOSE_WAIT状态连接:短连接客户端业务完成后需要关闭连接或者使用长连接

出现大量TIME_WAIT状态连接:使用长连接或者减小TIME_WAIT等待时间(默认大概2分钟)

-s:每个协议统计数据,能看见TCP连接细节

root@sean:~# netstat -s
......
Tcp:
    59 active connections openings
    4 passive connection openings
    54 failed connection attempts
    0 connection resets received
    0 connections established
    234 segments received
    233 segments send out
    0 segments retransmited
    0 bad segments received.
    54 resets sent
......

优化策略:使用缓存降低请求次数,多次请求合并为一次请求,数据传输前进行压缩

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值