查看进程消耗内存情况总结,Linux监控工具介绍系

2019-10-25 21:26 来源:未知

 

Linux监察和控制工具介绍体系——smem

smem工具介绍

    smem是Linux系统上的风姿洒脱款能够转换多样内部存款和储蓄器耗用报告的命令行工具。与现成工具不相符的是smem能够告知实际接收的物理内部存储器(PSS),那是后生可畏种更有意义的目标。能够衡量虚构内部存款和储蓄器系统的库和应用程序所占据的内部存储器数量。

出于相当多的物理内部存款和储蓄器经常在四个应用程序之间共享,名字为实际采取物理内部存款和储蓄器(EscortSS)的这几个专门的学问的内部存款和储蓄器耗开支量指标会大大高估内部存款和储蓄器耗用状态。PSS那个参数而是衡量了各种应用程序在各种分享内部存款和储蓄器区中的“公平分配”,给出了四个相符实际的衡量目标。

smem有多数功力特色:

系统概况列表
按进程、映射和用户列表
按用户、映射或用户过滤
来自多个数据源的可配置列
可配置的输出单位和百分比
可配置的标题和总和
从/proc读取活动数据
从目录镜像或经过压缩的打包文件读取数据快照
面向嵌入式系统的轻型捕获工具
内置的图表生成功能

smem的连串必要

系统内核为2.6.27以上
Python版本必须为2.4或以上
依赖matplotlib库生成图表(可选的,自动检测)依赖matplotlib,是因为smem除了一般的文本信息报告外,smem 也可以生成条状或饼状图。

相应的英语原稿如下:

smem is a tool that can give numerous reports on memory usage on Linux systems. Unlike existing tools, smem can report proportional set size (PSS), which is a more meaningful representation of the amount of memory used by libraries and applications in a virtual memory system.

Because large portions of physical memory are typically shared among multiple applications, the standard measure of memory usage known as resident set size (RSS) will significantly overestimate memory usage. PSS instead measures each application's "fair share" of each shared area to give a realistic measure.

smem has many features:

system overview listing
listings by process, mapping, user
filtering by process, mapping, or user
configurable columns from multiple data sources
configurable output units and percentages
configurable headers and totals
reading live data from /proc
reading data snapshots from directory mirrors or compressed tarballs
lightweight capture tool for embedded systems
built-in chart generation

smem has a few requirements:

a reasonably modern kernel (> 2.6.27 or so)
a reasonably recent version of Python (2.4 or so)
the matplotlib library for chart generation (optional, auto-detected)

Linux使用到了设想内存(virtual memory),因此要可信的估摸三个经超过实际际应用的物理内部存款和储蓄器就不是那么轻巧。只明白进程的设想内部存款和储蓄器大小也并不曾太大的用途,因为仍旧不恐怕获得到实在分配的物理内部存储器大小。

LANDSS(Resident set size),使用top命令能够查询到,是最常用的内部存款和储蓄器指标,表示经过占用的大意内部存款和储蓄器大小。但是,将各进度的RubiconSS值相加,经常会高于整个类别的内部存款和储蓄器消耗,那是因为Vision GTSS中包蕴了各进度间分享的内部存款和储蓄器。

PSS(Proportional set size)全数应用某分享库的前后相继均分该分享库占用的内存时,种种进程占用的内存。显明全部进度的PSS之和就是系统的内部存款和储蓄器使用量。它会越来越纯粹一些,它将分享内部存款和储蓄器的高低举行平均后,再分摊到各进度上去。

USS(Unique set size )进度独自占用的内部存款和储蓄器,它是PSS中协和的有些,它只总计了经过独自占用的内部存储器大小,不分包别的分享的风流浪漫部分。

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

      途观SS – Resident Set Size 实际运用物理内部存款和储蓄器(富含共享库占用的内部存款和储蓄器)

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

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

smem工具安装

  首先去官方网址 下载对应的smem安装包,近些日子风行的本子为smem-1.4.  上面设置是在LX570HEL 5.7上安装,分裂版本系统、以至分歧安装格局都有局地有别于。

   1: [[email protected] tmp]# tar -xzvf smem-1.4.tar.gz 

   2: smem-1.4/.hg_archival.txt

   3: smem-1.4/.hgtags

   4: smem-1.4/COPYING

   5: smem-1.4/smem

   6: smem-1.4/smem.8

   7: smem-1.4/smemcap.c

   8: [[email protected] tmp]# cd smem-1.4

   9: [[email protected] smem-1.4]# ls

  10: COPYING  smem  smem.8  smemcap.c

  11: [[email protected] smem-1.4]# cp /tmp/smem-1.4/smem  /usr/bin

  12: [[email protected] smem-1.4]# chmod +x /usr/bin/smem

smem工具使用

查看smem命令的相关扶持新闻

   1: [[email protected] tmp]# smem -h

   2: usage: smem [options]

   3:  

   4: options:

   5:   -h, --help            show this help message and exit

   6:   -H, --no-header       disable header line

   7:   -c COLUMNS, --columns=COLUMNS

   8:                         columns to show

   9:   -t, --totals          show totals

  10:   -R REALMEM, --realmem=REALMEM

  11:                         amount of physical RAM

  12:   -K KERNEL, --kernel=KERNEL

  13:                         path to kernel image

  14:   -m, --mappings        show mappings

  15:   -u, --users           show users

  16:   -w, --system          show whole system

  17:   -P PROCESSFILTER, --processfilter=PROCESSFILTER

  18:                         process filter regex

  19:   -M MAPFILTER, --mapfilter=MAPFILTER

  20:                         map filter regex

  21:   -U USERFILTER, --userfilter=USERFILTER

  22:                         user filter regex

  23:   -n, --numeric         numeric output

  24:   -s SORT, --sort=SORT  field to sort on

  25:   -r, --reverse         reverse sort

  26:   -p, --percent         show percentage

  27:   -k, --abbreviate      show unit suffixes

  28:   --pie=PIE             show pie graph

  29:   --bar=BAR             show bar graph

  30:   -S SOURCE, --source=SOURCE

  31:                         /proc data source

1:无参数时体现全数进程的内部存款和储蓄器使用意况

2:参数-u 彰显每一种客商所耗用的内部存款和储蓄器总的数量

smem -u

图片 1

3: 参数-p 查看耗用内部存款和储蓄器情状的比重。

smem -p

图片 2

4: 参数-w 查看系统内部存款和储蓄器使用状态

   1: [[email protected] ~]# smem -w

   2: Area                           Used      Cache   Noncache 

   3: firmware/hardware                 0          0          0 

   4: kernel image                      0          0          0 

   5: kernel dynamic memory      22021892   21721584     300308 

   6: userspace memory            1899296     122424    1776872 

   7: free memory                  686340     686340          0 

   8: [[email protected] ~]# smem -w -p

   9: Area                           Used      Cache   Noncache 

  10: firmware/hardware             0.00%      0.00%      0.00% 

  11: kernel image                  0.00%      0.00%      0.00% 

  12: kernel dynamic memory        89.49%     88.27%      1.22% 

  13: userspace memory              7.73%      0.50%      7.23% 

  14: free memory                   2.78%      2.78%      0.00% 

5: 参数-库罗德REALMEM,REALMEM那几个值是指物理内部存款和储蓄器数量。此参数能够让smem在一切系统(-w)的出口中发觉固件/硬件所耗用的内部存款和储蓄器数量(相比上下就能够发现,注意firmware/hardware)

   1: [[email protected] ~]# smem -R 24G -w

   2: Area                           Used      Cache   Noncache 

   3: firmware/hardware            558296          0     558296 

   4: kernel image                      0          0          0 

   5: kernel dynamic memory      22024108   21722972     301136 

   6: userspace memory            1907676     122436    1785240 

   7: free memory                  675744     675744          0 

6:参数-c 用来显示须要出示的列。

   1: [[email protected] ~]# smem -c "name user pss"

   2: Name                     User          PSS 

   3: mingetty                 root           18 

   4: mingetty                 root           18 

   5: mingetty                 root           18 

   6: mingetty                 root           18 

   7: mingetty                 root           18 

   8: bash                     root          911 

   9: sftp-server              root          939 

  10: cupsd                    root         1208 

  11: rsyslogd                 root         1403 

  12: smbd                     tibco        1474 

  13: hald                     haldaemon     1477 

  14: pickup                   postfix      1487 

  15: vmtoolsd                 root         2309 

  16: sshd                     root         2521 

  17: python                   root         5464 

  18: beremote                 root         7585 

  19: java                     weblogic    18454 

  20: java                     weblogic    31431 

  21: java                     weblogic    69389 

  22: java                     tomcat     339977 

  23: java                     tomcat     355037 

  24: java                     tomcat     421133 

  25: java                     weblogic   640531 

7: 参数-s 依据某一列(举例 rss)来排序.

图片 3

8: 参数-r 平时与参数-s结合使用,表示反转排序(从升序改为降序)

图片 4

9:参数-M 过滤相关进程。Show processes filtered by mapping

   1: [[email protected] tmp]# smem -M mysql

   2:   PID User     Command                         Swap      USS      PSS      RSS 

   3:  4172 mysql    /usr/sbin/mysqld --basedir=        0     3924     3924     3924 

   4: [[email protected] tmp]# smem -M mysql -p

   5:   PID User     Command                         Swap      USS      PSS      RSS 

   6:  4172 mysql    /usr/sbin/mysqld --basedir=    0.00%    0.38%    0.38%    0.38% 

   7: [[email protected] tmp]# 

图片 5

10:参数-U 按客户过滤消息

除此以外一些参数怎么着呈现条状图或饼状图的作用,个人感到这几个参数的用途相当的小,首先服务器经常都尚未设置桌面系统,都以命令分界面维护、管理。无法转移相关图片。其次服务器有桌面系统,也急需安装相关正视包,非凡艰难。除非是为了转换报告须要。

    Read data from capture tarball smem --source capture.tar.gz

    Show a bar chart labeled by pid smem --bar pid -c "pss uss"

    Show a pie chart of RSS labeled by name smem --pie name -s rss

正文永世更新链接地址:

smem工具介绍 smem是Linux系统上的生龙活虎款可以生成种种内部存款和储蓄器耗用报告的命令行工具。与现存工具差异样的是smem能够...

在Linux中,有过多限令或工具查看内部存款和储蓄器使用状态,明日大家来看看哪些查看进度消耗、占用的内部存款和储蓄器情状,Linux的内部存款和储蓄器管理和有关概念要比Windows复杂一些。早先,大家要求通晓一下Linux系统下边关于内部存储器的专用名词和专门的学业术语概念:

 

 

轮廓内部存款和储蓄器和虚构内部存款和储蓄器

 

大要内部存款和储蓄器:正是系统硬件提供的内部存储器大小,是确实的内部存款和储蓄器,平日叫做内部存款和储蓄器条。也叫随机存取存款和储蓄器(random access memory,RAM)又叫做“随机存款和储蓄器”,是与CPU直接沟通数据的中间存款和储蓄器,也叫主存(内部存款和储蓄器)。

 

虚构内部存储器:相对于物理内部存款和储蓄器,在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()映射普通文书编写制定来落实,也足以System V分享内部存款和储蓄器机制来兑现,System V是经过照射特殊文件系统shm中的文件贯彻进程间的分享内部存款和储蓄器通讯,也正是说每一个分享内部存款和储蓄器区域对应极其文件系统shm中的一个文件。

 

 

其他,大家还必得掌握LANDSS、PSS、USS等互为表里概念:

 

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

     

中华VSS – Resident Set Size 事实上使用物理内部存款和储蓄器(包罗分享库占用的内存)

     

PSS – Proportional Set Size 实际采取的情理内部存款和储蓄器(比例分红共享库占用的内部存款和储蓄器)

     

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

 

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

 

PSS(Proportional set size)全部应用某共享库的主次均分该分享库占用的内部存款和储蓄器时,每一种进程占用的内部存款和储蓄器。分明全部进度的PSS之和便是系统的内部存款和储蓄器使用量。它会更可相信一些,它将分享内存的大小举行平均后,再分摊到各过程上去。

 

USS(Unique set size )进程独自占用的内部存款和储蓄器,它是PSS中协调的部分,它只总括了经过独自占用的内部存款和储蓄器大小,不带有别的分享的有的。

     

          

所以上边介绍的命令,某个查看进程的虚拟内部存款和储蓄器使用,有些是查看进度的揽胜极光SS或实际物理内部存款和储蓄器。在陈述的时候,大家会表明这么些音信。

 

 

 

top命令查看

 

施行top命令后,推行SHIFT +F ,能够选择按某列排序,比方选取n后,就能够按字段%MEM排序

 

图片 6

 

 

本来也足以利用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都丰富高。由于抢先二分之风姿洒脱的物理内部存款和储蓄器通常在多个应用程序之间分享,名字为实际运用物理内部存款和储蓄器(瑞鹰SS,对应top命令里面包车型地铁RES)的那个正式的内部存款和储蓄器耗开销量目标会大大高估内部存款和储蓄器耗用状态。

 

图片 7

 

 

 

ps命令查看

 

 

 

利用ps命令搜索占用内部存款和储蓄器财富最多的十八个进度(数量能够随意设置)

 

 

# 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

 

图片 8

 

 

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

 

 

 

 

smem命令查看

 

 

有关smem命令,这里不做牵线,直接参照他事他说加以考察链接Linux监控工具介绍连串——smem

 

 

#smem -rs pss

 

图片 9

** 

** 

** 

** 

pmap命令查看

 

 

# ps -ef | grep tomcat

# pmap 32341

 

图片 10

 

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

 

图片 11

 

 

 

 

python脚本查看

 

 

网络有个python脚本计算程序或进度的内存使用景况,地址位于

 

python ps_mem.py

 

图片 12

 

 

[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

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

 

仿效资料:

 

 

TAG标签:
版权声明:本文由金沙澳门唯一官网发布于金沙澳门唯一官网,转载请注明出处:查看进程消耗内存情况总结,Linux监控工具介绍系