linux查看系统内存占用排序以及VSZ、RSS内存的区别 什么是虚存、实存、共享内存

文章介绍了Linux系统中用于查看进程内存使用情况的命令,如`psaux--sort=-%mem|head-20`,并详细解释了RSS(常驻内存大小)、VSZ(虚拟内存大小)和PSS(比例分配大小)的概念。RSS表示进程实际占用的物理内存,VSZ则包含所有可访问的内存,PSS是对动态库内存使用的一种按比例分配的度量。此外,文章还提到了虚存和实存的差异以及共享内存的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照内存大小显示前20个进程

ps aux --sort=-%mem | head -20 
$ ps aux --sort=-%mem | head -20
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
nvidia    469117 66.2 16.6 41568364 5202684 pts/6 Sl  15:08   4:24 mainboard -d /apollo/modules/perception/production/dag/dag_streaming_perception_trafficlights.dag
nvidia      4420 72.3 14.1 40500176 4435756 pts/0 Sl  13:58  55:05 mainboard -d modules/prediction/dag/prediction.dag -p mainboard_default -s CYBER_DEFAULT
nvidia      4915 56.8 13.0 39041860 4068040 pts/1 Sl+ 13:59  43:12 ./rs_sdk_demo
nvidia    471489 67.4  2.7 2994036 856136 pts/6  Sl   15:08   4:15 mainboard -d modules/drivers/camera/dag/camera_apollo_3_0.dag -p mainboard_default -s CYBER_DEFAULT
nvidia    121573  7.6  2.7 5271252 853804 ?      Sl   14:17   4:24 /usr/lib/firefox/firefox -new-window
nvidia      6681  8.2  2.3 3062260 723344 pts/5  Sl+  14:00   6:07 cyber_monitor
nvidia      3780  4.6  2.0 5457740 652952 ?      Rsl  13:58   3:35 /usr/bin/gnome-shell
nvidia      4423  146  1.9 5674744 620008 pts/0  Sl   13:58 111:33 mainboard -d modules/perception/production/dag/dag_streaming_perception_mems.dag -p mainboard_default -s CYBER_DEFAULT
nvidia      4419 91.9  1.8 5421840 586128 pts/0  Sl   13:58  70:01 mainboard -d modules/perception/production/dag/dag_streaming_perception_rs.dag -p mainboard_default -s CYBER_DEFAULT
nvidia      4424 45.7  1.7 4869580 552084 pts/0  Sl   13:58  34:51 mainboard -d modules/perception/production/dag/dag_streaming_perception_fusion.dag -p mainboard_default -s CYBER_DEFAULT
nvidia     33279  4.5  1.0 44568684 316284 ?     Sl   14:04   3:11 /usr/share/code/code --type=renderer --enable-crashpad --crashpad-handler-pid=33096 --enable-crash-reporter=e15b358d-4308-4fea-a75a-4eed6bf1f953,no_channel --user-data-dir=/home/nvidia/.config/Code --standard-schemes=vscode-webview,vscode-file --secure-schemes=vscode-webview,vscode-file --bypasscsp-schemes --cors-schemes=vscode-webview,vscode-file --fetch-schemes=vscode-webview,vscode-file --service-worker-schemes=vscode-webview --streaming-schemes --app-path=/usr/share/code/resources/app --no-sandbox --no-zygote --enable-blink-features=HighlightAPI --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --launch-time-ticks=441823188 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,15472344108584902131,18272031511797820233,131072 --disable-features=CalculateNativeWinOcclusion,SpareRendererForSitePerProcess --vscode-window-config=vscode:1fd7e1b4-4bd7-4c5a-b5ce-55338bb22888 --enable-crashpad
nvidia      4422  6.1  0.8 2199144 268716 pts/0  Sl   13:58   4:41 mainboard -d modules/bridge/dag/bridge_receiver_robosense.dag -p mainboard_default -s CYBER_DEFAULT
nvidia      4421  7.0  0.8 2062524 268584 pts/0  Sl   13:58   5:23 mainboard -d modules/bridge/dag/bridge_sender_robosense.dag -p mainboard_default -s CYBER_DEFAULT
nvidia      5015  0.0  0.8 2423184 259128 pts/5  Tl   13:59   0:03 cyber_monitor
nvidia    148403  0.5  0.7 2706576 243812 ?      Sl   14:21   0:17 /usr/lib/firefox/firefox -contentproc -childID 14 -isForBrowser -prefsLen 10049 -prefMapSize 245530 -jsInitLen 277128 -parentBuildID 20220608170832 -appDir /usr/lib/firefox/browser 121573 tab
nvidia      5518  0.0  0.7 2425580 241324 pts/5  Tl   14:00   0:00 cyber_monitor
nvidia      4910 14.1  0.7 2270644 240720 pts/0  Sl   13:59  10:46 mainboard -d /apollo/modules/canbus/dag/canbus.dag -p canbus -s CYBER_DEFAULT
nvidia      4417  4.3  0.7 2336800 240444 pts/0  Sl   13:58   3:20 mainboard -d modules/transform/dag/static_transform.dag -p mainboard_default -s CYBER_DEFAULT
nvidia     34368  4.6  0.7 38181356 234044 ?     Sl   14:04   3:15 /usr/share/code/code --ms-enable-electron-run-as-node /usr/share/code/resources/app/out/bootstrap-fork --type=fileWatcher

可以看到内存大小从大到小排列,但是有VSZ RSS的区别。而且CSZ十分的大甚至超过我们设备的存储空间。

RSS是Resident Set Size(常驻内存大小)的缩写,用于表示进程使用了多少内存(RAM中的物理内存),RSS不包含已经被换出的内存。RSS包含了它所链接的动态库并且被加载到物理内存中的内存。RSS还包含栈内存和堆内存。

VSZ是Virtual Memory Size(虚拟内存大小)的缩写。它包含了进程所能访问的所有内存,包含了被换出的内存,被分配但是还没有被使用的内存,以及动态库中的内存。

假设进程A的二进制文件是500K,并且链接了一个2500K的动态库,堆和栈共使用了200K,其中100K在内存中(剩下的被换出或者不再被使用),一共加载了动态库中的1000K内容以及二进制文件中的400K内容至内存中,那么:

RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K

由于部分内存是共享的,被多个进程使用,所以如果将所有进程的RSS值加起来可能会大于系统的内存总量。

申请过的内存如果程序没有实际使用,则可能不显示在RSS里。比如说一个程序,预先申请了一大批内存,过了一段时间才使用,你会发现RSS会增长而VSZ保持不变。

还有一个概念是PSS,它是proportional set size(proportional是成比例的意思)的缩写。这是一种新的度量方式。它将动态库所使用的内存按比例划分。比如我们前面例子中的动态库如果是被两个进程使用,那么:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K

一个进程中的多个线程共享同样的地址空间。所以一个进程中的多个线程的RSS,VSZ,PSS是完全相同的。linux下可以使用ps或者top命令查看这些信息。

什么是虚存、实存、共享内存?

虚存 ( VIRT = SWAP交换区 + RES 实际占用实存):进程 “需要的” 虚拟内存大小。包括进程使用库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等。例如:申请10MB,使用1MB,依然增长到10MB。

实存( RES = CODE代码 + DATA数据 ):包括使用中的 malloc, new分配的堆空间和分配的栈空间,但不包括 swap out 量。虚存是包含实存的。例如:申请10MB,使用1MB,实际增长内存1MB。

共享内存( SHR ):自身,也包括其它进程的共享内存。进程只使用了几个共享库的函数,但包含整个共享库大小,这些库对于每个进程而言都是公用的,它们在内存中实际只会加载一份,这部分称为共享内存。某个进程所占的物理内存大小:RES 实存 - SHR 所占用共享内存大小(实际所占用)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翟羽嚄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值