Linux学习:使用 procrank 测量系统内存使用情况
  
Vss 也叫 VIRT / VSZ,是虚拟内存总量的映射,不管它是否被提交到物理内存。
Rss 也叫 RES / RSS,是物理内存总量的映射,只要页面在自己的区间内被映射过,就算在自己的头上。例如/lib/x86_64-linux-gnu/libc-2.23.so的某一个页面被60个进程使用过,那么自己还是要算上4K。
Vss显然被高估了,因为应用程序通常分配它们从不使用的内存。Rss是一个更好的度量方法,但仍比实际值稍大,因为它没有考虑进程之间共享的内存页。例如,内存中只有一个C库驻留程序的副本,被与之关联的所有进程之间共享,但Rss会多次占用它。
曾经 Matt Mackall 研究过这个问题,并添加了两个称为唯一集大小(Uss)和比例集大小(Pss)的新度量,并修改了内核以开放计算它们所需的信息,这些信息可以在/proc/[PID]/smaps中找到。
Pss 是比例集大小(与其他进程共享的内存量)除以每个页面的共享进程数,页面被多个进程映射过,那么把使用量平均到大家头上。libc的这个页面就只能算在自己头上4k / 60 = 68Bytes。
Uss 是唯一的集合大小,即进程私有且不与任何其他进程共享的内存大小,页面只有被自己使用过,才算到自己头上。Uss的统计意义在于,如果这个进程被杀掉了,那么实际上只能释放这么多内存,所以Uss是针对某个进程进行内存泄露检测的最佳数字,因为它显示的页面是唯一的,你可以把它看作是在内存中创建副本时所损耗的内从大小,如果怀疑某个程序有内存泄露就查看这个值是否一直增加。
一般情况下,都是:VSS >= RSS >= PSS >= USS
为了稍微简化一下,下面的图表显示了三个进程,每个进程映射到其虚拟地址空间的页面,并且分别被标记为A、B或C类:
- A = 映射到RAM物理页的私有内存,包括正在使用的堆和栈的部分。
 - B = 由一个或多个进程映射并共享的内存,例如共享库中的代码。
 - C = 被分配但从未被访问的内存。
 
至此,每个进程所占用的内存组成如下:
- Vss = A + B + C
 - Rss = A + B
 - Uss = A
 - Pss = A + B/n (其中n是共享进程的数量)
 
  
 
计算三个进程的Pss为:
  Pss(1) = 2 + 3/3 + 2/2 = 4
  Pss(2) = 2 + 3/3 + 2/2 = 4
  Pss(3) = 2 + 3/3 = 3
  Sum(Pss) = 11 = total of pages in use
可见Pss考虑到进程之间的内存共享,给出了一个进程正在使用的内存的精确值,所有进程使用的内存总量是它们的Pss的总和。
Matt Mackall在Linux PC系统开发了一个工具叫smem,用来显示Uss和Pss,但它需要Python运行时环境,而在嵌入式Linux设备上通常是不可行的。而Android开发人员遇到这个问题后,使用Android BIONIC C库编写了一个叫 procrank 的命令行工具,它可以给出更准确的测量结果。
msmnile:/ # procrank
PID Vss Rss Pss Uss cmdline
4900108K 319044K 153980K 131100K system_server
4670340K 200476K 77423K 67964K org.codeaurora.snapcam
281036K 76952K 69501K 68784K /vendor/bin/hw/android.hardware.camera.provider@2.4-service_64
4532080K 205212K 59186K 48300K com.android.systemui
1632240K 134900K 42328K 17100K zygote
4481540K 148792K 30077K 21900K com.android.launcher3
4472708K 134984K 29088K 24184K com.android.phone
4319928K 151224K 25268K 7800K zygote64
4458488K 116912K 19279K 15600K com.android.bluetooth
126780K 36996K 19247K 8760K /vendor/bin/hw/qcrild
4429916K 111348K 18965K 16384K org.codeaurora.dialer
124668K 36440K 18513K 8000K /vendor/bin/hw/qcrild
2188808K 35200K 17394K 12620K /system/bin/surfaceflinger
47200K 20752K 17040K 16608K /vendor/bin/hw/android.hardware.audio@2.0-service
1707580K 82368K 16143K 3408K com.qualcomm.qti.qms.service.connectionsecurity
1634080K 56768K 16013K 5888K webview_zygote
86604K 28932K 15049K 11536K /system/bin/audioserver
1705828K 80684K 14900K 2284K com.qualcomm.qti.qms.service.telemetry
4419152K 115552K 14712K 10600K com.android.nfc
4411628K 113984K 14547K 10972K com.android.inputmethod.latin
4399092K 94988K 13766K 10728K com.google.ar.core.examples.java.helloar
59436K 22164K 12749K 11312K /vendor/bin/hw/android.hardware.graphics.composer@2.2-service
4407532K 107504K 12371K 9620K com.android.email
75212K 16236K 10657K 9936K media.codec
137232K 17276K 10503K 9580K /system/vendor/bin/netmgrd
4401620K 112884K 10086K 5968K android.process.media
4407188K 106352K 9966K 6632K com.android.mms
2196216K 25216K 9650K 7740K media.extractor
47912K 15444K 9279K 8852K /vendor/bin/hw/vendor.qti.gnss@2.1-service
4402276K 96488K 9207K 7096K org.codeaurora.gallery
4403336K 107660K 8612K 5220K com.qualcomm.qti.qdma
4413808K 101996K 8174K 5548K .dataservices
4396428K 101276K 7004K 4256K com.android.providers.calendar
41104K 18720K 6821K 4524K /system/bin/cameraserver
4402852K 97864K 6750K 3604K com.qualcomm.location.XT
4400076K 98136K 5998K 3320K com.qualcomm.qti.telephonyservice
4396328K 94684K 5944K 3732K com.qualcomm.qti.workloadclassifier
4398632K 97916K 5857K 3220K com.qualcomm.qcrilmsgtunnel
4395848K 97736K 5739K 3068K android.ext.services
4395804K 97800K 5718K 3212K com.qualcomm.qti.smq
2151708K 13616K 5668K 4448K /system/vendor/bin/cnd
4398484K 91132K 5621K 3592K com.android.music
4399780K 95124K 5407K 3068K com.qualcomm.qti.services.secureui:sui_service
58104K 17440K 5355K 3220K /system/bin/mediaserver
4393968K 94736K 5252K 2776K com.qualcomm.qti.modemtestmode
2155140K 18408K 5220K 3556K media.metrics
4399292K 94332K 5091K 2824K com.qti.diagservices
4398052K 92572K 5044K 2888K com.android.se
4397228K 93000K 5031K 2908K com.qualcomm.qti.biometrics.fingerprint.service:remote
4399052K 93328K 4959K 2784K com.qualcomm.telephony
4395468K 92844K 4955K 2812K com.android.keychain
4394396K 93704K 4927K 2672K .pasr
4395848K 92928K 4876K 2720K com.qualcomm.qti.callenhancement
4395736K 93212K 4862K 2708K com.qualcomm.simcontacts
4395708K 93376K 4784K 2620K com.qualcomm.qti.smcinvokepkgmgr
4393648K 91164K 4775K 2728K com.qualcomm.qti.radioconfiginterface
4393652K 91324K 4764K 2712K com.qualcomm.qti.lpa
4393548K 91288K 4735K 2680K com.qualcomm.qti.carrierswitch
4393548K 91596K 4681K 2520K com.android.smspush
4395056K 90068K 4619K 2544K com.waterdaaan.cpufloat
31360K 8952K 4051K 3892K /vendor/bin/hbtp_daemon
32124K 5740K 3937K 3312K /init
23516K 6652K 3890K 3856K /system/bin/logd
22028K 9624K 3866K 3576K /vendor/bin/hw/android.hardware.neuralnetworks@1.1-service-qti
25340K 14056K 3718K 1980K /system/bin/drmserver
18056K 7980K 3527K 3460K /vendor/bin/hw/android.hardware.wifi@1.0-service
30396K 9644K 3524K 2992K /vendor/bin/hw/vendor.qti.hardware.perf@1.0-service
2139568K 10056K 3306K 2248K /vendor/bin/imsdatadaemon
21432K 8392K 2987K 2476K /system/bin/update_engine
36012K 9872K 2910K 2296K /vendor/bin/hw/android.hardware.sensors@1.0-service
34456K 8444K 2896K 2396K /vendor/bin/hw/vendor.qti.hardware.biometrics.face@1.0-service
2132188K 8188K 2857K 2492K /system/bin/keystore
27712K 8036K 2802K 2484K /system/bin/vold
32308K 8116K 2703K 2508K /vendor/bin/ims_rtp_daemon
26448K 6848K 2699K 2604K /system/bin/installd
2135988K 10992K 2575K 1580K /system/bin/seempd
13328K 6964K 2567K 1888K /system/bin/qvrservice
31912K 8588K 2563K 2012K xtra-daemon
2146312K 7840K 2551K 2352K /system/bin/netd
20036K 7124K 2490K 2436K /vendor/bin/imsrcsd
32240K 8404K 2414K 1964K slim_daemon
15652K 6120K 2372K 2312K /system/vendor/bin/cnss_diag
76792K 7052K 2329K 2260K /vendor/bin/thermal-engine
22584K 7196K 2283K 2044K /system/vendor/bin/ipacm
22216K 6612K 2138K 2088K /vendor/bin/qfp-daemon
25164K 6692K 2086K 1720K /vendor/bin/hw/vendor.nxp.hardware.nfc@1.1-service
19304K 5672K 2081K 2000K /vendor/bin/chre
30956K 6632K 2043K 1988K /vendor/bin/hw/android.hardware.bluetooth@1.0-service-qti
17700K 5456K 2002K 1948K /system/bin/perfprofd
17944K 5848K 1985K 1268K /vendor/bin/hw/vendor.qti.hardware.scve.objecttracker@1.0-service
18272K 5784K 1985K 1300K /vendor/bin/hw/vendor.qti.hardware.scve.panorama@1.0-service
21752K 6820K 1983K 1664K /system/bin/statsd
23440K 7216K 1956K 1708K /vendor/bin/hw/vendor.qti.hardware.iop@2.0-service
2127348K 7072K 1956K 1576K /system/bin/hwservicemanager
21356K 6664K 1942K 1772K /system/bin/storaged
16488K 6428K 1867K 1748K /vendor/bin/hw/vendor.qti.hardware.cvp@1.0-service
22004K 6624K 1866K 1612K /vendor/bin/vppservice
26396K 7880K 1863K 1308K /vendor/bin/sensors.qti
2131700K 6312K 1862K 1704K lowi-server
20968K 6748K 1835K 1224K /vendor/bin/hw/android.hardware.configstore@1.1-service
33820K 7108K 1784K 1388K /vendor/bin/qseecomd
17628K 6512K 1767K 1616K /vendor/bin/hw/vendor.display.color@1.0-service
22052K 8520K 1767K 1248K /vendor/bin/hw/vendor.qti.hardware.sensorscalibrate@1.0-service
21844K 1816K 1687K 1680K /system/bin/adbd
22460K 6692K 1685K 1412K /vendor/bin/hw/android.hardware.drm@1.1-service.clearkey
23572K 7696K 1680K 1124K /vendor/bin/sscrpcd
21644K 6876K 1654K 1372K /vendor/bin/hw/android.hardware.drm@1.0-service
17088K 5980K 1635K 1524K /system/bin/wificond
7756K 3088K 1620K 1108K /init
28572K 6776K 1619K 1500K /system/vendor/bin/cnss-daemon
9040K 2980K 1560K 1088K /sbin/ueventd
23980K 5672K 1546K 1472K /system/vendor/bin/qti
2130020K 7220K 1522K 1228K /system/bin/mediadrmserver
21284K 6148K 1513K 1112K /vendor/bin/hw/vendor.qti.secure_element@1.0-service
25908K 4108K 1507K 1304K /vendor/bin/ssgtzd
2127344K 6972K 1479K 1192K /system/bin/gatekeeperd
23760K 5500K 1440K 1368K /system/vendor/bin/adpl
9732K 4796K 1416K 1088K /vendor/bin/wifidisplayhalservice
2126448K 5904K 1388K 1248K /vendor/bin/hw/android.hardware.contexthub@1.0-service
2141100K 4240K 1374K 652K seempd_sphinx
18452K 6100K 1367K 1168K /vendor/bin/hw/vendor.qti.hardware.qteeconnector@1.0-service
20436K 5820K 1343K 1292K /system/vendor/bin/dpmQmiMgr
8728K 4904K 1308K 928K /vendor/bin/hw/android.hardware.cas@1.0-service
10096K 3772K 1297K 1280K /system/bin/ip6tables-restore
21832K 5480K 1277K 1160K /vendor/bin/tloc_daemon
22576K 6272K 1256K 1124K /vendor/bin/hw/vendor.qti.hardware.display.allocator@1.0-service
16844K 6048K 1229K 924K /vendor/bin/hw/android.hardware.keymaster@4.0-strongbox-service-qti
10076K 3688K 1225K 1208K /system/bin/iptables-restore
16840K 5948K 1220K 916K /vendor/bin/hw/android.hardware.keymaster@4.0-service-qti
21340K 5296K 1207K 700K /system/bin/dpmd
26012K 5056K 1195K 1152K /vendor/bin/time_daemon
16196K 5640K 1182K 1108K /vendor/bin/hw/android.hardware.power@1.2-service
17968K 3724K 1177K 1160K procrank
18460K 5496K 1164K 1040K /system/bin/incidentd
26360K 5068K 1163K 1096K /system/vendor/bin/qdmastatsd
22816K 5656K 1162K 1036K /system/bin/perfservice
18648K 5588K 1147K 1064K /system/vendor/bin/qcom-system-daemon
27784K 5432K 1135K 1064K /vendor/bin/pm-service
16284K 5724K 1134K 1076K /vendor/bin/hw/vendor.qti.hardware.mlshal@1.0-service
22840K 5644K 1123K 1044K /vendor/bin/ATFWD-daemon
6732K 2384K 1101K 692K /init
14368K 5224K 1098K 1060K /vendor/bin/hw/android.hardware.health@2.0-service
14272K 5164K 1097K 1060K /vendor/bin/hw/vendor.qti.hardware.vibrator@1.2-service
16320K 4904K 1089K 1048K /vendor/bin/imsqmidaemon
14904K 5440K 1081K 1020K /vendor/bin/hw/vendor.qti.hardware.soter@1.0-service
15396K 5556K 1053K 976K /vendor/bin/hw/android.hardware.gatekeeper@1.0-service-qti
14860K 5392K 1037K 988K /vendor/bin/hw/android.hardware.boot@1.0-service
15220K 5076K 1032K 956K /system/bin/thermalserviced
24884K 4304K 1014K 988K /vendor/bin/hvdcp_opti
16300K 5320K 990K 480K /system/bin/dpmd
15000K 5628K 985K 904K /vendor/bin/hw/vendor.qti.hardware.qdutils_disp@1.0-service-qti
14128K 5664K 977K 904K /vendor/bin/hw/vendor.qti.hardware.seccam@1.0-service-qti
15276K 5236K 969K 928K /vendor/bin/hw/android.hardware.usb@1.0-service
18628K 4864K 956K 904K /vendor/bin/pd-mapper
13740K 5608K 951K 820K /vendor/bin/hw/vendor.qti.hardware.tui_comm@1.0-service-qti
15584K 4452K 927K 860K /vendor/bin/adsprpcd
14280K 5288K 921K 860K /system/vendor/bin/wifilearner
12716K 4448K 918K 872K /vendor/bin/vndservicemanager
14392K 5144K 916K 876K /vendor/bin/hw/android.hardware.thermal@1.0-service
14400K 5144K 911K 872K /vendor/bin/hw/android.hardware.light@2.0-service
13664K 5216K 893K 808K /vendor/bin/hw/vendor.qti.esepowermanager@1.0-service
14268K 5056K 886K 848K /vendor/bin/hw/vendor.qti.hardware.alarm@1.0-service
14272K 5196K 885K 844K /vendor/bin/hw/vendor.qti.power.pasrmanager@1.0-service
14400K 5084K 883K 844K /vendor/bin/hw/android.hardware.memtrack@1.0-service
18452K 4816K 882K 828K /vendor/bin/pm-proxy
15900K 4344K 879K 840K /system/vendor/bin/loc_launcher
13368K 4512K 867K 748K /system/bin/healthd
12004K 3900K 855K 812K /system/bin/servicemanager
2137004K 3588K 854K 132K seempd_spa
14788K 4416K 854K 820K /system/vendor/bin/ipacm-diag
24380K 4372K 844K 808K /vendor/bin/sec_nvm
13320K 4088K 829K 804K /vendor/bin/tftp_server
15640K 4172K 826K 736K /vendor/bin/mlid
15620K 4180K 800K 768K /system/bin/smcinvoked
19180K 4308K 792K 760K /vendor/bin/rmt_storage
15584K 4176K 786K 724K /vendor/bin/cdsprpcd
15584K 4196K 782K 716K /vendor/bin/adsprpcd
9596K 3312K 767K 576K /system/bin/sh
9596K 3260K 766K 576K /system/bin/sh
11380K 4336K 725K 696K /vendor/bin/msm_irqbalance
15996K 4348K 719K 684K /system/vendor/bin/port-bridge
13004K 4352K 711K 672K /system/bin/hw/android.hidl.allocator@1.0-service
12820K 4140K 676K 640K /vendor/bin/spdaemon
11492K 4160K 662K 632K /vendor/bin/seemp_healthd
9896K 3112K 651K 636K /system/bin/tombstoned
10388K 3652K 616K 592K /vendor/bin/qrtr-ns
5088K 2600K 601K 480K /vendor/bin/ssgqmigd
10452K 3284K 555K 536K /system/bin/lmkd
12144K 3256K 534K 516K /system/bin/dun-server
------ ------ ------
1165847K 869196K TOTAL RAM: 5635676K total, 1902208K free, 20072K buffers, 1183188K cached, 2392K shmem, 566800K slab
网上已有牛人基于Android的procrank源码(\system\extras\libpagemap\)做了一些小的修改,并添加了一个Makefile,这样它就可以在大多数GNU/Linux环境下编译,包括交叉编译以供嵌入式使用。
代码下载:
git clone https://github.com/csimmonds/procrank_linux.git
关于编译和使用的说明请参考 README。
Linux学习:使用 procrank 测量系统内存使用情况的更多相关文章
- linux下对进程按照内存使用情况进行排序
		
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
 - 编程获取linux的CPU使用的内存使用情况
		
Linux可用下top.ps命令检查当前的cpu.mem用法.下面简单的例子: 一.采用ps查看资源消耗的过程 ps -aux 当您查看进程信息,第三列是CPU入住. [root@localhost ...
 - 【转载】 使用宝塔Linux面板功能查看服务器内存使用情况
		
运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对占用内存比较高的应用或者服务等,我们需要时刻关注服务器的内存使用率,是否存在内存瓶颈等情况的出现.阿里云和腾讯云官方后台界面的监控数据页面也有相 ...
 - LINUX 查看当前系统的内存使用情况 free
		
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code # free 显示结果如下: Mem:表示物理内存统计 total 内存总数 8057 ...
 - LINUX 查看当前系统的内存使用情况
		
# free 显示结果如下: Mem:表示物理内存统计 total 内存总数 8057964KB used 已使用的内存 7852484KB free 空闲的内存数 205480KB shared 当 ...
 - Linux 使用 free 命令查看内存使用情况
		
1.free 命令的选项 使用 free 命令查看服务器内存使用情况. free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V] ...
 - Linux中查看进程占用内存的情况【转】
		
转自:http://hutaow.com/blog/2014/08/28/display-process-memory-in-linux/ Linux中查看某个进程占用内存的情况,执行如下命令即可,将 ...
 - Linux 带宽、CPU、内存占用情况
		
iftop 查看带宽占用情况(总)yum install -y iftop 安装iftopnethogs 查看进程流量 curl http://218.5.73.233:8060/ip.php 查看出 ...
 - LINUX 查看当前系统的内存使用情况 vmstat
		
Linux vmstat 命令 Vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况. 相比 ...
 
随机推荐
- Python之定义默认参数
			
定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 > ...
 - Python asyncio 模块
			
Python 3.4 asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接获取一个EventLo ...
 - Thymeleaf整合到Spring Security,标签sec不起作用
			
将 pom 文件中的 thymeleaf-extras-springsecurity4 依赖改成 thymeleaf-extras-springsecurity5 <dependency> ...
 - 深度学习—从LeNet到DenseNet
			
CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF Net到VGG,GoogLeNet再到ResNet和最近的DenseNet,网络越来越深, ...
 - mongodb索引 单键索引
			
单键索引是最普通的索引,比如一条记录,形式为{x:1,y:2,z:3},我们在x上建立索引,之后就可以以x为条件进行查询,与_id索引不同,单键索引不会自动创建 创建索引 > db.test2. ...
 - python_tkinter弹出对话框1
			
tkinter提供了三个模块,可以创建弹出对话窗口:(使用必须单独导入模块) 1.messagebox 消息对话框 示例:askokcancel import tkinter # 导入消息对话框子模块 ...
 - 你的VCL界面开发不知所措?这款工具绝对超出预料
			
DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...
 - WebLogic 12c 版 下载与安装(ubuntu)
			
下载地址:https://www.oracle.com/middleware/technologies/fusionmiddleware-downloads.html 参考地址:https://blo ...
 - java后台表单验证工具类
			
/** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...
 - 15分钟入门Markdown
			
一.标题一 标题三 标题六 # 一.标题一 ### 标题三 ###### 标题六 二.字体 1.普通字体 字体加粗 斜体 斜体加粗 删除线 1.普通字体 **字体加粗** *斜体* ***斜体加粗** ...