Vss 也叫 VIRT / VSZ,是虛擬內存總量的映射,無論它是否被提交到物理內存。java
Rss 也叫 RES / RSS,是物理內存總量的映射,只要頁面在本身的區間內被映射過,就算在本身的頭上。例如/lib/x86_64-linux-gnu/libc-2.23.so的某一個頁面被60個進程使用過,那麼本身仍是要算上4K。linux
Vss顯然被高估了,由於應用程序一般分配它們從不使用的內存。Rss是一個更好的度量方法,但仍比實際值稍大,由於它沒有考慮進程之間共享的內存頁。例如,內存中只有一個C庫駐留程序的副本,被與之關聯的全部進程之間共享,但Rss會屢次佔用它。android
曾經 Matt Mackall 研究過這個問題,並添加了兩個稱爲惟一集大小(Uss)和比例集大小(Pss)的新度量,並修改了內核以開放計算它們所需的信息,這些信息能夠在/proc/[PID]/smaps中找到。ios
Pss 是比例集大小(與其餘進程共享的內存量)除以每一個頁面的共享進程數,頁面被多個進程映射過,那麼把使用量平均到你們頭上。libc的這個頁面就只能算在本身頭上4k / 60 = 68Bytes。git
Uss 是惟一的集合大小,即進程私有且不與任何其餘進程共享的內存大小,頁面只有被本身使用過,纔算到本身頭上。Uss的統計意義在於,若是這個進程被殺掉了,那麼實際上只能釋放這麼多內存,因此Uss是針對某個進程進行內存泄露檢測的最佳數字,由於它顯示的頁面是惟一的,你能夠把它看做是在內存中建立副本時所損耗的內從大小,若是懷疑某個程序有內存泄露就查看這個值是否一直增長。程序員
通常狀況下,都是:VSS >= RSS >= PSS >= USSgithub
爲了稍微簡化一下,下面的圖表顯示了三個進程,每一個進程映射到其虛擬地址空間的頁面,而且分別被標記爲A、B或C類:web
至此,每一個進程所佔用的內存組成以下:app
計算三個進程的Pss爲:composer
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 897 4900108K 319044K 153980K 131100K system_server 3910 4670340K 200476K 77423K 67964K org.codeaurora.snapcam 732 281036K 76952K 69501K 68784K /vendor/bin/hw/android.hardware.camera.provider@2.4-service_64 1859 4532080K 205212K 59186K 48300K com.android.systemui 673 1632240K 134900K 42328K 17100K zygote 2669 4481540K 148792K 30077K 21900K com.android.launcher3 2067 4472708K 134984K 29088K 24184K com.android.phone 672 4319928K 151224K 25268K 7800K zygote64 1778 4458488K 116912K 19279K 15600K com.android.bluetooth 1275 126780K 36996K 19247K 8760K /vendor/bin/hw/qcrild 3025 4429916K 111348K 18965K 16384K org.codeaurora.dialer 1304 124668K 36440K 18513K 8000K /vendor/bin/hw/qcrild 826 2188808K 35200K 17394K 12620K /system/bin/surfaceflinger 728 47200K 20752K 17040K 16608K /vendor/bin/hw/android.hardware.audio@2.0-service 3428 1707580K 82368K 16143K 3408K com.qualcomm.qti.qms.service.connectionsecurity 1831 1634080K 56768K 16013K 5888K webview_zygote 821 86604K 28932K 15049K 11536K /system/bin/audioserver 3443 1705828K 80684K 14900K 2284K com.qualcomm.qti.qms.service.telemetry 2571 4419152K 115552K 14712K 10600K com.android.nfc 1805 4411628K 113984K 14547K 10972K com.android.inputmethod.latin 3942 4399092K 94988K 13766K 10728K com.google.ar.core.examples.java.helloar 737 59436K 22164K 12749K 11312K /vendor/bin/hw/android.hardware.graphics.composer@2.2-service 3139 4407532K 107504K 12371K 9620K com.android.email 1079 75212K 16236K 10657K 9936K media.codec 1319 137232K 17276K 10503K 9580K /system/vendor/bin/netmgrd 2831 4401620K 112884K 10086K 5968K android.process.media 3200 4407188K 106352K 9966K 6632K com.android.mms 1040 2196216K 25216K 9650K 7740K media.extractor 754 47912K 15444K 9279K 8852K /vendor/bin/hw/vendor.qti.gnss@2.1-service 3921 4402276K 96488K 9207K 7096K org.codeaurora.gallery 2540 4403336K 107660K 8612K 5220K com.qualcomm.qti.qdma 1979 4413808K 101996K 8174K 5548K .dataservices 3087 4396428K 101276K 7004K 4256K com.android.providers.calendar 1004 41104K 18720K 6821K 4524K /system/bin/cameraserver 2910 4402852K 97864K 6750K 3604K com.qualcomm.location.XT 2025 4400076K 98136K 5998K 3320K com.qualcomm.qti.telephonyservice 3491 4396328K 94684K 5944K 3732K com.qualcomm.qti.workloadclassifier 2191 4398632K 97916K 5857K 3220K com.qualcomm.qcrilmsgtunnel 2125 4395848K 97736K 5739K 3068K android.ext.services 2721 4395804K 97800K 5718K 3212K com.qualcomm.qti.smq 961 2151708K 13616K 5668K 4448K /system/vendor/bin/cnd 3951 4398484K 91132K 5621K 3592K com.android.music 2646 4399780K 95124K 5407K 3068K com.qualcomm.qti.services.secureui:sui_service 1054 58104K 17440K 5355K 3220K /system/bin/mediaserver 3412 4393968K 94736K 5252K 2776K com.qualcomm.qti.modemtestmode 1042 2155140K 18408K 5220K 3556K media.metrics 3007 4399292K 94332K 5091K 2824K com.qti.diagservices 2627 4398052K 92572K 5044K 2888K com.android.se 3335 4397228K 93000K 5031K 2908K com.qualcomm.qti.biometrics.fingerprint.service:remote 3300 4399052K 93328K 4959K 2784K com.qualcomm.telephony 2809 4395468K 92844K 4955K 2812K com.android.keychain 2601 4394396K 93704K 4927K 2672K .pasr 3365 4395848K 92928K 4876K 2720K com.qualcomm.qti.callenhancement 3507 4395736K 93212K 4862K 2708K com.qualcomm.simcontacts 3473 4395708K 93376K 4784K 2620K com.qualcomm.qti.smcinvokepkgmgr 3458 4393648K 91164K 4775K 2728K com.qualcomm.qti.radioconfiginterface 3397 4393652K 91324K 4764K 2712K com.qualcomm.qti.lpa 3382 4393548K 91288K 4735K 2680K com.qualcomm.qti.carrierswitch 2697 4393548K 91596K 4681K 2520K com.android.smspush 3969 4395056K 90068K 4619K 2544K com.waterdaaan.cpufloat 2465 31360K 8952K 4051K 3892K /vendor/bin/hbtp_daemon 1 32124K 5740K 3937K 3312K /init 582 23516K 6652K 3890K 3856K /system/bin/logd 743 22028K 9624K 3866K 3576K /vendor/bin/hw/android.hardware.neuralnetworks@1.1-service-qti 1008 25340K 14056K 3718K 1980K /system/bin/drmserver 748 18056K 7980K 3527K 3460K /vendor/bin/hw/android.hardware.wifi@1.0-service 772 30396K 9644K 3524K 2992K /vendor/bin/hw/vendor.qti.hardware.perf@1.0-service 1248 2139568K 10056K 3306K 2248K /vendor/bin/imsdatadaemon 1159 21432K 8392K 2987K 2476K /system/bin/update_engine 745 36012K 9872K 2910K 2296K /vendor/bin/hw/android.hardware.sensors@1.0-service 756 34456K 8444K 2896K 2396K /vendor/bin/hw/vendor.qti.hardware.biometrics.face@1.0-service 1022 2132188K 8188K 2857K 2492K /system/bin/keystore 591 27712K 8036K 2802K 2484K /system/bin/vold 990 32308K 8116K 2703K 2508K /vendor/bin/ims_rtp_daemon 1013 26448K 6848K 2699K 2604K /system/bin/installd 1155 2135988K 10992K 2575K 1580K /system/bin/seempd 1152 13328K 6964K 2567K 1888K /system/bin/qvrservice 1153 31912K 8588K 2563K 2012K xtra-daemon 671 2146312K 7840K 2551K 2352K /system/bin/netd 978 20036K 7124K 2490K 2436K /vendor/bin/imsrcsd 1151 32240K 8404K 2414K 1964K slim_daemon 985 15652K 6120K 2372K 2312K /system/vendor/bin/cnss_diag 968 76792K 7052K 2329K 2260K /vendor/bin/thermal-engine 1297 22584K 7196K 2283K 2044K /system/vendor/bin/ipacm 1164 22216K 6612K 2138K 2088K /vendor/bin/qfp-daemon 752 25164K 6692K 2086K 1720K /vendor/bin/hw/vendor.nxp.hardware.nfc@1.1-service 1109 19304K 5672K 2081K 2000K /vendor/bin/chre 731 30956K 6632K 2043K 1988K /vendor/bin/hw/android.hardware.bluetooth@1.0-service-qti 1147 17700K 5456K 2002K 1948K /system/bin/perfprofd 776 17944K 5848K 1985K 1268K /vendor/bin/hw/vendor.qti.hardware.scve.objecttracker@1.0-service 778 18272K 5784K 1985K 1300K /vendor/bin/hw/vendor.qti.hardware.scve.panorama@1.0-service 1066 21752K 6820K 1983K 1664K /system/bin/statsd 764 23440K 7216K 1956K 1708K /vendor/bin/hw/vendor.qti.hardware.iop@2.0-service 592 2127348K 7072K 1956K 1576K /system/bin/hwservicemanager 1069 21356K 6664K 1942K 1772K /system/bin/storaged 757 16488K 6428K 1867K 1748K /vendor/bin/hw/vendor.qti.hardware.cvp@1.0-service 963 22004K 6624K 1866K 1612K /vendor/bin/vppservice 854 26396K 7880K 1863K 1308K /vendor/bin/sensors.qti 1150 2131700K 6312K 1862K 1704K lowi-server 734 20968K 6748K 1835K 1224K /vendor/bin/hw/android.hardware.configstore@1.1-service 583 33820K 7108K 1784K 1388K /vendor/bin/qseecomd 749 17628K 6512K 1767K 1616K /vendor/bin/hw/vendor.display.color@1.0-service 785 22052K 8520K 1767K 1248K /vendor/bin/hw/vendor.qti.hardware.sensorscalibrate@1.0-service 4023 21844K 1816K 1687K 1680K /system/bin/adbd 736 22460K 6692K 1685K 1412K /vendor/bin/hw/android.hardware.drm@1.1-service.clearkey 727 23572K 7696K 1680K 1124K /vendor/bin/sscrpcd 735 21644K 6876K 1654K 1372K /vendor/bin/hw/android.hardware.drm@1.0-service 1075 17088K 5980K 1635K 1524K /system/bin/wificond 560 7756K 3088K 1620K 1108K /init 1089 28572K 6776K 1619K 1500K /system/vendor/bin/cnss-daemon 562 9040K 2980K 1560K 1088K /sbin/ueventd 1311 23980K 5672K 1546K 1472K /system/vendor/bin/qti 1023 2130020K 7220K 1522K 1228K /system/bin/mediadrmserver 800 21284K 6148K 1513K 1112K /vendor/bin/hw/vendor.qti.secure_element@1.0-service 1097 25908K 4108K 1507K 1304K /vendor/bin/ssgtzd 1123 2127344K 6972K 1479K 1192K /system/bin/gatekeeperd 1315 23760K 5500K 1440K 1368K /system/vendor/bin/adpl 1082 9732K 4796K 1416K 1088K /vendor/bin/wifidisplayhalservice 1654 2126448K 5904K 1388K 1248K /vendor/bin/hw/android.hardware.contexthub@1.0-service 1530 2141100K 4240K 1374K 652K seempd_sphinx 774 18452K 6100K 1367K 1168K /vendor/bin/hw/vendor.qti.hardware.qteeconnector@1.0-service 962 20436K 5820K 1343K 1292K /system/vendor/bin/dpmQmiMgr 733 8728K 4904K 1308K 928K /vendor/bin/hw/android.hardware.cas@1.0-service 682 10096K 3772K 1297K 1280K /system/bin/ip6tables-restore 1117 21832K 5480K 1277K 1160K /vendor/bin/tloc_daemon 763 22576K 6272K 1256K 1124K /vendor/bin/hw/vendor.qti.hardware.display.allocator@1.0-service 585 16844K 6048K 1229K 924K /vendor/bin/hw/android.hardware.keymaster@4.0-strongbox-service-qti 681 10076K 3688K 1225K 1208K /system/bin/iptables-restore 584 16840K 5948K 1220K 916K /vendor/bin/hw/android.hardware.keymaster@4.0-service-qti 1176 21340K 5296K 1207K 700K /system/bin/dpmd 1084 26012K 5056K 1195K 1152K /vendor/bin/time_daemon 744 16196K 5640K 1182K 1108K /vendor/bin/hw/android.hardware.power@1.2-service 4330 17968K 3724K 1177K 1160K procrank 1009 18460K 5496K 1164K 1040K /system/bin/incidentd 1101 26360K 5068K 1163K 1096K /system/vendor/bin/qdmastatsd 1056 22816K 5656K 1162K 1036K /system/bin/perfservice 952 18648K 5588K 1147K 1064K /system/vendor/bin/qcom-system-daemon 810 27784K 5432K 1135K 1064K /vendor/bin/pm-service 765 16284K 5724K 1134K 1076K /vendor/bin/hw/vendor.qti.hardware.mlshal@1.0-service 1208 22840K 5644K 1123K 1044K /vendor/bin/ATFWD-daemon 561 6732K 2384K 1101K 692K /init 740 14368K 5224K 1098K 1060K /vendor/bin/hw/android.hardware.health@2.0-service 796 14272K 5164K 1097K 1060K /vendor/bin/hw/vendor.qti.hardware.vibrator@1.2-service 975 16320K 4904K 1089K 1048K /vendor/bin/imsqmidaemon 790 14904K 5440K 1081K 1020K /vendor/bin/hw/vendor.qti.hardware.soter@1.0-service 619 15396K 5556K 1053K 976K /vendor/bin/hw/android.hardware.gatekeeper@1.0-service-qti 618 14860K 5392K 1037K 988K /vendor/bin/hw/android.hardware.boot@1.0-service 827 15220K 5076K 1032K 956K /system/bin/thermalserviced 994 24884K 4304K 1014K 988K /vendor/bin/hvdcp_opti 1121 16300K 5320K 990K 480K /system/bin/dpmd 773 15000K 5628K 985K 904K /vendor/bin/hw/vendor.qti.hardware.qdutils_disp@1.0-service-qti 779 14128K 5664K 977K 904K /vendor/bin/hw/vendor.qti.hardware.seccam@1.0-service-qti 747 15276K 5236K 969K 928K /vendor/bin/hw/android.hardware.usb@1.0-service 807 18628K 4864K 956K 904K /vendor/bin/pd-mapper 791 13740K 5608K 951K 820K /vendor/bin/hw/vendor.qti.hardware.tui_comm@1.0-service-qti 971 15584K 4452K 927K 860K /vendor/bin/adsprpcd 966 14280K 5288K 921K 860K /system/vendor/bin/wifilearner 613 12716K 4448K 918K 872K /vendor/bin/vndservicemanager 746 14392K 5144K 916K 876K /vendor/bin/hw/android.hardware.thermal@1.0-service 741 14400K 5144K 911K 872K /vendor/bin/hw/android.hardware.light@2.0-service 753 13664K 5216K 893K 808K /vendor/bin/hw/vendor.qti.esepowermanager@1.0-service 755 14268K 5056K 886K 848K /vendor/bin/hw/vendor.qti.hardware.alarm@1.0-service 799 14272K 5196K 885K 844K /vendor/bin/hw/vendor.qti.power.pasrmanager@1.0-service 742 14400K 5084K 883K 844K /vendor/bin/hw/android.hardware.memtrack@1.0-service 935 18452K 4816K 882K 828K /vendor/bin/pm-proxy 1102 15900K 4344K 879K 840K /system/vendor/bin/loc_launcher 730 13368K 4512K 867K 748K /system/bin/healthd 612 12004K 3900K 855K 812K /system/bin/servicemanager 1532 2137004K 3588K 854K 132K seempd_spa 1290 14788K 4416K 854K 820K /system/vendor/bin/ipacm-diag 615 24380K 4372K 844K 808K /vendor/bin/sec_nvm 805 13320K 4088K 829K 804K /vendor/bin/tftp_server 1099 15640K 4172K 826K 736K /vendor/bin/mlid 998 15620K 4180K 800K 768K /system/bin/smcinvoked 804 19180K 4308K 792K 760K /vendor/bin/rmt_storage 973 15584K 4176K 786K 724K /vendor/bin/cdsprpcd 969 15584K 4196K 782K 716K /vendor/bin/adsprpcd 872 9596K 3312K 767K 576K /system/bin/sh 4029 9596K 3260K 766K 576K /system/bin/sh 1250 11380K 4336K 725K 696K /vendor/bin/msm_irqbalance 1326 15996K 4348K 719K 684K /system/vendor/bin/port-bridge 729 13004K 4352K 711K 672K /system/bin/hw/android.hidl.allocator@1.0-service 614 12820K 4140K 676K 640K /vendor/bin/spdaemon 1107 11492K 4160K 662K 632K /vendor/bin/seemp_healthd 1156 9896K 3112K 651K 636K /system/bin/tombstoned 802 10388K 3652K 616K 592K /vendor/bin/qrtr-ns 1094 5088K 2600K 601K 480K /vendor/bin/ssgqmigd 825 10452K 3284K 555K 536K /system/bin/lmkd 3528 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。