这部分主要涉及的内容:
- 在线日志分析
2.集群监控- 流量控制
- 性能优化
- 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:查看等待回收对象的队列,查看堆的概要信息。