自开始负责生产环境部署,中间遇到了若干线上环境内存以及CPU的问题。由于微服务以及容器的流行,现在已经可以很方便的使用 K8s + prometheus + grafana + alert 的方式进行监控,这足以覆盖大部分场景。
最重要的事情已经交由最适合的组件去做,然而了解一些在裸机上的命令以及指标也是必不可少的:
- 了解监控什么指标
- 平时写一些脚本也经常会 OOM 或者 CPU 使用率过高
先以一张来自 linuxperf 的图作为大纲于,我试着对一些指标进行整理,以备不时之需。
htop/top ![](https://imgconvert.csdnimg.cn/aHR0cDovL3BiMy5wc3RhdHAuY29tL2xhcmdlL3BnYy1pbWFnZS9iNmEwNTU0YjUyODA0NDZmYTM4ZDRiMjY5ZTIzMTI4Nw?x-oss-process=image/format,png)
htop 足以覆盖大多数指标,详细直接查看帮助即可。
- sort: by mem/cpu/state. 根据进程状态排序也至关重要,特别在 load average 过高的时候。根据内存以及CPU使用率排序用以定位高资源占用者。
- filter
- fields
- process/ count
- ...
CPU 基本信息
在 linux 中一切皆文件,查看 /proc/cpuinfo 查看信息。另有衍生问题
- 如何查看 CPU 个数
- 如何查看 CPU model
- 如何查看 CPU 主频
cat /proc/cpuinfo
cat /proc/stat
平均负载 (load average)
使用 uptime 和 w 可打印出系统过去 1, 5, 15 分钟内的平均负载。同时,你可以使用 sar -q 查看动态的平均负载。
$ uptime
19:28:49 up 290 days, 20:25, 1 user, load average: 2.39, 2.64, 1.55
$ w
19:29:50 up 290 days, 20:26, 1 user, load average: 2.58, 2.63, 1.61
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.0.1 19:27 6.00s 0.05s 0.00s tmux a
在 uptime 的 man 手册中这么解释平均负载
System load averages is the average number of processes that are either in a runnable or uninterruptable state.
翻译过来就是指系统中处于可运行状态和不可中断状态的平均进程数。
对于 4 核的 CPU,如果平均负载高于 4 就代表负载过高
动态平均负载
$ sar -q 1 100
Linux 3.10.0-957.21.3.el7.x86_64 (shanyue) 10/21/19 _x86_64_ (2 CPU)
16:55:52 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
16:55:53