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
  USER:进程所有者
  PR:进程的优先级别,越小越优先被执行
  NInice:值
  VIRT:进程占用的虚拟内存
  RES:进程占用的物理内存
  SHR:进程使用的共享内存
  S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
  %CPU:进程占用CPU的使用率
  %MEM:进程使用的物理内存和总内存的百分比
  TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
  COMMAND:进程启动命令名称

 

 

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 所下达的指令名称
Logo

更多推荐