集群监控 转自:http://www.cnblogs.com/xrq730/p/5171463.html
大型互联 企业的背后,依靠的是成千上万台服务器日夜不停的运转,以支撑其业务的运转。宕机对于互联 企业来说,代价是沉重的,轻则影响用户体验,重则直接影响交易,导致交易下跌,并且给企业声誉造成不可挽回的损失。对于这些机器对应的开发和运维人员来说,即便是每台机器登陆一次,登陆那么多台机器也够呛,何况还需要进行系统指标的检查。因此,依靠人力是不可能完成24小时不间断监控服务器的任务的。
如今,互联 已经深入到人们生活的每个角落,可以想象一下,假如哪一天Google或者Baidu不能搜索,抑或是amazon或者taobao不能进行购物,这个世界将会如何,成熟稳健的系统往往需要对集群运行时的各个指标进行收集,如系统的load、CPU利用率、I/O繁忙程度、 络traffic、内存利用率、应用心跳等,对这些信息进行实时监控,如发现异常情况,能够第一时间通知到相应的开发和运维人员进行处理,在用户还没有察觉之前处理完故障和异常,将损失降低到最低。
下面来看一下,常见的集群监控指标。
load:反映系统忙闲程度
在Linux系统中,可以通过top和uptime命令来查看系统的load值,那么什么是load呢的load被定义为特定时间间隔内运行队列中的平均线程数,如果一个线程满足以下条件,该线程就会处于运行队列中:
- 没有处于I/O等待状态
- 没有主动进入等待状态,也就是没有调用wait操作
- 没有被终止当然load计算的算法较为复杂,因此,这种情况也不是绝对的。
load值越大,也就意味着系统的CPU越繁忙,这样线程运行完以后等待操作系统分配下一个时间片段的时间也就越长。假设:
- CPU1分钟内最多处理100个线程任务,load值为0.2,意味着这1分钟内CPU处理了20个任务
- CPU1分钟内最多处理100个线程任务,load值为1,意味着这1分钟内CPU刚好将这100个任务处理完
- CPU1分钟内最多处理100个线程任务,load值为1.7,意味着这1分钟内CPU除了处理了这100个任务外,还有70个任务等待处理
当然,load的计算算法较为复杂,并不像上面说的这么简单,这么打比方只是为了简单说明问题。假设一般来说,只要load值不大于3,我们认为它的负载是正常的(考虑到多核CPU的系统),如果load值大于5,则表示当前系统的负载已经非常高了,需要采取相应的措施来降低系统的负载。
w、top、uptime这三个命令都可以用来查看系统的load值,下面演示一下使用uptime命令查看系统的load:
上面一部分,也就是”%Cpu(s)”开头的内容是我们需要关注的,后面跟的列便是各种状态下CPU所消耗的时间比,看下每一列的意思:
- 用户时间(User Time)即us所对应的列,表示CPU执行用户进程所占用的时间,通常情况下希望us的占比越高越好
- 系统时间(System Time)即sy所对应该的列,表示CPU自内核态所花费的时间,sy占比比较高通常意味着系统在某些方面设计得不合理,比如频繁的系统调用导致的用户态和内核态的频繁切换
- Nice时间(Nice Time)即ni所对应的列,表示系统在调整进程优先级的时候所花费的时间
- 空闲时间(Idle Time)即id所对应的列,表示系统处于空闲期,等待进程运行,这个过程所占用的时间。当然,我们希望id的占比越低越好
- 等待时间(Waiting Time)即wa所对应的列,表示CPU在等待I/O操作所花费的时间,系统不应该花费大量的时间来进行等待,否则便表示可能有某个地方设计不合理
- 硬件中断处理时间(Hard Irq Time)即hi对应的列,表示系统处理硬件中断所占用的时间
- 软件中断处理时间(Soft Irq Time)即si对应的列,表示系统处理软件中断所占用的时间
- 丢失时间(Steal Time)即st对应的列,实在硬件虚拟化开始流行后操作系统新增的一列,表示被强制等待虚拟CPU的时间
对于多个或多核CPU的情况,常常需要查看每个CPU的利用情况,此时可以按1,便可以查看到每个核的CPU利用率:
-h表示按单位格式化输出。该命令显示sda1一共有19GB的空间,使用了4.3GB,剩余14GB可用。
如果要查看具体目录所占用的内存空间,分析大文件所处位置,可以使用du命令来进行查看:
看到 错,这也很正常。Linux环境下每个命令就和Windows环境下的软件一样,必须先安装再使用,按照 错的提示来看,iostat当前并没有安装。所以我们按照提示的来安装一下sysstat就可以了:
-d表示查看磁盘使用状况,-k表示以KB为单位显示。各个列中,Device表示设备名称、tps表示每秒处理的I/O请求数、kB_read/s表示每秒从设备读取的数据量、kB_wrtn/s表示美标向设备写入的数据量、kB_read表示读取的数据总量、kB_wrtn表示写入的数据总量。
内存使用
程序运行时的数据加载、线程并发、I/O缓冲等,都依赖于内存,可用内存的大小决定了程序是否能正常运行以及运行的性能。
通过free命令能够查看到系统的内存使用情况,加上-m参数表示以MB为单位:
其中,swap列的si表示每秒从磁盘交换到内存的数据量,单位是KB/s,so表示每秒从内存交换到磁盘的数据量,单位也是KB/s。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!