Linux提供一些与内存管理的命令,可以通过这些命令加深Linux内存的管理。
1. free
free
命令用于显示系统中空闲和已使用的内存情况。
# free -h
total used free shared buff/cache available
Mem: 7.5Gi 3.1Gi 568Mi 2.0Mi 3.9Gi 4.2Gi
Swap: 4.0Gi 12Mi 4.0Gi
free:未被使用的物理内存大小,free = total - used - buffers - cache
available:从应用程序的角度看到的可用内存数量
buff/cache,在linux内核 2.4中已统一
buffer:buffer cache缓冲区。一个块被调入内存,它存储在缓冲区
cache:page cache页高速缓存。对块设备文件的缓存
2. top
top
命令动态显示运行中的进程及其资源占用情况。top
命令使用方法如下:
top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]
- d:指定更新的间隔,以秒计算
- q:没有任何延迟的更新
- c:显示进程完整的路径与名称
- S:累积模式,会将己完成或消失的子行程的CPU时间累积起来
- s:安全模式
- i:不显示任何闲置(Idle)或无用(Zombie)的行程
- n:显示更新的次数,完成后将会退出top
举例如下:
# top
top - 20:17:08 up 48 days, 2:58, 61 users, load average: 0.20, 0.26, 0.31
Tasks: 611 total, 1 running, 577 sleeping, 6 stopped, 27 zombie
%Cpu(s): 0.9 us, 0.4 sy, 0.0 ni, 98.6 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 7701.1 total, 745.7 free, 2937.8 used, 4017.6 buff/cache
MiB Swap: 4096.0 total, 4084.0 free, 12.0 used. 4465.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3718638 u202121+ 20 0 2326476 31160 12240 S 5.6 0.4 0:07.44 vim
3718646 u202121+ 20 0 527892 73116 46344 S 2.3 0.9 0:02.99 python3
3714058 u202121+ 20 0 2326600 32560 12448 S 2.0 0.4 0:11.30 vim
3714063 u202121+ 20 0 528032 73532 46524 S 0.7 0.9 0:04.24 python3
11 root 20 0 0 0 0 I 0.3 0.0 16:15.94 rcu_sched
424 root 20 0 0 0 0 S 0.3 0.0 1:52.90 jbd2/dm-0-8
2854800 u202121+ 20 0 1256924 87572 33560 S 0.3 1.1 1:21.55 node
2866993 u202121+ 20 0 1019480 160492 38452 S 0.3 2.0 3:41.54 node
3707543 u202121+ 20 0 2326636 31520 12520 S 0.3 0.4 0:09.03 vim
3707555 u202121+ 20 0 528156 72668 45248 S 0.3 0.9 0:02.82 python3
3710188 u202121+ 20 0 14064 5964 4484 S 0.3 0.1 0:00.29 sshd
3718785 u202121+ 20 0 14064 6000 4520 S 0.3 0.1 0:00.07 sshd
3719355 u202121+ 20 0 2325792 30752 12568 S 0.3 0.4 0:00.92 vim
3721450 u202121+ 20 0 14064 5856 4388 S 0.3 0.1 0:00.03 sshd
3722435 root 20 0 9800 4556 3248 R 0.3 0.1 0:00.14 top
1 root 20 0 170316 13000 7496 S 0.0 0.2 1:51.65 systemd
上述输出结果,
第一行:当前时间、系统启动时间、当前系统登录用户数目、平均负载
第二行:进程情况
- 进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数
第三行:CPU状态
- 用户占用、系统占用、优先进程占用、闲置进程占用。
第四行:内存状态
- 平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存
- 第五行:交换状态
- 平均可用交换容量、已用容量、闲置容量、高速缓存容量
各列含义如下:
- PRI,优先级
- NI : nice值。负值表示高优先级,正值表示低优先级
- RES(Memory usage):—该进程占用的物理内存的总数量,单位是KB
S
表示进程状态- D = uninterruptible sleep,不可中断的睡眠状态
- I = idle
- R = running
- S = sleeping
- T = stopped by job control signal
- t = stopped by debugger during trace
- Z = zombie,僵尸进程
3. vmstat
vmstat
展示虚拟内存统计信息(如果是macOS,命令则为vm_stat
),
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 12288 823320 408564 3706324 0 0 0 1 1 0 0 0 100 0 0
vmstat -s
,
# vmstat -s
7885920 K total memory
3067648 K used memory
3355200 K active memory
2286892 K inactive memory
704668 K free memory
408564 K buffer memory
3705040 K swap cache
4194300 K total swap
12288 K used swap
4182012 K free swap
3583664 non-nice user cpu ticks
36758 nice user cpu ticks
855159 system cpu ticks
4984219675 idle cpu ticks
311890 IO-wait cpu ticks
0 IRQ cpu ticks
227848 softirq cpu ticks
0 stolen cpu ticks
4275793 pages paged in
59660059 pages paged out
8688 pages swapped in
38863 pages swapped out
298345489 interrupts
1085176864 CPU context switches
1679476743 boot time
49395429 forks