监控指标
-
服务器: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
这个返回的数字就是当前并发的连接数的了。