1. /proc/meminfo
查看RAM使用情况最简单的方法是通过/proc/meminfo
。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo
列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。
MemTotal: 65736300 kB
MemFree: 61483264 kB
MemAvailable: 63295320 kB
Buffers: 199996 kB
Cached: 1853200 kB
SwapCached: 0 kB
Active: 2275296 kB
Inactive: 1196928 kB
Active(anon): 1219904 kB
Inactive(anon): 24528 kB
Active(file): 1055392 kB
Inactive(file): 1172400 kB
Unevictable: 32 kB
Mlocked: 32 kB
SwapTotal: 66876412 kB
SwapFree: 66876412 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 1419252 kB
Mapped: 410880 kB
Shmem: 26636 kB
Slab: 316264 kB
SReclaimable: 196264 kB
SUnreclaim: 120000 kB
KernelStack: 20080 kB
PageTables: 54428 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 99744560 kB
Committed_AS: 7794816 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: 384772 kB
DirectMap2M: 8822784 kB
DirectMap1G: 59768832 kB
MemTotal: 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小) MemFree: LowFree与HighFree的总和,被系统留着未使用的内存 Buffers: 用来给文件做缓冲大小 Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ). SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。 Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用. Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径. HighTotal: HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。 LowTotal: LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。 SwapTotal: 交换空间的总大小 SwapFree: 未被使用交换空间的大小 Dirty: 等待被写回到磁盘的内存大小。 Writeback: 正在被写回到磁盘的内存大小。 AnonPages:未映射页的内存大小 Mapped: 设备和文件等映射的大小。 Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。 SReclaimable:可收回Slab的大小 SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab) PageTables:管理内存分页页面的索引表的大小。 NFS_Unstable:不稳定页表的大小 Bounce: Committed_AS: VmallocTotal: 可以vmalloc虚拟内存大小 VmallocUsed: 已经被使用的虚拟内存大小。 |
备注:
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
2、top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理。
top - 10:32:33 up 10 days, 2 min, 1 user, load average: 0.34, 0.13, 0.05
任务: 535 total, 1 running, 362 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.4 us, 0.2 sy, 0.0 ni, 99.0 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65736300 total, 61232472 free, 2200364 used, 2303464 buff/cache
KiB Swap: 66876412 total, 66876412 free, 0 used. 63139372 avail Mem
进程 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
1898 wsw 20 0 6312308 317052 98232 S 6.3 0.5 10:44.78 gnome-shell
1711 wsw 20 0 515208 81308 50988 S 3.6 0.1 2:45.13 Xorg
28159 wsw 20 0 2002716 310040 146712 S 3.0 0.5 0:38.59 Web Content
2988 wsw 20 0 887524 72096 50196 S 2.0 0.1 1:31.72 gnome-term+
27554 wsw 20 0 2664744 385684 149224 S 1.7 0.6 10:43.33 firefox
20178 root 20 0 43960 4016 3180 R 1.0 0.0 0:01.64 top
1 root 20 0 225708 9660 6888 S 0.3 0.0 0:21.00 systemd
1070 message+ 20 0 51768 6220 3860 S 0.3 0.0 0:16.15 dbus-daemon
2 root 20 0 0 0 0 S 0.0 0.0 0:00.14 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:+
6 root 20 0 0 0 0 I 0.0 0.0 0:00.15 kworker/u6+
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_+
8 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
9 root 20 0 0 0 0 I 0.0 0.0 0:16.33 rcu_sched
10 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.94 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
第一部分 -- 最上部的 系统信息栏 : 第一行(top): “10:32:33”为系统当前时刻; “10 days, 2 min”为系统启动后到现在的运作时间; “1 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程; 第二行(Tasks): “535 total”为当前系统进程总数; “1 running”为当前运行中的进程数; “362 sleeping”为当前处于等待状态中的进程数; “0 stoped”为被停止的系统进程数; “0 zombie”为被复原的进程数; 第三行(Cpus): 分别表示了 CPU 当前的使用率; 第四行(Mem): 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量; 第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
第二部分 -- 中间部分的内部命令提示栏:
第三部分 -- 最下部分的进程列表栏: PID:进程的ID |
3、free
free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 65736300 2198404 61234760 60092 2303136 63142164
交换: 66876412 0 66876412
下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
4. GNOME System Monitor
GNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看CPU及内存使用情况的方法。
1 | $ gnome-system-monitor |
5. memstat
memstat是一个有效识别executable(s), process(es) and shared libraries使用虚拟内存情况的命令。给定一个进程ID,memstat可以列出这个进程相关的可执行文件、数据和共享库。
root@lavi-PowerEdge-T630:/tmp# memstat -p 3028
117819000k: PID 3028 (/usr/lib/deja-dup/deja-dup-monitor)
4k( 4k): /run/user/1002/dconf/user 3028
4688k( 0k): /usr/lib/locale/locale-archive 3028
2080k( 28k): /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4 3028
2256k( 204k): /usr/lib/x86_64-linux-gnu/libgirepository-1.0.so.1.0.0 3028
2076k( 24k): /usr/lib/x86_64-linux-gnu/libdatrie.so.1.3.3 3028
2084k( 32k): /usr/lib/x86_64-linux-gnu/libthai.so.0.3.0 3028
2516k( 460k): /usr/lib/x86_64-linux-gnu/libgstbase-1.0.so.0.1401.0 3028
2368k( 304k): /usr/lib/x86_64-linux-gnu/libsecret-1.so.0.0.0 3028
2136k( 80k): /usr/lib/x86_64-linux-gnu/librest-0.7.so.0.0.0 3028
6、ps命令
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。
参数:
- -A :所有的进程均显示出来,与 -e 具有同样的效用;
- -a : 显示现行终端机下的所有进程,包括其他用户的进程;
- -u :以用户为主的进程状态 ;
- x :通常与 a 这个参数一起使用,可列出较完整信息。
root@lavi-PowerEdge-T630:/tmp# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 225708 9660 ? Ss 8月24 0:21 /sbin/init spl
root 2 0.0 0.0 0 0 ? S 8月24 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 8月24 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? I 8月24 0:00 [kworker/u64:0
root 7 0.0 0.0 0 0 ? I< 8月24 0:00 [mm_percpu_wq]
- UID 代表执行者身份
- PID 进程的ID号!
- PPID 父进程的ID;
- C CPU使用的资源百分比
- PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
- NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
- ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是『 - 』
- SZ 使用掉的内存大小;
- WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
- TTY 登入者的终端机位置;
- TIME 使用掉的 CPU 时间。
- CMD 所下达的指令名称