如何排查内存飙高-Linux top命令快速入门

  Linux系统出现了性能问题,一般我们可以通过 top、iostat、free、vmstat和ifstat等命令来初步定位问题。其中,top命令是Linux下常用的性能分析工具,用于实时监测系统资源使用状况,包括进程、cpu和内存等信息。主要参考指标是load average、%CPU和%MEM。

  我们基于如何爬虫Linux系统内存持续飙高这个问题介绍top命令。

§1、用free查看系统内存使用情况

  free命令是在Linux系统中用于显示系统内存使用情况的工具。它提供有关系统中物理内存、交换空间以及内存的详细信息。通过如下命令查看内存使用情况:

free -m

  以M为单位显示内存使用情况,执行结果示例如下:

              total        used        free      shared  buff/cache   available
Mem:      259160340    80052024    36879732        8536   140428584   177047908
Swap:             0           0           0

  各个指标的业务含义:

  • total:物理内存的总大小。
  • used:已使用无论内存大小。
  • free:空闲物理内存大小。
  • Shared:表示多个进程共享的物理内存总额。
  • buffers/cache:计算缓冲区和缓存后的实际使用情况。
  • available:立即可用的物理内存大小。

  通过free命令的输出结果,可以直观地了解系统内存的使用情况,有助于更好地管理系统资源,提高系统的性能和稳定性。

§2、top命令

  语法:top [选项]

  一般直接在终端输入top命令,不添加选项。可以添加如下选项:

1    展开多核cpu显示(常用)
-b      以批处理模式操作
-c      显示完整的治命令
-d      屏幕刷新间隔时间
-I       忽略失效过程
-s      保密模式
-S      累积模式
-i<时间>    设置刷新间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数>   循环显示的次数3、在该命令中常用快捷键
h    显示快捷键帮助
k    终止一个进程
i     开/关忽略闲置和僵死进程
q    退出程序
r     重新安排一个进程的优先级别
S    切换到累计模式
s    更改刷新间隔时间,单位秒
f,F   从当前显示中添加或者删除项目
o,O   改变显示项目的顺序
l     切换显示平均负载和启动时间信息
m    切换显示内存信息
t     切换显示进程和CPU状态信息
c    切换显示命令名称和完整命令行
M    根据内存使用大小排序
P    根据CPU使用率进行排序 (默认排序)
T    根据时间/累计时间进行排序
w    将当前设置写入~/.toprc文件中

§3、实例

top - 18:17:22 up 8:52, 1 user, load average: 0.05, 0.04, 0.05
Tasks: 99 total, 2 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 739932 total, 353944 free, 125284 used, 260704 buff/cache
KiB Swap: 1044476 total, 1044476 free, 0 used. 459304 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
47 root 20 0 0 0 0 S 0.1 0.0 0:36.55 kworker/0:1
643 root 20 0 21668 1284 972 S 0.1 0.2 0:18.13 irqbalance
1668 root 20 0 0 0 0 S 0.1 0.0 0:01.08 kworker/1:1
1 root 20 0 127968 6480 4096 S 0.0 0.9 0:01.93 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.23 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.02 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:01.95 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain

  第一行展示的是任务队列信息,与 uptime 命令的执行结果一模一样。在排查问题的时候,重点看load average、%CPU和MEM三个指标。

§4、参数说明

  前5行为系统总体资源统计情况,可以发现此结果集与 free -M的结果集有交集。

top -       系统当前时间
up       系统已开机多长时间
user      当前用户数
load average cpu平均负载,三个数值分别为,1分钟,5分钟,15分钟
Tasks    系统当前进程数,total:总进程数,running:正在运行的进程数,sleeping:睡眠的进程数,stopped:停止的进程数,zombie:僵尸进程数
%Cpu(s) cpu使用率,us:用户使用cpu百分百,sy:系统内核使用cpu百分百,id:剩余的cpu百分百
Mem     内存使用信息,total:总内存大小,free:空闲的内存,used:已使用的内存,buff/cache:缓存的内存大小
Swap    虚拟内存信息
PID     进程id
USER     进程所有者
PR       优先级
NI       nice值,负值表示高优先级,正值表示低优先级
VIRT       进程使用的虚拟内存总量
RES       进程使用的物理内存大小
SHR       共享内存大小
S    进程状态,D 不可中断的睡眠状态,R 运行,S 睡眠,T 跟踪/停止,Z 僵尸进程
%CPU      进程使用的CPU占用百分比
%MEM      进程使用的物理内存百分比
TIME+      进程使用的CPU时间总计
COMMAND   命令名原文来自

Reference

posted @ 2021-03-07 15:27  楼兰胡杨  阅读(80)  评论(0编辑  收藏  举报