您的位置:澳门新葡8455最新网站 > 澳门新葡8455最新网站 > linux下的top命令参数说明,查看进程消耗内存情况

linux下的top命令参数说明,查看进程消耗内存情况

发布时间:2019-12-02 18:02编辑:澳门新葡8455最新网站浏览(73)

     

    %mem 内部存款和储蓄器使用率
    virt 是设想内部存款和储蓄器
    res是常驻内部存款和储蓄器
    shr是分享内部存款和储蓄器

    在Linux中,有无数限令或工具查看内部存款和储蓄器使用处境,今日我们来看看哪些查看进程消耗、占用的内部存款和储蓄器意况,Linux的内部存款和储蓄器管理和有关概念要比Windows复杂一些。早前,我们要求精通一下Linux系统上面关于内部存款和储蓄器的专项使用名词和专门的学问术语概念:

    top命令下按f键能够看见详细表明
    * A: PID        = Process Id
    * E: USER       = User Name
    * H: PR         = Priority
    * I: NI         = Nice value
    * O: VIRT       = Virtual Image (kb)
    * Q: RES        = Resident size (kb)
    * T: SHR        = Shared Mem size (kb)
    * W: S          = Process Status
    * K: %CPU       = CPU usage
    * N: %MEM       = Memory usage (RES)
    * M: TIME+      = CPU Time, hundredths
    b: PPID       = Parent Process Pid
    c: RUSER      = Real user name
    d: UID        = User Id
    f: GROUP      = Group Name
    g: TTY        = Controlling Tty
    j: P          = Last used cpu (SMP)
    p: SWAP       = Swapped size (kb)
    l: TIME       = CPU Time
    r: CODE       = Code size (kb)
    s: DATA       = Data+Stack size (kb)
    u: nFLT       = Page Fault count
    v: nDRT       = Dirty Pages count
    y: WCHAN      = Sleeping in Function
    z: Flags      = Task Flags <sched.h>
    * X: COMMAND    = Command name/line

     

    top命令下要翻开有些顾客运转的历程:先输入u,然后输入顾客名,再回车

     

    VIRT:virtual memory usage。Virtual这几个词很神,日常解释是:virtual adj.虚的, 实质的, [物]有效的, 事实上的。到底是虚的依旧实的?让谷歌给Define之后,将就精通某个,正是那东西依然非物质的,不过有意义的,不发出在真正世界的,产生在软 件世界的等等。那些内存使用就是叁个施用据有的地点空间,只是要应用程序必要的,就全算在那地,而无论它的确用了从未有过。写程序怕出错,又无视占用的时 候,多开点内部存储器也是很符合规律的。
    RES:resident memory usage。常驻内部存款和储蓄器。这么些值就是该应用程序真的选拔的内部存款和储蓄器,但还恐怕有三个小标题,一是不怎么东西恐怕坐落于交换盘上了(SWAP),二是微微内部存款和储蓄器或然是分享的。
    SHR:shared memory。分享内存。正是说这一块内部存款和储蓄器空间有希望也被别的应用程序使用着;而Virt - Shr如同就是其大器晚成顺序所必要的还要未有分享的内部存款和储蓄器空间。
    DATA:数据占用的内部存款和储蓄器。借使top未有出示,按f键可以展现出来。这一块是的确的该程序须要的多少空间,是真正在运转中要接纳的。

    物理内部存款和储蓄器和设想内部存款和储蓄器

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

     

    top里面描述进度内部存款和储蓄器使用量的多寡来自/proc/$pid/statm那几个文件。通过观看kernel的代码就会弄清楚SH福睿斯,VIRT和RES这么些数值的切实可行意思。

    物理内部存款和储蓄器:便是系统硬件提供的内部存款和储蓄器大小,是的确的内部存款和储蓄器,日常叫做内部存款和储蓄器条。也叫随机存取存款和储蓄器(random access memory,RAM)又称之为“随机存储器”,是与CPU间接交流数据的中间存储器,也叫主存(内部存款和储蓄器卡塔尔国。

    Linux通过二个称作 task_statm 的函数来回到经过的内部存款和储蓄器使用意况

     

    int task_statm(struct mm_struct *mm, int *shared, int *text,
                   int *data, int *resident)
    {
            *shared = get_mm_counter(mm, file_rss);
            *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
                                                               >> PAGE_SHIFT;
            *data = mm->total_vm - mm->shared_vm;
            *resident = *shared + get_mm_counter(mm, anon_rss);
            return mm->total_vm;
    }
    上边的代码中shared正是page cache里面其实选取了的情理内部存储器的页数,text是代码所占领的页
    数,data是总设想内存页数减去分享的伪造内存页数,resident是负有在行使的情理内部存款和储蓄器的页
    数。最终回来的mm->total_vm是经过虚构内部存储器的寻址空间大小。

    虚构内部存款和储蓄器:相对于物理内部存款和储蓄器,在Linux下还应该有贰个虚构内部存款和储蓄器的概念,设想内部存款和储蓄器就是为了满意物理内部存款和储蓄器的不足而提议的政策,它是使用磁盘空间虚构出的一块逻辑内部存款和储蓄器,用作虚构内部存款和储蓄器的磁盘空间被称呼沟通空间(Swap Space)。Linux会在情理内部存款和储蓄器不足时,使用设想内部存款和储蓄器,内核会把权且不用的内部存款和储蓄器块音讯写到设想内部存款和储蓄器,这样梗概内部存款和储蓄器就收获了释放,那块儿内部存款和储蓄器就能够用来此外目标,而急需用到那一个内容的时候,那几个音信就能被另行从设想内部存储器读入物理内部存储器。

    函数get_mm_counter并不会做哪些划算,它的成效是承保数值读取的原子性。

     

    地点的数值最后会由此 procfs输出 到/proc/$pid/statm中去。他们与top显示的数值对应提到如下。

     

    SHR: shared
    RES: resident
    VIRT: mm->total_vm
    CODE: code
    DATA: data

    Linux的buffers与cached

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

     

    o: VIRT (Virtual Image卡塔尔 - 进程使用的总虚构内部存款和储蓄器 (virtual memory卡塔尔国大小,包含进度的程序码、资料和分享程序库再增加被置换 (swap out卡塔尔的长空。VIRT = SWAP + RES
    p: SWAP (Swapped size卡塔尔 - 进程被换来的设想内部存款和储蓄器空间尺寸。
    q: RES (Resident size卡塔尔 - 进程非被换到的实体内部存款和储蓄器大小。RES = CODE + DATA
    r: CODE' (Code size卡塔尔国 - 进度的程序码在实体内部存储器佔用空间尺寸,亦叫作 text resident set (TSportageS卡塔尔(英语:State of Qatar)。
    s: DATA (Data+Stack size卡塔尔(قطر‎ - 进度佔用实体内部存款和储蓄器中的非程序码部份大小,亦叫作 data resident set (D奥迪Q5S卡塔尔国。
    t: SHHighlander (Shared Mem size卡塔尔国 - 进度使用的分享内部存款和储蓄器大小,即能够和别的进度分享的内部存款和储蓄器空间。
    n: %MEM (Memory usage卡塔尔(英语:State of Qatar) - 进度佔用实体内部存款和储蓄器大小对系统总实体内部存款和储蓄器大小的百分比,以百分比呈现。

    在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(缓存内部存款和储蓄器卡塔尔(英语:State of Qatar)。纵然你的程序运行截止后,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(卡塔尔国映射普通文书编写制定来兑现,也得以System V分享内存机制来落到实处,System V是通过照射特殊文件系统shm中的文件贯彻进度间的分享内部存款和储蓄器通讯,也正是说各类共享内部存款和储蓄器区域对应特别文件系统shm中的叁个文书。

     

     

    除此以外,我们还必得精晓奥德赛SS、PSS、USS等荣辱与共概念:

     

         VSS – Virtual Set Size 设想耗用内部存款和储蓄器(包罗分享库占用的内部存款和储蓄器)

         

    路虎极光SS – Resident Set Size 其实应用物理内部存款和储蓄器(包涵分享库占用的内部存款和储蓄器)

         

    PSS – Proportional Set Size 实际行使的轮廓内部存款和储蓄器(比例分红分享库占用的内存)

         

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

     

    HighlanderSS(Resident set size),使用top命令能够查询到,是最常用的内部存款和储蓄器目标,表示经过占用的大意内部存款和储蓄器大小。不过,将各进度的TiguanSS值相加,常常会超越整个种类的内部存款和储蓄器消耗,那是因为SportageSS中蕴含了各进度间共享的内部存款和储蓄器。

     

    PSS(Proportional set size)全部应用某分享库的顺序均分该分享库占用的内部存款和储蓄器时,每种进程占用的内部存款和储蓄器。明显所有进度的PSS之和正是系统的内部存款和储蓄器使用量。它会越来越纯粹一些,它将分享内部存款和储蓄器的轻重实行平均后,再分摊到各进度上去。

     

    USS(Unique set size 卡塔尔(英语:State of Qatar)过程独自占用的内部存款和储蓄器,它是PSS中友好的某个,它只总计了经过独自占用的内部存款和储蓄器大小,不分包别的共享的局地。

         

              

    由此上边介绍的吩咐,某些查看进度的虚构内部存款和储蓄器使用,有些是翻开进程的昂CoraSS或实际物理内部存款和储蓄器。在陈述的时候,大家会标注这么些音信。

     

     

     

    top命令查看

     

    试行top命令后,施行SHIFT +F ,能够选取按某列排序,举个例子接纳n后,就能够按字段%MEM排序

     

    图片 1

     

     

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

     

     

    %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都不行高。由于大多的物理内部存款和储蓄器常常在多少个应用程序之间分享,名叫实际使用物理内部存款和储蓄器(CRUISERSS,对应top命令里面包车型大巴RES)的这一个标准的内部存款和储蓄器耗用衡量目标会大大高估内部存款和储蓄器耗用状态。

     

    图片 2

     

     

     

    ps命令查看

     

     

     

    选取ps命令搜索占用内存财富最多的20个进度(数量能够率性设置)

     

     

    # 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
    
    =================================
    

     

    参谋资料:

     

     

    本文由澳门新葡8455最新网站发布于澳门新葡8455最新网站,转载请注明出处:linux下的top命令参数说明,查看进程消耗内存情况

    关键词: