第四章 体统的稳定性
==集群监控==
@监控指标
1,load
在Linux系统中,可以使用top或uptime命令查看系统的load值,系统的load被定义为特定时间间隔内运行队列中的平均线程数。
每个CUP的核都维护了一个运行队列,系统的load主要由运行队列来决定。
load值越大,也就意味着系统的CPU越繁忙,这样线程运行完之后等待操作系统分配下一个时间片段的时间也就越长。
一般来说,只要每个CPU当前的活动线程数不大于3,我们认为它的负载是正常的,如果每个CPU的线程数大于5,则表示当前系统的负载已经很高了,需要采取相应措施来降低系统的负载,以便影响系统的响应时间。
#uptime
#top
可以查看系统的load值
2,CPU利用率
在Linux系统下,CPU的时间消耗主要在这几方面,即用户进程,内核进程,中断处理,I/O等待,Nice时间,丢失时间,空闲等几个部分,而CPU的利用率则为这些时间所占用时间的百分比。通过CPU的利用率,能够反映出CPU的使用和消耗情况。
#top | grep Cpu
输出的结果各参数:
用户时间(User Time)即us所对应的列,表示CPU执行用户进程所占用的时间,通常情况下,us越大越好
系统时间(System Time)即sy所对应的列,sy越高,表示系统某方面的设计不合理
Nice时间(Nice Time)即ni所对应的列,表示系统在调整进程优先级的时候所花费的时间
空闲时间(Idle Time)即id所对应的列,id越低越好
等待时间(Warting Time)即wa所对应的列,wa越高,表示系统某方面的设计不合理
硬件中断时间(Hard Irq Time)即hi所对应的列,表示系统处理硬件中断所占用的时间
软件中断时间(Soft Irq Time)即si所对应的列,表示系统处理软件中断占用的时间
丢失时间(Steal Time)即st所对应的列,是在硬件虚拟化开始流行后操作系统新增的一列,表示被强制等待虚拟CPU的时间。
3,磁盘剩余空间
#df -h
-h选项表示按单位格式输出
#du -d 1 -h /home/wwwroot
du命令可以查看具体目录所占用的空间,-d参数表示递归深度,这里1表示第一层 -h表示按照单位格式化输出
4,网络traffic
#sar -n DEV 1 1
-n选项表示汇报网络状况,而DEV则表示查看的是各个网卡的网络流量,第一个1表示每一秒抽样一次,第二个1表示总共取一次
5,磁盘I/O
磁盘I/O繁忙度也是一个重要的系统指标
#iostat -d -k
-d选项表示查看磁盘使用情况,-k选项表示以KB为单位显示
6,内存使用
程序运行时数据加载,线程并发,I/O缓冲等,都依赖内存,可用内存的大小决定了程序是否能正常运行以及运行的性能
#free -m
Linux的内存包括物理内存Mem和虚拟内存swap,下面介绍每一列的含义:
total:内存的总大小
used:已使用内存大小
free:可以使用内存大小
shared:多个进程共享的内存空间大小
buffers:缓存区的大小
cached:缓存的大小
Linux的内存管理和Windows不同,其中一个思想就是内存利用率最大化。内核会将剩余的内存申请为cached,而cached不属于free范畴,
free的内存小,并不代表可用的内存小,当程序申请更大的内存时,如果free内存不够,系统将会部分cached或buffers内存回收,回收的内存再分配给应用程序。
因此,Linux可用于分配的内存不仅仅只有free的内存。
对于应用来说,更值得关注的是虚拟内存swap的消耗,swap使用过多,表示物理内存已经不够用了。
#vmstat
查看swap I/O的情况
其中swap列的si表示每秒从磁盘交换到内存的数据量,单位是KB/s,so表示每秒从内存交换到磁盘的数据量,单位是KB/s
7,qps
qps是query per second的缩写,即每秒查询数。
8,rt
rt是response time的缩写,即请求的响应时间。响应时间是一个非常重要的指标,直接关系到前端用户的体验。因此,任何开发人员和设计师都想尽可能地降低rt时间。如,通过部署CDN边缘节点来缩短用户请求的物理路径;通过内容压缩来减少传输的字节数;使用缓存来减少磁盘I/O和网络请求等。
9,select/ps
select/ps记录了数据库每秒处理的select语句的数量。对于MySQL来说,select请求过多,可以适当地增加读库。
10,update/ps,delete/ps
update/delete这样的写入请求过多,单单增加读的slave已经解决不了问题,这是需要对相应的库拆分,将请求分散到其他库。
11,GC
Java应用需要关注的指标。
@心跳检测
对于自治的分布式系统,一般都有一套集群心跳检测机制,能够实时地移除宕机的slave,避免路由规则将任务分配给已宕机的机器来处理。而如果是Master宕机,集群也能够自动地进行Master选举,从而避免由Master宕机而导致整个集群不能提供服务的情况发生,这一类系统如ZooKeeper。也有一部分系统通过外部干预,使备份机器stand by,或者是双机互为备份,以实现故障切换,如MySQL,Nginx等,以避免单点故障发生。
1,ping
ping衍生为最常用的心跳检测方法,通过执行ping命令,使用ICMP协议,检测网络链路是否通畅,远程主机是否能够到达。
#ping 215.256.36.52
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
#ping -c 3 www.baidu.com
-c参数表示执行ping的次数
2,应用层检测
#curl http://192.168.1.15:8080/selfcheck/check.html
通过curl指令实时控制应用中预留的自检url,可以实时地感知应用的健康状态,一旦系统无响应或相应超时,即可输出报警信息,以被相应的监控调度系统捕捉到,第一时间通知开发和运维人员进行处理。
通过shell实现应用监控的脚本:
#这里略
然后保存文件尾check.sh
#.check.sh
结果为sucess或error
监控系统通过定时调度以上的一段脚本的执行,便能够获取到应用的状态,如果出现异常,能够及时报警。
3,业务检测
自动检测页面的异常情况:
通过页面的大小判断;通过检测页面的返回值。
对于返回值检测,可在response的header里约定一个值,来标识返回的结果是否正常。
response.setHeader(“Server-Status”,”ok”);
#curl -I http://192.168.1.15:8080/selfcheck/check.html
-I参数只查看header
也可按照应用层检测那样写一个执行脚本,此处略
@容量评估及应用水位
在新系统上线之前,或者需要在线运行的系统上做一些推广活动时,相关的业务方需要对系统的访问量进行评估。业务方给出总的访问量,即PV,UV以后,再逐一细化,推到落到每一个单独系统,接口上的流量大概是多少,这样一来,每一个子系统所承载的流量就清晰了。子系统将根据落到系统上的总访问量来评估机器的数量,网络的带宽和技术的实现方式。
首页访问最大,并且对于性能非常敏感。因此,为了保障用户能够第一时间看到首页,首页一般存放在CDN缓存上,并且将页面静态化,动态数据通过异步获取,通过CDN系统的智能路由,能够将用户的请求路由到离他最近的CDN缓存机器上来获取页面,以降低延迟。
DN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
在进行系统峰值评估的时候u,一般会遵循一个80/20原则,80%的访问请求将在20%的时间内达到,这样便可以根据系统对应的PV计算出系统的峰值qps。如果是大型促销或者推广,视情况可以乘以3~5倍,计算公式如下:
峰值qps = (总的PV*80%)/(60*60*24*20%)
然后可获得机器数:
机器数 = 总峰值qps/压测得出的单台机器极限qps
单台机器极限qps:当rt达到无法忍受的上限,或系统某些地方开始出现瓶颈,如内存不足,系统频繁Full GC,I/O等待时间过长,CPU load过高等,这个时候的qps就是单机承受的极限值。
为了实时了解当前系统的运行和负载情况,需要一个水位图:
通过日志分析,或者其他统计手段,实时计算出当前系统的qps值,然后结合系统上线之前压力测试所得到的单机的极限qps,乘以当前部署的机器总数,便能够得到当前的水位:
当前水位:当前总qps/单机极限qps*机器数*100%
通过历史数据的积累,还可以绘制出单个系统随着时间推移的历史水位,以便系统管理者能够随时回溯到历史峰值,给容量评估提供参考依据。
@性能优化措施
1,前端性能优化。2,程序优化。3,压缩。4,结果缓存。5,数据库优化。合理使用索引;反范式设计;使用查询缓存;使用搜索引擎;使用key-value数据库。6,硬件性能提升。