#内存泄露# linux常用内存相关命令

Table of Contents

free命令

vmstat命令

top命令

cat /proc/meminfo

ps aux命令


free命令

  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共享内存
buffersbuffer缓存,可回收
cachedcached缓存,可回收

-/+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 -k:按照g的计数方式来显示内存信息。
  • free -m:按照m的计数方式来显示内存信息。
  • free -g:按照g的计数方式来显示内存信息。
  • free -t:按照总和的形式显示内存的使用信息。
  • free -s 5:周期性展示内存使用情况,意思为每隔5秒统计展示,直到我们按下ctrl +c 键取消统计为止。
  • free -s 2 -c 4:周期性展示统计内存信息。本篇实例为每隔2秒统计一次,统计4次。
  • free -V:查看版本信息
$ 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命令

  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 <dev>  partition specific statistics
 -S, --unit <char>      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命令

  使用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 的内部命令对进程的显示方式进行控制。内部命令如下:

  • s – 改变画面更新频率
  • l – 关闭或开启第一部分第一行 top 信息的表示
  • t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
  • m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
  • N – 以 PID 的大小的顺序排列表示进程列表
  • P – 以 CPU 占用率大小的顺序排列进程列表
  • M – 以内存占用率大小的顺序排列进程列表
  • h – 显示帮助
  • n – 设置在进程列表所显示进程的数量
  • q – 退出 top
  • s – 改变画面更新周期

序号 列名 含义

  • a PID 进程id
  • b PPID 父进程id
  • c RUSER Real user name
  • d UID 进程所有者的用户id
  • e USER 进程所有者的用户名
  • f GROUP 进程所有者的组名
  • g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
  • h PR 优先级
  • i NI nice值。负值表示高优先级,正值表示低优先级
  • j P 最后使用的CPU,仅在多CPU环境下有意义
  • k %CPU 上次更新到现在的CPU时间占用百分比
  • l TIME 进程使用的CPU时间总计,单位秒
  • m TIME+ 进程使用的CPU时间总计,单位1/100秒
  • n %MEM 进程使用的物理内存百分比
  • o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  • q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • r CODE 可执行代码占用的物理内存大小,单位kb
  • s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  • t SHR 共享内存大小,单位kb
  • u nFLT 页面错误次数
  • v nDRT 最后一次写入到现在,被修改过的页面数。
  • w S 进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
  • x COMMAND 命令名/命令行
  • y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
  • z Flags 任务标志,参考 sched.h

默认情况下仅显示比较重要的 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 键可以将当前的排序倒转。

 

 

cat /proc/meminfo

  /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命令

  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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值