您的当前位置:首页服务器监控(包括性能指标与web应用程序)

服务器监控(包括性能指标与web应用程序)

来源:锐游网

服务器监控

   在搭建服务器时,除了部署webapp之外,还需要服务的异常信息与服务器性能指标进行监控,一旦有异常则通知管理员。
   服务器使用Linux+Nginx-1.9.15+Tomcat7+Java搭建的。
   编写脚本检测错误日志和服务器性能指标,一旦新生错误日志或者性能降低到设定的阈值时,则使用云监控将报警上传到云账号。

服务运行监控

   错误日志包含以下三个方面:

  • nginx 错误信息监控(nginx.conf配置)
    • ${NGINX_HOME}/logs/error.log
  • tomcat 错误信息监控(server.xml配置)
    • ${TOMCAT_HOME}/logs/catalina.out
  • webapp错误信息监控(log4j)
    • ${WEBAPP_HOME}/log/error

机器性能指标

   一般都会使用linux系统的机器作为服务器,那么当在上面搭建服务时,需要对一些常用的性能指标进行监控,那么一般包含哪些指标呢?下面对其进行一些总结,欢迎补充…

指标
  • CPU(Load) CPU使用率/负载
  • Memory 内存
  • Disk 磁盘空间
  • Disk I/O 磁盘I/O
  • Network I/O 网络I/O
  • Connect Num 连接数
  • File Handle Num 文件句柄数
CPU
Memory
  1. 说明
       内存也是系统运行性能的一个很重要的指标,如果一个机器内存不足,那么将会导致进程运行异常而退出。如果进程发生内存泄漏,则会导致大量内存被浪费而无足够可用内存。内存监控一般包括total(机器总内存)、free(机器可用内存)、swap(交换区大小)、cache(缓存大小)等。
  2. 查看命令

    • vmstat
    • free
    • top
    • cat /proc/meminfo
  3. 分析
    表示系统Mem正常,主要有以下规则:

    • swap in (si) == 0,swap out (so) == 0
    • 可用内存/物理内存 >= 30%
磁盘
  1. 说明
       机器的磁盘空间也是一个重要的指标,一旦使用率超过阈值而使得可用不足,那么就需要进行扩容或者清除一些无用的文件。
  2. 查看命令
    • df
  3. 分析
    表示系统磁盘空间正常,主要有以下规则:
    • Use% <= 90%
磁盘I/O
  1. 说明
       机器的磁盘空间也是一个重要的指标,一旦磁盘I/O过重,那么说明运行的进程在大量的文件读写并且cache命中率低。那么一个简单的方法便是增大文件缓存大小来提高命中率从而降低I/O。
       在Linux中,内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。引用[1]
  2. 查看命令
    • vmstat

      bi :块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小1024byte。
      bo:块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
    • iostat

      Linux段为机器系统信息: 系统名称、hostname、当前时间、系统版本.
      avg-cpu段为cpu的统计信息(平均值):
      %user:用户级别运行所使用的CPU的百分比.
      %nice:nice操作所使用的CPU的百分比.
      %sys:在系统级别(kernel)运行所使用CPU的百分比.
      %iowait:CPU等待硬件I/O时,所占用CPU百分比.
      %idle:CPU空闲时间的百分比.
      Device段段为设备信息(上图中有两个盘vda与vdb):
      tps: 每秒钟发送到的I/O请求数.
      Blk_read/s: 每秒读取的block数.
      Blk_wrtn/s: 每秒写入的block数.
      Blk_read: 读入的block总数.
      Blk_wrtn: 写入的block总数.
    • sar -d 1 1

      sar -d表示查看磁盘报告 1 1 表示间隔1s,运行1次
      其实cpu、缓存区、文件读写、系统交换区等信息都可以通过该命令查看,只是选项不同,具体参见:
      第一个段为机器系统信息,同iostat
      第二个段为每次运行的dev I/O信息,这里因为只运行一次,并有两个设备dev252-0与dev252-16:
      tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
      rd_sec/s:每秒读扇区数
      wr_sec/s:每秒写扇区数
      avgrq-sz:平均每次设备I/O操作的数据大小 (扇区)
      avgqu-sz:平均I/O队列长度
      await:为平均每次设备I/O操作的等待时间(单位ms),包括请求在队列中的等待时间和服务时间
      svctm:为平均每次设备I/O操作的服务时间(单位ms)
      %util:表示一秒中有百分之几的时间用于I/O操作
      如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
      如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘请求饱和,可能存在瓶颈。idle小于70% I/O压力就较大了,也就是有较多的I/O。引用[1]
      同时可以结合vmstat 查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。引用[1]
  3. 分析
    表示系统磁盘空间正常,主要有以下规则:
    • I/O等待的请求比例 <= 20%
    • 提高命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。
    • Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。引用[1]
网络I/O
  1. 说明
       如果服务器网络连接过多,那么会造成大量的数据包在缓冲区长时间得不到处理,一旦缓冲区不足,便会造成数据包丢失问题,对于TCP,数据包丢失便会进行重传,这有会导致大量的重传;对于UDP,数据包丢失不会进行重传,那么数据便会丢失。因此,服务器的网络连接不宜过多,需要进行监控。
      服务器一般接收UDP与TCP请求,都是无状态连接,TCP(传输控制协议)是一种提供可靠的数据传输协议,UDP(用户数据报协议)是一种面向无连接的协议,即其传输简单但不可靠。关于它们二者之间的区别,可以查阅相关资料。

  2. 查看命令

    • netstat
      • UDP
        (1) netstat -ludp | grep udp

        Proto:协议名
        Recv-Q:收到的请求个数
        Send-Q:发送的请求个数
        Local Address:本地地址与端口
        Foreign Address:远程地址与端口
        State:状态
        PID/Program name:进程ID与进程名
        (2) 进一步查看UDP接收的数据包情况 netstat -su

        画圈的便是UDP数据包丢失统计,该项值增加了,说明存在udp数据包丢失,即网卡收到了,但是应用层没有来得及处理而造成的丢包。
      • TCP
        (1) netstat

        各字段含义同UDP
        (2) 查看重传率
        因为TCP是可靠传输协议,如果数据包丢失会进行重传,因此TCP需要查看其重传率.
        cat /proc/net/snmp | grep Tcp

        那么重传率为RetransSegs/OutSegs
  3. 分析
    UDP丢包率或者TCP重传率不能高于多少,这两个值由系统开发定义,此处,拍脑袋决定UDP包丢包率与TCP包重传率不能超过1%/s。
连接数
  1. 说明
       对于每一台服务器,都应该限制同时连接数,但是这个阈值又不好确定,因此当监测到系统负载过重时,然后取其连接数,这个值便可作为参考值。
  2. 命令
    • netstat
      netstat -na | sed -n '3,$p' |awk '{print $5}' | grep -v 127\.0\.0\.1 | grep -v 0\.0\.0\.0 | wc -l
  3. 分析
    • 系统负载过重时,该值作为服务器的峰值参考值。
    • 如果超过1024报警
文件句柄数
  1. 说明
       文件句柄数即当前打开的文件数,对于linux,系统默认支持的最大句柄数是1024,当然每个系统可以不一样,也可以修改,最大不能超过无符号整型最大值(65535),可以使用ulimit -n命令进行查看,即因此如果同时打开的文件数超过这个数便会发生异常。因此这个指标也需要进行监控。
  2. 查看命令
    • lsof
      lsof -n | awk '{print $1,$2}' | sort | uniq -c | sort -nr

      三列分别是打开的文件句柄数, 进程名,进程号
  3. 分析
    将所有的行的第一列相加便是系统目前打开的文件句柄数num,如果num<=max_num*85%则报警。
性能指标总结
  • CPU
    • CPU利用率:us <= 70,sy <= 35,us + sy <= 70。
    • 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。
    • 可运行队列:每个处理器的可运行队列<=3个线程。
  • Memory
    • swap in (si) == 0,swap out (so) == 0
    • 可用内存/物理内存 >= 30%
  • Disk
    • Use% <= 90%
  • Disk I/O
    • I/O等待的请求比例 <= 20%
  • Network I/O
    • UDP包丢包率与TCP包重传率不能超过1%/s。
  • Connect Num
    • <= 1024
  • File Handle Num
    • num/max_num <= 90%

总结

    脚本检测nginx、tomcat与webapp运行异常日志(包括nginx与tomcat是否正在运行)与服务器性能七个指标,一旦发现异常信息和性能超标,那么马上发送邮件给管理员,也可以使用云监控push给管理员的云账号。

参考

[1]
[2]

因篇幅问题不能全部显示,请点此查看更多更全内容

Top