【大型分布式网站架构设计与实践】-系统稳定性

这部分主要涉及的内容:

  1. 在线日志分析
    2.集群监控
  2. 流量控制
  3. 性能优化
  4. Java应用故障的排查

1. 在线日志分析

主要是cat、grep、less、wc、uniq等命令, 以及awk、shell脚本。


2. 集群监控

成熟稳定的系统一般都要对集群运行的机器哥哥指标进行收集,如系统的load、CPU利用率、IO繁忙程度、网络traffic、内存利用率、应用心跳。

监控指标

(1)系统的load监控

Linux系统中通过 top、uptime、或则cat /proc/loadavg 查看系统负载:

系统的load:定位为特定时间间隔内运行队列中的平均线程数,如果一个线程满足以下条件,就会处于运行队列中:
1. 没有处于IO等待状态
2.没有主动进入等待状态,也就是没主动调用wait操作
3.没有被终止
每个CPU的核都维护了一个运行队列,系统的load主要由运行队列来决定。

load值越大,也就意味着系统CPU越繁忙,这样线程等待时间也就越长。 一般CPU的当前活动线程数不超过3就属于正常,超过了5就负载很高了。

uptime 的输出是:

这里写图片描述
分别表示:
1. 当前时间 16.31.29
2. 系统已运行的时间 23 days, 6:29
3. 当前在线用户 1 user
4. load average后面表示平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载

cat /proc/loadavg 的输出

这里写图片描述

除了前3个数字表示平均进程数量外,后面的1个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID

(2)CPU的利用率

top命令查看CPU的利用率:

top | grep Cpu

这里写图片描述
Cpu后面跟的是各个状态下CPU所消耗的时间占比。

us:User time
sy:System time
ni:Nice time
……

(3)磁盘剩余空间

命令查看系统磁盘使用情况。
df -h

如果需要查看某个目录占用情况:-d表示递归深度,这里指定是1。-h表示格式化输出。
du -d 1 -h /home/logs/

(4)网络traffic(带宽情况)

sar -n DEV 1 1

(5)磁盘IO

磁盘IO的繁忙程度也是一个重要指标,主要针对IO密集的系统

查看系统的IO状况:-d表示查看磁盘使用情况,-k表示以kb为单位
iostat -d -k

(6)内存使用情况

查看内存使用情况, -m参数表示mb大小显示
free -m

查看swap IO的情况:
vmstat

(7)qps (query per second)

每秒查询数

(8)rt(response time)

请求的响应时间,这是非常重要指标,用户可以感知的。

通过分析Nginx的访问日志,就可以知道每个请求的响应时间。

(9)GC

对于java 应用来说,GC必须得关注,因为GC会存在 Stop the world的现象,JVM的应用程序都会停止运行。

JVM内存参数调整减少GC对性能提升很关键,特别是full GC , 会严重影响性能。

心跳检测

集群中心跳检测重要性不言而喻:主要有以下几种方式:

1. ping

通过执行ping命令查看响应。

2.应用层检测:检测应用系统是否可用

curl 命令检测,比如:

curl http://ip:port/selfcheck/check.htm

返回OK, 就表示应用正常。也可以通过shell实现应用的监控脚本:

#!/bin/bash
export LD_LIBRARY_PATH=$LD_LIBRART_PATH:/usr/local/lib
CURL=/usr/bin/curl
url_for_check="http://localhost:8080/selfcheck/check/htm"
result='$CURL -s $curl_for_check'

if [[ $result = *ok* ]];then
    echo 'check success'
else 
    echo 'check error'
fi
# 退出脚本
exit 0

业务检测:检测应用系统某个功能是否可用

可以在某些请求的response的header里面加上 一个 status的header。然后curl 检测response

3. 流量控制

流量控制;
服务降级;
服务开关;

4. 性能优化

5. Java应用排查故障

jsp:输出JVM虚拟机进程的一些信息

jstat:对虚拟机各种运行状态进行监控的工具,通过它可以看到虚拟机的类加载与卸载过程,管理内存使用和垃圾收集信息。这是JVM自带的工具

jinfo:查看应用程序的配置参数,即打印运行JVM时指定的参数。

jstack:用来生成虚拟机当前的线程快照信息,线程快照就是当前虚拟机每一个线程正在执行的方法堆栈的集合。

jmap:查看等待回收对象的队列,查看堆的概要信息。

猜你喜欢

转载自blog.csdn.net/u010853261/article/details/78015551