zoukankan      html  css  js  c++  java
  • Linux学习:使用 procrank 测量系统内存使用情况

      程序员应该了解一个基本问题:我的程序使用了多少内存?这可能是一个简单的问题,但是对于像Linux这样的虚拟内存操作系统,答案是相当复杂的,因为top和ps给出的数字不能简单相加。进程中两个最常见的内存信息指标是虚拟集大小(Vss)和常驻集大小(Rss),可以在ps和top指令查看到这些参数:

      

      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
      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源码(systemextraslibpagemap)做了一些小的修改,并添加了一个Makefile,这样它就可以在大多数GNU/Linux环境下编译,包括交叉编译以供嵌入式使用。

      代码下载:

    git clone  https://github.com/csimmonds/procrank_linux.git

      关于编译和使用的说明请参考 README。

  • 相关阅读:
    A1035
    A1005
    A1073
    A1061
    A1058
    A1027
    A1019
    Java 操作临时文件创建与删除
    面试必会之HashMap源码分析
    springboot整合cxf框架启动报错
  • 原文地址:https://www.cnblogs.com/blogs-of-lxl/p/11491991.html
Copyright © 2011-2022 走看看