监控指标

  • 服务器:Linux应用服务器。

    CPU、Memory、Load、I/O、Disk等。
  • 数据库:
    缓存命中、索引、单条SQL性能、数据库线程数、数据池连接数等

  • 中间件:比如Nginx。具体包括线程数、连接数、日志输出等。

  • 网络:
    防火墙、网卡、网线、吞吐量、吞吐率等。

  • 应用服务
    应用服务日志、线程运行状态(阻塞、等待、正常运行)等。

  • 监控工具
    用户执行情况、场景状态、事务响应时间、TPS、Load、CPU分析图表等。

7.测试机资源。

具体包括CPU、Memory、网络、日志输出、磁盘空间、负载生成器评估等。

定位性能瓶颈的工具

  • top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。
  • iostat命令查看系统输入输出设备和CPU的使用情况; iostat -x命令,其中有个非常重要的指标%util,表示io等待占的百分比;如果%util数值达到50%或60%,说明磁盘的io非常差;如果%util数值很大,则rkB/s和wkB/s数值也很大;如果rkB/s和wkB/s数值不大,%util数值很大,这说明硬盘有问题。
  • iotop命令是一个用来监视磁盘I/O使用状况的top类工具,可以动态查看哪一个进程在频繁的读写。

uptime命令(load average)

linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。

$ uptime
10:42:43 up 1 day, 17:57,  1 user,  load average: 0.13, 0.12, 0.22

uptime命令回显中的load average所表示过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。
这三个值的大小一般不能大于系统逻辑CPU的个数,例如,本输出中系统有4个逻辑CPU,如果load average的三个值长期大于4时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于4时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲,比如本例中的输出,CPU是比较空闲的。

0.7 < load < 4: 此时是不错的状态,如果进来更多的汽车,你的马路仍然可以应付。

load = 4: 你的马路即将拥堵,而且没有更多的资源额外的任务,赶紧看看发生了什么吧。
load > 4: 非常严重拥堵,我们的马路非常繁忙,每辆车都无法很快的运行

查看CPU

top命令:

     Cpu(s): 14.8%us,  0.8%sy,  0.0%ni, 60.3%id, 83.8%wa,  0.1%hi,  0.2%si,  0.0%st

如果磁盘IO是瓶颈之一的话,那么%wa的值就会很高,那么这个时候就要分析磁盘IO了。其他字段这里就不再解释了

查看IO负载

$ iostat -x 1
Linux 4.4.0-108-generic (www)   03/08/2018  _x86_64_    (32 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.02    0.00    0.01    0.00    0.00   99.97

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     1.12    0.01    0.79     0.19    13.85    35.18     0.00    0.11    3.11    0.08   0.04   0.00
dm-0              0.00     0.00    0.01    1.89     0.15    13.76    14.64     0.00    0.12    3.45    0.11   0.01   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    32.81     0.00    6.30    6.30    0.00   6.02   0.00

主要字段含义如下:
r/s 每秒读操作数。
w/s 每秒写操作数。
rsec/s 每秒从设备读取的扇区数量。
wsec/s 每秒向设备写入的扇区数量。
avgrq-sz I/O 请求的平均扇区数。
avgqu-sz I/O 请求的平均队列长度。
await I/O 请求的平均等待时间,单位为毫秒。
svctm I/O 请求的平均服务时间,单位为毫秒。
%util 处理 I/O 请求所占用的时间的百分比,即设备利用率。

查看网站的并发连接数

检查是否达到瓶颈,在Linux下使用以下命令即可分组查看各种连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解释:
返回结果示例:

    LAST_ACK 5  (正在等待处理的请求数) 
    SYN_RECV 30 
    ESTABLISHED 1597 (正常数据传输状态) 
    FIN_WAIT1 51 
    FIN_WAIT2 504 
    TIME_WAIT 1057 (处理完毕,等待超时结束的请求数) 

状态:描述

CLOSED:无连接是活动的或正在进行 
LISTEN:服务器在等待进入呼叫 
SYN_RECV:一个连接请求已经到达,等待确认 
SYN_SENT:应用已经开始,打开一个连接 
ESTABLISHED:正常数据传输状态 
FIN_WAIT1:应用说它已经完成 
FIN_WAIT2:另一边已同意释放 
ITMED_WAIT:等待所有分组死掉 
CLOSING:两边同时尝试关闭 
TIME_WAIT:另一边已初始化一个释放 
LAST_ACK:等待所有分组死掉

使用这上面的命令是可以查看服务器的各种连接状态,其中ESTABLISHED 就是并发连接状态数。如果你不想查看到这么多连接状态,而仅仅只是想查看并发连接数,可以简化一下命令,即:

netstat -nat|grep ESTABLISHED|wc -l
2089

这个返回的数字就是当前并发的连接数的了。