如何在Linux中检查每个进程的内存使用情况
Linux检查每个进程的内存使用情况。如何检查哪个进程在Linux中使用了更多的内存。 Linux一个进程使用多少内存。 Linux跟踪一段时间内进程内存的使用情况。 linux检查每个进程的内存使用率(以mb为单位)。
Linux检查内存。 linux显示内存使用情况。 linux查看内存使用情况。 linux内存使用信息。 linux进程内存使用情况。如何在Linux中检查内存使用情况。
在Linux中,有几种指标可用于检查"每个进程的内存使用情况"。我将从最容易获得的两个开始
虚拟集大小(vss)
常驻内存大小(rss)
两者在ps和top命令的大多数实现中都可用。
" Vss":在" ps"命令中称为" VSZ",在" top"中称为VIRT,是一个进程映射的内存总量。它是
/proc/<PID>/map
中显示的所有区域的总和。由于只有一部分虚拟内存在任何时候都被提交给物理内存,因此这个数字的用途很有限。" Rss":在" ps"中称为" RSS",在" top"中称为" RES",是映射到内存物理页的内存总和。这接近于进程的实际内存预算,但是存在一个问题,如果将所有进程的" Rss"加起来,我们将高估正在使用的内存,因为某些页面将被共享。
使用top和ps检查每个进程(VSS和RSS)的内存使用情况
ps命令显示带有选项-Aly的自定义格式Vss(VSZ)和Rss(RSS),以及包含vsz
和rss
的自定义格式,如下所示
# ps -eo pid,tid,class,rtprio,stat,vsz,rss,comm PID TID CLS RTPRIO STAT VSZ RSS COMMAND 1283 1283 TS - S<sl 59636 1116 auditd 1337 1337 TS - Ssl 476848 9996 NetworkManager 1366 1366 TS - Ssl 553488 13196 polkitd 1456 1456 TS - S 267684 31768 sssd_nss 1617 1617 TS - Ss+ 116376 872 agetty 2955 2955 TS - Ss 93728 2236 master 4843 4843 TS - Ss 156356 5156 sshd
同样," free"和" top"还显示了每个进程的可用内存和内存使用情况的摘要:
# free -m total used free shared buff/cache available Mem: 128814 7603 52253 153 68957 120163 Swap: 4091 0 4091
说明:
这些简单的命令使我们可以感觉到内存的使用情况,并在看到进程的Rss持续增加时首先表明存在内存泄漏。但是,它们在内存使用率的绝对测量中不是很准确。
使用smem检查每个进程的内存使用情况
2009年,Matt Mackall开始研究在进程内存测量中考虑共享页面的问题,并添加了两个新的度量标准,称为"唯一集大小"或者" Uss",以及"比例集大小"或者" Pss"。
" Uss":这是提交给物理内存的内存量,对于进程是唯一的;它不会与其他任何人共享。它是如果进程终止将释放的内存量。
Pss:这将分配给物理内存的共享页面的记帐分配在所有映射它们的进程之间。例如,如果一个库代码区域长12页,并由六个进程共享,则每个进程将在
Pss
中累积两页。因此,如果为所有进程添加" Pss"编号,则将获得这些进程正在使用的实际内存量。换句话说," Pss"是我们一直在寻找的号码。
另请阅读:
Shell脚本可检查Linux中的顶级内存和cpu消耗过程
该信息在/proc/<PID>/smaps
中可用,其中包含在`/proc/<PID>/maps中显示的每个映射的添加信息。这是该文件的一部分,其中提供了有关libc代码段的映射的信息:
# cat /proc/31768/smaps | grep -i pss Pss: 1132 kB Pss: 4 kB Pss: 44 kB Pss: 48 kB Pss: 54632 kB Pss: 1 kB << Output trimmed >> Pss: 0 kB Pss: 0 kB Pss: 4 kB Pss: 4 kB Pss: 4 kB Pss: 0 kB
# cat /proc/31768/smaps | grep -i pss | awk '{Total+=} END {print Total/1024" MB"}' 56.4102 MB # cat /proc/31768/smaps | grep -i rss | awk '{Total+=} END {print Total/1024" MB"}' 58.7109 MB
说明:
注意," Rss"是" 58.7 M",但是由于它在许多其他进程之间共享,因此" Pss"只有56.4 MB。
有一个名为" smem"的工具,它可以对来自smaps文件的信息进行整理,并以各种方式(包括饼图或者条形图)进行显示。 " smem"的项目页面为https://www.selenic.com/smem。
可以将各种过滤器应用于" smem",如下所示,其中包含最新的可用发行版(1.4)。
# ./smem --help Usage: smem [options] Options: -h, --help show this help message and exit -H, --no-header disable header line -c COLUMNS, --columns=COLUMNS columns to show -t, --totals show totals -R REALMEM, --realmem=REALMEM amount of physical RAM -K KERNEL, --kernel=KERNEL path to kernel image -m, --mappings show mappings -u, --users show users -w, --system show whole system -P PROCESSFILTER, --processfilter=PROCESSFILTER process filter regex -M MAPFILTER, --mapfilter=MAPFILTER map filter regex -U USERFILTER, --userfilter=USERFILTER user filter regex -n, --numeric numeric output -s SORT, --sort=SORT field to sort on -r, --reverse reverse sort -p, --percent show percentage -k, --abbreviate show unit suffixes --pie=PIE show pie graph --bar=BAR show bar graph -S SOURCE, --source=SOURCE /proc data source
要检查每个进程的内存使用总量,我们可以执行以下命令
# ./smem -t -k PID User Command Swap USS PSS RSS 5496 ssrun ssRelay -pidfile /opt/mgtse 0 112.0K 152.0K 460.0K 5522 ssrun ssProbeframework -pidfile/ 0 116.0K 156.0K 464.0K 2072 root rhnsd 0 172.0K 194.0K 616.0K 2013 root /usr/bin/rhsmcertd 0 172.0K 195.0K 684.0K 1617 root /sbin/agetty --noclear tty1 0 184.0K 196.0K 876.0K 1493 root /usr/sbin/atd -f 0 260.0K 271.0K 1.1M 22058 root /usr/sbin/rpc.idmapd 0 380.0K 384.0K 676.0K 7802 root /usr/sbin/xinetd -stayalive 0 396.0K 408.0K 1.1M << Output trimmed >> 10901 rpc /sbin/rpcbind -w 0 608.0K 655.0K 1.4M 11885 oamsys -bash 0 524.0K 739.0K 2.2M 4847 oamsys -bash 0 528.0K 743.0K 2.2M 2008 root /usr/sbin/oddjobd -n -p /va 0 632.0K 764.0K 1.9M 22202 sufuser /usr/sbin/httpd -DFOREGROUN 0 372.0K 768.0K 5.4M 22203 sufuser /usr/sbin/httpd -DFOREGROUN 0 372.0K 768.0K 5.4M 27326 sufuser /usr/sbin/httpd -DFOREGROUN 0 372.0K 768.0K 5.4M 22199 sufuser /usr/sbin/httpd -DFOREGROUN 0 372.0K 769.0K 5.4M 27327 sufuser /usr/sbin/httpd -DFOREGROUN 0 372.0K 769.0K 5.4M 22201 sufuser /usr/sbin/httpd -DFOREGROUN 0 380.0K 775.0K 5.4M 22200 sufuser /usr/sbin/httpd -DFOREGROUN 0 380.0K 776.0K 5.4M 12096 root -bash 0 580.0K 809.0K 2.3M 7989 ntp /usr/sbin/ntpd -u ntp:ntp - 0 780.0K 814.0K 1.7M 11564 oamsys /usr/libexec/openssh/sftp-s 0 744.0K 834.0K 2.4M 5523 ssrun ssProbeframework -pidfile/ 0 185.3M 191.3M 198.4M ------------------------------------------------------------------------------ 93 11 0 1.9G 2.0G 2.1G
这将为我们提供系统上活动的每个进程的内存使用情况详细信息。
为了获得单个进程的内存使用情况,我们可以从列表中grep进程
# ./smem -k | sed -e '1p' -e '/amsHelper/!d' | grep -v sed PID User Command Swap USS PSS RSS 31768 root /sbin/amsHelper -f 0 56.0M 56.4M 58.7M
如我们所见,使用/proc/31768/smaps
和smem
工具,我们得到与上面类似的结果。因此,amsHelper的实际内存使用量为56.4 MB。