当前位置:3016.com-金沙城中心官网 > 系统 > Linux 查看进程消耗内存情况总结

Linux 查看进程消耗内存情况总结

文章作者:系统 上传时间:2019-12-01

 

在Linux中,有为数不少命令或工具查看内部存款和储蓄器使用状态,前些天大家来寻访怎么样查看进度消耗、占用的内部存款和储蓄器情状,Linux的内部存储器管理和连锁概念要比Windows复杂一些。以前,大家供给领会一下Linux系统下边关于内存的专项使用名词和职业术语概念:

 

 

物理内部存款和储蓄器和虚构内部存款和储蓄器

 

物理内部存款和储蓄器:正是系统硬件提供的内部存款和储蓄器大小,是当真的内部存款和储蓄器,日常叫做内部存款和储蓄器条。也叫随机存取存款和储蓄器(random access memory,RAM)又称之为“随机存款和储蓄器”,是与CPU直接交流数据的在那之中存款和储蓄器,也叫主存(内部存款和储蓄器卡塔尔(英语:State of Qatar)。

 

设想内存:相对于物理内部存款和储蓄器,在Linux下还应该有贰个设想内部存款和储蓄器的概念,虚拟内部存款和储蓄器正是为着知足物理内部存款和储蓄器的紧缺而提出的布署,它是选用磁盘空间虚构出的一块逻辑内部存储器,用作设想内部存款和储蓄器的磁盘空间被叫做交换空间(Swap Space)。Linux会在物理内部存储器不足时,使用设想内部存储器,内核会把一时半刻不用的内存块音讯写到虚构内部存款和储蓄器,这样大意内部存款和储蓄器就赢得了自由,那块儿内部存款和储蓄器就能够用于别的指标,而急需用到那一个剧情的时候,那一个音信就能被再度从虚构内部存储器读入物理内存。

 

 

Linux的buffers与cached

 

在Linux中时常开采没事的内部存款和储蓄器比比较少,就像是具有的内部存款和储蓄器都被消耗殆尽了,表面上看是内存非常不够用了,相当多新手看到内部存款和储蓄器被“消耗殆尽”特别不安,其实那些是因为Linux系统将空闲的内存用来做磁盘文件数量的缓存。那些致令你的系统看起来处于内存特别殷切的光景。不过事实上不是那般。这一个不一样于Windows的内部存款和储蓄器管理。Linux会利用空闲的内部存款和储蓄器来做cached & buffers。

 

 

buffers是指用来给块设备做的缓冲大小(块设备的读写缓冲区),它只记录文件系统的metadata以致tracking in-flight pages.

 

Buffers are associated with a specific block device, and cover caching of filesystem metadata as well as tracking in-flight pages. The cache only contains parked file data. That is, the buffers remember what's in directories, what file permissions are, and keep track of what memory is being written from or read to for a particular block device. The cache only contains the contents of the files themselves.

 

  

cached是当作page cache的内部存款和储蓄器, 文件系统的cache。你读写文件的时候,Linux内核为了加强读写质量与进程,会将文件在内部存款和储蓄器中举办缓存,那有的内部存款和储蓄器就是Cache Memory(缓存内存卡塔尔国。固然你的程序运转停止后,Cache Memory也不会自行释放。那就能引致您在Linux系统中前后相继往往读写文件后,你会开掘可用物理内部存款和储蓄器会超级少。其实那缓存内部存储器(Cache Memory卡塔尔国在您须要使用内部存款和储蓄器的时候会自动释放,所以您不要担心未有内部存款和储蓄器可用

 

Cached is the size of the page cache. Buffers is the size of in-memory block I/O buffers. Cached matters; Buffers is largely irrelevant.

 

Cached is the size of the Linux page cache, minus the memory in the swap cache, which is represented by SwapCached (thus the total page cache size is Cached + SwapCached). Linux performs all file I/O through the page cache. Writes are implemented as simply marking as dirty the corresponding pages in the page cache; the flusher threads then periodically write back to disk any dirty pages. Reads are implemented by returning the data from the page cache; if the data is not yet in the cache, it is first populated. On a modern Linux system, Cached can easily be several gigabytes. It will shrink only in response to memory pressure. The system will purge the page cache along with swapping data out to disk to make available more memory as needed.

Buffers are in-memory block I/O buffers. They are relatively short-lived. Prior to Linux kernel version 2.4, Linux had separate page and buffer caches. Since 2.4, the page and buffer cache are unified and Buffers is raw disk blocks not represented in the page cache—i.e., not file data. The Buffers metric is thus of minimal importance. On most systems, Buffers is often only tens of megabytes.

 

 

Linux分享内部存储器

 

分享内部存款和储蓄器是经过间通讯中最轻巧易行的艺术之生机勃勃。分享内部存储器允许五个或更加的多进程采访同一块内部存款和储蓄器,就好似malloc(卡塔尔国函数向不相同进程再次来到了指向同一个物理内部存款和储蓄器区域的指针。当一个历程校勘了那块地方中的内容的时候,其它进程都会意识到这些。其实所谓分享内部存储器,正是多个经过间同盟地动用相近段物理内存空间,它是透过将长期以来段物理内部存款和储蓄器映射到不一致进程的杜撰空间来落到实处的。由于映射到分裂进度的虚构空间中,不一样进度能够直接选择,不须要像信息队列这样举办理并答复制,所以分享内部存款和储蓄器的功能极高。分享内部存款和储蓄器能够通过mmap(卡塔尔(英语:State of Qatar)映射普通文书编写制定来兑现,也足以System V分享内部存款和储蓄器机制来得以完成,System V是透过照射特殊文件系统shm中的文件落到实处进度间的分享内部存款和储蓄器通信,也正是说每一种共享内部存款和储蓄器区域对应特别文件系统shm中的二个文本。

 

 

别的,大家还必需领悟XC90SS、PSS、USS等有关概念:

 

     VSS – Virtual Set Size 虚构耗用内部存储器(包蕴分享库占用的内部存款和储蓄器)

     

EscortSS – Resident Set Size 其进行使物理内部存储器(包涵分享库占用的内存)

     

PSS – Proportional Set Size 实际接受的情理内部存款和储蓄器(比例分配分享库占用的内存)

     

USS – Unique Set Size 进度独自占用的物理内部存款和储蓄器(不包涵分享库占用的内部存款和储蓄器)

 

LX570SS(Resident set size),使用top命令可以查询到,是最常用的内部存款和储蓄器目标,表示经过占用的大要内部存款和储蓄器大小。然而,将各进度的大切诺基SS值相加,常常会压倒整个系统的内部存款和储蓄器消耗,那是因为EnclaveSS中带有了各进程间分享的内部存款和储蓄器。

 

PSS(Proportional set size)全体应用某分享库的次序均分该分享库占用的内部存款和储蓄器时,每一个进度占用的内部存款和储蓄器。显著全部进程的PSS之和就是系统的内部存款和储蓄器使用量。它会更标准一些,它将分享内部存储器的轻重实行平均后,再分摊到各进度上去。

 

USS(Unique set size 卡塔尔国进度独自占用的内部存款和储蓄器,它是PSS中友好的有个别,它只计算了经过独自占用的内部存款和储蓄器大小,不分包其余分享的局地。

     

          

故此上面介绍的通令,某个查看进度的设想内部存款和储蓄器使用,有个别是翻开进度的HavalSS或实际物理内部存款和储蓄器。在描述的时候,我们会标记这么些音讯。

 

 

 

top命令查看

 

履行top命令后,实践SHIFT +F ,能够筛选按某列排序,比如选取n后,就能够按字段%MEM排序

 

图片 1

 

 

自然也足以行使shift+m 或大写键M 让top命令按字段%MEM来排序,当然你也得以按VIRT(虚构内部存款和储蓄器)、SWAP(进程使用的SWAP空间)、RES(实际利用物理内存,当然这里由于涉及分享内存缘故,你看来的骨子里内部存款和储蓄器超大卡塔尔

 

 

%MEM -- Memory usage (RES)

 

     A task's currently used share of available physical memory

     

VIRT -- virtual memory 

   

    The  total  amount  of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that have been swapped out. (Note: you can define the STATSIZE=1 environment variable and the VIRT will be calculated from the /proc/#/state VmSize field.)

 

    VIRT = SWAP + RES

 

SWAP  --  Swapped size (kb)

 

   The swapped out portion of a task’s total virtual memory image.

 

RES  --  Resident size (kb)

       

    RES = CODE + DATA.

 

         

 

是或不是有人会感到奇异,为啥%MEM这一列的值加起来会超过100吧? 那个是因为此处总括的时候包蕴了分享内部存款和储蓄器的案由,其它由于分享内部存款和储蓄器的案由,你见到进程使用VIRT或RES都十分高。由于好多的物理内部存款和储蓄器常常在五个应用程序之间分享,名称为实际行使物理内部存款和储蓄器(猎豹CS6SS,对应top命令里面包车型地铁RES)的那一个正式的内存耗用衡量目标会大大高估内部存款和储蓄器耗用状态。

 

图片 2

 

 

 

ps命令查看

 

 

 

使用ps命令找寻占用内部存款和储蓄器能源最多的18个经过(数量得以擅设)

 

 

# ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

oracle   32147 11.0 51.2 13252080 12666320 ?   Rs   Aug24 163:16 ora_s000_SCM2

oracle   32149 14.2 50.9 13250344 12594264 ?   Ss   Aug24 210:41 ora_s001_SCM2

oracle   32153  4.2 49.6 13250820 12279432 ?   Ss   Aug24  62:27 ora_s003_SCM2

oracle   32155  2.5 48.6 13250268 12040732 ?   Ss   Aug24  38:21 ora_s004_SCM2

oracle   32157  1.2 44.5 13250296 11011708 ?   Ss   Aug24  18:31 ora_s005_SCM2

oracle   32151  2.7 39.7 13350436 9829944 ?    Ss   Aug24  41:18 ora_s002_SCM2

oracle   32159  0.5 38.9 13250704 9625764 ?    Ss   Aug24   8:18 ora_s006_SCM2

oracle   32161  0.2 26.3 13250668 6507244 ?    Ss   Aug24   3:38 ora_s007_SCM2

oracle   32129  0.0 25.5 13299084 6324644 ?    Ss   Aug24   1:25 ora_dbw0_SCM2

oracle   32181  0.0 15.8 13250152 3913260 ?    Ss   Aug24   0:56 ora_s017_SCM2

oracle   32145  2.7 15.3 13255256 3786456 ?    Ss   Aug24  40:11 ora_d000_SCM2

oracle   32127  0.0 15.2 13248996 3762860 ?    Ss   Aug24   0:05 ora_mman_SCM2

oracle   32163  0.0 14.2 13250108 3525160 ?    Ss   Aug24   1:04 ora_s008_SCM2

oracle   32165  0.0  8.1 13250172 2007704 ?    Ss   Aug24   0:37 ora_s009_SCM2

oracle   32169  0.0  6.6 13250060 1656864 ?    Ss   Aug24   0:08 ora_s011_SCM2

oracle   32177  0.0  6.0 13250148 1498760 ?    Ss   Aug24   0:12 ora_s015_SCM2

oracle   32187  0.0  5.1 13250084 1267384 ?    Ss   Aug24   0:06 ora_s020_SCM2

oracle   32179  0.0  5.1 13250584 1280156 ?    Ss   Aug24   0:05 ora_s016_SCM2

oracle   32167  0.0  5.0 13250060 1248668 ?    Ss   Aug24   0:08 ora_s010_SCM2

oracle   32175  0.0  3.4 13250596 857380 ?     Ss   Aug24   0:03 ora_s014_SCM2

 

 

#ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

 

翻看进度占用的实际上物理内部存款和储蓄器(与smem看见实际物理内存大小有出入,这里解释一下:SIZE: 进度使用的地点空间, 假设进度映射了100M的内存, 进度的地点空间将告诉为100M内部存款和储蓄器. 事实上, 那一个尺寸不是一个程序实际利用的内部存储器数. 所以这里见到的内存跟smem看见的大小有出入)

 

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1

 

图片 3

 

 

ps aux  | awk '{print $6/1024 " MBtt" $11}'  | sort -n

 

 

 

 

smem命令查看

 

 

关于smem命令,这里不做牵线,直接参谋链接Linux监察和控制工具介绍体系——smem

 

 

#smem -rs pss

 

图片 4

** 

** 

** 

** 

pmap命令查看

 

 

# ps -ef | grep tomcat

# pmap 32341

 

图片 5

 

# pmap -x  32341

 

The -x option can be used to provide information about the memory allocation and mapping types per mapping. The amount of resident, non-shared anonymous, and locked memory is shown for each mapping。

 

图片 6

 

 

 

 

python脚本查看

 

 

网络有个python脚本总结程序或进度的内部存款和储蓄器使用情况,地址坐落于

 

python ps_mem.py

 

图片 7

 

 

[root@mylnx03 ~]# python ps_mem.py -h

Usage: ps_mem [OPTION]...

Show program core memory usage

 

  -h, -help                   Show this help

  -p <pid>[,pid2,...pidN]     Only show memory usage PIDs in the specified list

  -s, --split-args            Show and separate by, all command line arguments

  -t, --total                 Show only the total value

  -d, --discriminate-by-pid   Show by process rather than by program

  -S, --swap                  Show swap information

  -w <N>                      Measure and show process memory every N seconds

[root@mylnx03 ~]# python ps_mem.py  -p 32341

 Private  +   Shared  =  RAM used       Program

 

411.2 MiB + 184.0 KiB = 411.4 MiB       java

---------------------------------

                        411.4 MiB

=================================

 

参照他事他说加以考察资料:

 

 

本文由3016.com-金沙城中心官网发布于系统,转载请注明出处:Linux 查看进程消耗内存情况总结

关键词: