1、Linux中程序性能监控
发布于 2022年 01月 24日 13:07
一、内存
在Linux上运行程序时,常常遇到卡顿、内存消耗大,这时候我们需要使用free来查看内存使用情况。
free命令是显示系统内存的使用情况,一般包括了物理内存、交换内存以及内核缓冲区内存。
[root@i-7cfx3ox6 ~]# free -b
total used free shared buffers cached
Mem: 8254541824 7044112384 1210429440 212992 172191744 1889677312
-/+ buffers/cache: 4982243328 3272298496
Swap: 8589930496 7946240 8581984256
[root@i-7cfx3ox6 ~]# free -k
total used free shared buffers cached
Mem: 8061076 6878644 1182432 208 168156 1845388
-/+ buffers/cache: 4865100 3195976
Swap: 8388604 7760 8380844
[root@i-7cfx3ox6 ~]# free -m
total used free shared buffers cached
Mem: 7872 6717 1154 0 164 1802
-/+ buffers/cache: 4750 3121
Swap: 8191 7 8184
[root@i-7cfx3ox6 ~]# free -g
total used free shared buffers cached
Mem: 7 6 1 0 0 1
-/+ buffers/cache: 4 3
Swap: 7 0 7
[root@i-7cfx3ox6 ~]# free -h
total used free shared buffers cached
Mem: 7.7G 6.6G 1.1G 208K 164M 1.8G
-/+ buffers/cache: 4.6G 3.0G
Swap: 8.0G 7.6M 8.0G
[root@i-7cfx3ox6 ~]# free -l -h
total used free shared buffers cached
Mem: 7.7G 6.6G 1.1G 208K 164M 1.8G
Low: 7.7G 6.6G 1.1G
High: 0B 0B 0B
-/+ buffers/cache: 4.6G 3.0G
Swap: 8.0G 7.6M 8.0G
[root@i-7cfx3ox6 ~]# free -t -h
total used free shared buffers cached
Mem: 7.7G 6.6G 1.1G 208K 164M 1.8G
-/+ buffers/cache: 4.6G 3.0G
Swap: 8.0G 7.6M 8.0G
Total: 15G 6.6G 9.1G
[root@i-7cfx3ox6 ~]# free -s 10
total used free shared buffers cached
Mem: 8061076 6878652 1182424 208 168156 1845388
-/+ buffers/cache: 4865108 3195968
Swap: 8388604 7760 8380844
total used free shared buffers cached
Mem: 8061076 6878924 1182152 208 168156 1845388
-/+ buffers/cache: 4865380 3195696
Swap: 8388604 7760 8380844
- Mem: 内存使用情况
- Swap: 交换空间的使用情况,是磁盘的一块区域,可以是swap分区也可以是swap文件,当系统物理内存使用比较紧张时,Linux会将内存中不常被访问的数据保存到swap中,若需要访问该内容,会加载的内存中,即换出和换入的意思。
- top: 物理内存总数
- used: 已使用内存大小
- free: 可使用内存大小,即未被真正使用过的物理内存大小
- shared: 多个进程可共享内存大小
- buff/cache: 磁盘缓存大小
- available: 可提供的内存大小,区别于free列,如果没有足够的free内存使用,会从buffer/cache回收内存来满足应用程序的需求,所以 available = free + cache + buffer
二、CPU
监控CPU,我们一般可以
- 通过 top 命令,来观测CPU的性能
- 通过负载,评估CPU任务执行的排队情况
- 通过vmstat,看CPU的繁忙程度
2-1、top命令
[root@i-7cfx3ox6 dev]# top -help
top: procps version 3.2.8
usage: top -hv | -abcHimMsS -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
- d : 指定两次屏幕刷新频率,即时间间隔。如 top -d 4, 即指定更新周期为4秒
- p : 指定监控进程id来监控某个进程状态。如top -p 1201,显示进程号为1201的进程信息、cpu、内存占用等信息
- q : 无延时刷新,若有超级用户权限,则top会以高优先级运行。
- c : 显示整个命令行。如top -c,显示每个进程的完整命令
- S : 指定累计模式。如top -S,以累计模式显示程序信息。
- s : 使top命令在安全模式中运行。如top -s,不能交互使用s键位,会报unavailable in secure mode提示
- n : 指定更新的次数。如top -n 2只更新2次,就退出top程序。
- b : 批处理模式显示程序信息。如top -b,以批处理模式显示程序信息。
top界面程序交互常用按键说明:
- 1、按c键位:切换显示命令名称和完整的命令行。
- 2、按P键位:根据CPU使用百分比大小进行排序。
- 3、按M键位:根据内存mem占有率大小进行排序。
- 4、按n键位:设置在进程列表中显示进程的数量。
- 5、按T键位:根据时间/累计时间进行排序。
- 6、按s键位:改变画面更新频率,输入两次刷新之间的延迟时间,以秒为单位。
- 7、按S键位:切换到累计模式;开关。
- 8、按i键位:忽略闲置和僵尸进程;开关。
- 9、按h键位:显示帮助画面。10.按u键位:输入指定的user,就会显示所有该user的程序进程。
- 10、按q键位:退出top查看程序。
- 11、按f键位:编排视图显示字段
当进入top命令后,按1按键即可看到每核CPU的运行指标和详细信息
CPU 的使用有多个维度的指标,下面分别说明:
- us 用户态所占用的 CPU 百分比,即引用程序所耗费的 CPU
- sy 内核态所占用的 CPU 百分比,需要配合 vmstat 命令,查看上下文切换是否频繁
- ni 高优先级应用所占用的 CPU 百分比
- wa 等待 I/O 设备所占用的 CPU 百分比,经常使用它来判断 I/O 问题,过高输入输出设备可能存在非常明显的瓶颈
- hi 硬中断所占用的 CPU 百分比;
- si 软中断所占用的 CPU 百分比;
- st 在平常的服务器上这个值很少发生变动,因为它测量的是宿主机对虚拟机的影响,即虚拟机等待宿主机 CPU 的时间占比,这在一些超卖的云服务器上,经常发生
- id 空闲 CPU 百分比。
一般地,我们比较关注空闲 CPU 的百分比,它可以从整体上体现 CPU 的利用情况。
统计信息区的前5行是系统整体的系统信息 Tasks: 140 total, 1 running, 139 sleeping, 0 stopped, 0 zombie
- total 进程总数
- running 表示正在运行的运程数
- sleeping 睡眠的进程数
- stopped 停止的进程数
- zombie 僵尸进程数
内存信息Mem:物理内存
Mem: 8061076k total, 6813244k used, 1247832k free, 168176k buffers
Swap: 8388604k total, 7760k used, 8380844k free, 1846060k cached
- total:物理内存总量。
- free:物理空闲内存量。
- used:物理已使用内存量。
- buff/cache:物理内核缓存内存量。Swap:交换区
- total:交换区总量。
- free:交换区空闲量。
- used:交换区使用量。
- avail Mem:交换区可用量
2-1、vmstat命令
比较关注的有下面几列:
- b 如果系统有负载问题,就可以看一下 b 列(Uninterruptible Sleep),它的意思是等待 I/O,可能是读盘或者写盘动作比较多;
- si/so 显示了交换分区的一些使用情况,交换分区对性能的影响比较大,需要格外关注;
- cs 每秒钟上下文切换(Context Switch)的数量,如果上下文切换过于频繁,就需要考虑是否是进程或者线程数开的过多。
每个进程上下文切换的具体数量,可以通过查看内存映射文件获取:
cat /proc/2788/status