1、Linux中程序性能监控

发布于 2022年 01月 24日 13:07

腾讯服务器

88 / 年

  • 上海/北京/广州...
  • 2核 2G 4M
  • Linux/Windows
新年大优惠

腾讯服务器

425 / 年

  • 上海/北京/广州...
  • 4核 8G 10M
  • Linux/Windows
年度最便宜

腾讯服务器

1249 / 年

  • 上海/北京/广州...
  • 8核 16G 14M
  • Linux/Windows
点击查看

一、内存

在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

推荐文章