之前被问到过的一个问题,也能够答上来一些,但可能因为没有接触过真实的线上生产环境,只是自己在自己的虚拟机/VPS上运行的时候查看着玩一玩,对性能指标、系统性能监控没有什么特别深刻、直观的认识,闲着的时候想想这个问题(对于一台Linux机器来说,如何监控它的CPU,内存,磁盘,网络等的使用情况;怎样算高负载,具体的依据是什么?)可能还是得总结一下,说不定什么时候就再用得上呢?
一、CPU的使用情况
CPU使用率反映的是当前CPU的繁忙程度,忽高忽低的原因在于占用CPU处理时间的进程可能处于I/O等待状态但却还未释放进入wait。
平均负载(load average)是指某段时间内占用CPU时间的进程和等待CPU时间的进程数,这里等待CPU时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。
CPU良好状态的指标
- CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。
- 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。
- 可运行队列:每个处理器的可运行队列<=3个线程。
常用监控工具/命令有:
- mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。
- vmstat:查看所有CPU的平均信息。
- iostat: 只能查看所有CPU的平均信息。
- sar: 与 mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。
- top: 显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。
二、Memory的使用情况
Memory的良好状态指标
swap in (si) == 0,swap out (so) == 0
应用程序可用内存/系统物理内存 <= 70%
常用监控工具/命令:
- vmstat
- free
三、磁盘的使用情况(磁盘I/O)
磁盘使用率的良好状态指标
- iowait % < 20%
- 提高命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。
- Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。
常用监控工具/命令:
- iostat
- sar
- df
- iotop
四、网络状况(网络I/O)
如何判断网络状态是否良好这个暂时还真不清楚o(╯□╰)o
常用监控工具/命令:
- iftop
- nload
- iptraf
- nethogs
- netstat
- sar
- dstat
- tcpdump
- mtr
五、其它
文件、进程、端口等的使用情况(第5部分的内容其实和上面的4个分类有重叠,也可以算是上面4个分类的一种微观表现吧)
- lsof
- htop
- w
- vnstat
- ps
- pgrep
《 “Linux系统的性能指标” 》 有 9 条评论
Linux性能分析和相关工具(Linux Performance Analysis and Tools)
http://www.brendangregg.com/linuxperf.html
http://www.brendangregg.com/Perf/linux_perf_tools_full.png
http://www.brendangregg.com/blog/2015-03-17/linux-performance-analysis-perf-tools.html
http://colobu.com/2014/09/18/Linux-Performance-Analysis-and-Tools/
https://taozj.org/201701/linux-performance-basic.html
http://mingxinglai.com/cn/2013/06/linux-performance-analysis-and-tools/
Linux 各个层级、模块对应的调试工具一览
http://www.brendangregg.com/linuxperf.html
Linux Used内存到底哪里去了?
http://blog.yufeng.info/archives/2456
一次linux内存问题排查-slab
http://bhsc881114.github.io/2015/04/19/%E4%B8%80%E6%AC%A1linux%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5-slab/
JVM诊断调优CheatSheet
http://www.rowkey.me/blog/2017/03/23/java-profile-cheatsheet/
DevOpsDays有感 – DevOps概谈
https://yaowenjie.github.io/devops/thought-on-devopsdays-beijing
Linux Perf Master
https://www.gitbook.com/book/riboseyim/linux-perf-master/details
https://riboseyim.github.io/
OpenFalcon文档
https://book.open-falcon.org/zh_0_2/intro/index.html
定位IO瓶颈的一些方法
http://blueswind8306.iteye.com/blog/2032980
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
falcon – 一般监控指标汇总
http://book.opschina.org/falcon-yi-ban-jian-kong-zhi-biao-hui-zong.html
9.4 Linux common monitor control index
https://songliling1.gitbooks.io/open-falcon/content/94_linux_common_monitor_control_index.html
`
disk.io.util: A percentage, for example 56.43 means 56.43%
disk.io.util 这个指标的单位是%,即显示 3.8 的真正含义是 3.8% 而不是 380%
`
互联网企业级监控系统实践
http://www.jianshu.com/p/56169276a5f4
基础设施助力双11(六):看网络如何“自愈”
https://mp.weixin.qq.com/s/PXClE-pg9Y9AsdDnXW2dKA
`
处理故障的主要流程是:监控采集->故障发现->根因定位->故障恢复
丰富的采集
目前每天的数据采集量接近万亿级的水平,采集的类型包括日志、SNMP采集(路由器交换机性能指标采集)、AliPing采集(内网质量采集)、AliInternet采集(互联网质量采集)、Netflow采集(流数据采集)等。
灵活的告警(故障发现)
基础事件
CEP复杂事件引擎
告警收敛
故障定位&自动恢复
提供一个平台,让运营的同学提交脚本,更全面、灵活的覆盖到所有的告警场景。
`
运维监控系统之Open-Falcon
https://www.cnblogs.com/nulige/p/7741580.html
http://book.open-falcon.org/zh/faq/linux-metrics.html
http://book.open-falcon.org/zh_0_2/faq/linux-metrics.html#%E8%BF%9B%E7%A8%8B%E7%9B%91%E6%8E%A7
`
14. 进程监控
proc.num:判断某个进程的数目,这里需要分两个场景,一种是根据进程的名字来判定,比如name=sshd;另外一种是根据cmdline来判定,比如Java的应用进程名可能都是java,根据第一种情况没法做区分,此时可以配置cmdline,如cmdline=./falcon_agent-c./cfg.ini
15. 进程资源监控
process.cpu.all:进程和它的子进程使用的sys+user的cpu,单位是jiffies
process.cpu.sys:进程和它的子进程使用的sys cpu,单位是jiffies
process.cpu.user:进程和它的子进程使用的user cpu,单位是jiffies
process.swap:进程和它的子进程使用的swap,单位是page
process.fd:进程使用的文件描述符个数
process.mem:进程占用内存,单位byte
`
简析运维监控系统及Open-Falcon
https://blog.csdn.net/puma_dong/article/details/51895063
一份来自滴滴运维工程师的监控系统建设心得(有彩蛋)
https://mp.weixin.qq.com/s/UlnHOaN0xaA0jfg5CEmLRA
`
一、一般监控系统的功能
一般的基础监控系统,主要有看图和告警两大功能,通过这两大功能,满足上述的发现问题的需求。
二、监控系统模块拆解
采集:对应Open-Falcon的Agent以及App library;
存储:对应Open-Falcon的Transfer、Query和Graph;
告警:对应Open-Falcon的Judge、Alarm;
绘图:对应Open-Falcon的Dashboard。
1、数据采集的原则
作为平台的设计者,必须要考虑标准化与规范化。
2、存储建设的关键点
功能、性能、容量
3、绘图功能的考量
与资源管理(服务树系统)打通
数据横向的比较
数据纵向的聚合
4、如何让报警能力更加强大
推模式——告警数据在上报时,自动推往告警模块
拉模式——由告警模块定时从存储拉取监控数据
三、监控的稳定性架构
在数据上报的链路建设中,可以考虑使用消息队列来应对流量的潮汐。削峰填谷。
存储的稳定性,可以考虑数据双写。两个集群分开部署。可以应对专线断开以及分片挂掉两种情况。
对于告警体系,给大家推荐我们的主从模式:从集群平时处于休眠状态,会定时的对主集群进行探测,一旦发现主集群挂掉,或探测不通,就将自身拉起,达到一个故障时间内的双活。
`