Table of Contents
free命令
vmstat命令
top命令
cat /proc/meminfo
ps aux命令
free 命令会显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存等。
$ free
total used free shared buff/cache available
Mem: 8047480 6142828 154116 465584 1750536 1078080
Swap: 8267772 1446400 6821372
释义:
Mem:内存使用情况。
Swap:交换空间(虚拟内存)使用情况。
total:系统总共可用物理内存、交换空间大小。
used:已经被使用的物理内存、交换空间大小。
free:剩余可用物理内存、交换空间大小。
shared:被共享使用的物理内存大小。
buff/cache:被 buffer 和 cache 使用的物理内存大小。
available:还可以被应用程序使用的物理内存大小。
free
total used free shared buffers cached
Mem: 601064 482856 118208 32648 1748 207788
-/+ buffers/cache: 273320 327744
Swap: 0 0 0
释义:
Mem行: 显示物理内存情况。
列名 | 含义 |
---|---|
total | 内存总量 |
used | 使用内存 |
free | 可用内存 |
shared | 共享内存 |
buffers | buffer缓存,可回收 |
cached | cached缓存,可回收 |
-/+buffers/cache行: 显示基于应用角度考虑的内存情况,也可理解为真实的内存使用情况。(计算已使用内存时减去buffers/cache,计算可使用内存时加上buffers/cache。)这里的buffers指Buffer cache(缓冲区缓存),cache指Page cache(页面缓存)。在当前的Linux内核中,Page cache是针对内存页的缓存。也就是说,如果有内存是以page进行分配管理的,都可以使用Page cache作为其缓存来管理使用。当然,不是所有的内存都是以页(page)进行管理的,也有很多是针对块(block),这部分内存使用如果要用到cache功能,则都集中到buffer cache中来使用。
列名 | 含义 |
---|---|
used | 实际使用内存 |
free | 实际可用内存 |
Mem行和buffers/cache行的各列计算关系如下:(M代表Mem行,B代表buffers/cache行)
total(M) = used(m) + free(m)
total(M) = used(B) + free(B)
used(M) = used(B) + buffers(M) + cached(M)
free(B) = free(M) + buffers(M) + cached(M)
Swap行: 显示交换空间使用情况,交换空间(swap space)是磁盘上的一块区域,可以是一个分区,也可以是一个文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务。而当系统需要访问swap上存储的内容时,再将swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。
列名 | 含义 |
---|---|
used | 实际使用内存 |
free | 实际可用内存 |
free 命令中的信息都来自于 /proc/meminfo 文件。见cat /proc/meminfo
常见用法:
$ free --help
Usage:
free [options]
Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output
--help display this help and exit
-V, --version output version information and exit
For more details see free(1).
vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控,是对系统的整体情况进行的统计。
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 338176 143144 384176 2212096 0 0 43 19 3 25 3 1 96 0 0
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。【interrupt】
cs: 每秒上下文切换数。 【count/second】
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
常见用法:
vmstat 1 //每隔1s打印一次
vmstat 1 5 //每隔1秒打印一次,打印五次
vmstat -s //显示内存相关统计信息及多种系统活动数量
$ vmstat --help
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition partition specific statistics
-S, --unit define display unit
-w, --wide wide output
-t, --timestamp show timestamp
-h, --help display this help and exit
-V, --version output version information and exit
For more details see vmstat(8).
使用top命令,可以查看正在运行的进程和系统负载信息,包括cpu负载、内存使用、各个进程所占系统资源等,top命令以一定频率动态更新这些统计信息。
$ top
top - 11:06:47 up 3 days, 19:00, 7 users, load average: 0.18, 0.21, 0.15
Tasks: 280 total, 1 running, 225 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.4 us, 1.0 sy, 0.0 ni, 88.2 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 8047472 total, 142028 free, 5307464 used, 2597980 buff/cache
KiB Swap: 8267772 total, 7929596 free, 338176 used. 1780512 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10335 cll 20 0 214088 79724 4720 S 34.9 1.0 56:57.82 synergyc
1039 root 20 0 584644 217704 168232 S 3.0 2.7 59:35.71 Xorg
4697 root 20 0 1231768 35196 4216 S 2.7 0.4 216:14.55 vmware-hostd
1563 cll 20 0 1514936 86452 27684 S 2.3 1.1 123:58.21 compiz
29317 cll 20 0 642576 50860 20452 S 1.3 0.6 10:24.93 /usr/bin/x-term
18307 root 20 0 0 0 0 I 0.7 0.0 0:05.73 kworker/1:2
799 avahi 20 0 45572 3868 2912 S 0.3 0.0 24:05.96 avahi-daemon
2245 cll 20 0 1928640 218216 42808 S 0.3 2.7 8:18.58 TeamViewer
8399 root 20 0 15236 3844 2668 S 0.3 0.0 3:34.23 sh
20069 cll 20 0 43676 3708 3000 R 0.3 0.0 0:00.07 top
31219 cll 20 0 825672 232332 32188 S 0.3 2.9 8:05.88 code
1 root 20 0 185460 4692 2904 S 0.0 0.1 0:07.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.43 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:03.95 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 9:40.74 rcu_sched
9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.17 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:01.26 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
14 root rt 0 0 0 0 S 0.0 0.0 0:01.31 watchdog/1
15 root rt 0 0 0 0 S 0.0 0.0 0:00.23 migration/1
16 root 20 0 0 0 0 S 0.0 0.0 0:07.94 ksoftirqd/1
18 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:
序号 列名 含义
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的。/proc/meminfo所包含的信息比”free”等命令要丰富得多,但也很复杂,感兴趣的话可以看看这篇文章:http://linuxperf.com/?p=142,对 /proc/meminfo 有较详细的解释。
$ cat /proc/meminfo
MemTotal: 8047472 kB
MemFree: 137996 kB
MemAvailable: 1775804 kB
Buffers: 384580 kB
Cached: 1910796 kB
SwapCached: 11168 kB
Active: 5993756 kB
Inactive: 1423988 kB
Active(anon): 4886780 kB
Inactive(anon): 834700 kB
Active(file): 1106976 kB
Inactive(file): 589288 kB
Unevictable: 64 kB
Mlocked: 64 kB
SwapTotal: 8267772 kB
SwapFree: 7929596 kB
Dirty: 124 kB
Writeback: 0 kB
AnonPages: 5115296 kB
Mapped: 440068 kB
Shmem: 647576 kB
Slab: 307660 kB
SReclaimable: 246212 kB
SUnreclaim: 61448 kB
KernelStack: 13136 kB
PageTables: 69000 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 12291508 kB
Committed_AS: 11107976 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 270940 kB
DirectMap2M: 7997440 kB
DirectMap1G: 0 kB
ps aux 命令可以查看系统中各个进程的运行情况,包括了进程占用的内存,%MEM 列就是各个进程的内存占用百分比。
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 185460 4692 ? Ss Jun15 0:07 /sbin/init splash
root 2 0.0 0.0 0 0 ? S Jun15 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< Jun15 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? I< Jun15 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S Jun15 0:03 [ksoftirqd/0]
root 8 0.1 0.0 0 0 ? I Jun15 9:41 [rcu_sched]
root 9 0.0 0.0 0 0 ? I Jun15 0:00 [rcu_bh]
root 10 0.0 0.0 0 0 ? S Jun15 0:00 [migration/0]
root 11 0.0 0.0 0 0 ? S Jun15 0:01 [watchdog/0]