这是一台 32 GB 内存的机器,下面的 top/free 命令显示使用了 30.5 GB 内存,但总 RES 实际上远小于 30.5 GB。为什么?
top - 21:54:46 up 20 days, 1:46, 4 users, load average: 0.59, 0.43, 0.34
Tasks: 238 total, 2 running, 233 sleeping, 0 stopped, 3 zombie
%Cpu(s): 3.8 us, 0.7 sy, 0.1 ni, 94.0 id, 1.5 wa, 0.0 hi, 0.0 si, 0.0 st
GiB Mem: 31.523 total, 30.609 used, 0.913 free, 0.456 buffers
GiB Swap: 4.000 total, 0.134 used, 3.866 free. 22.733 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2600 xxxxxxx 20 0 12.048g 2.002g 0.034g S 0.3 6.4 14:24.92 xxxxxx
1443 xxxxx 20 0 1.302g 0.837g 0.019g S 0.3 2.7 102:19.93 xxxxxx
9782 xxxxxxx 20 0 1.942g 0.573g 0.043g S 17.0 1.8 164:53.02 cinnamon
20730 xxxxx 20 0 0.619g 0.289g 0.055g S 0.3 0.9 102:19.50 xxxxxx
29920 xxx 20 0 0.787g 0.189g 0.020g S 0.3 0.6 60:42.72 xxxxxx
31377 xxxxxxx 20 0 3.390g 0.169g 0.006g S 0.0 0.5 38:45.66 xxxxxx
9497 xxxxxxx 20 0 0.367g 0.168g 0.036g S 1.3 0.5 16:00.60 xxxxxx
1402 root 20 0 1.010g 0.154g 0.024g S 0.3 0.5 54:30.61 xxxxxx
14176 root 39 19 0.306g 0.118g 0.011g S 0.0 0.4 4:32.76 xxxxxx
903 xxxxxxx 20 0 0.383g 0.101g 0.034g S 0.3 0.3 0:43.40 xxxxxx
total used free shared buffers cached
Mem: 32 31 1 0 0 23
-/+ buffers/cache: 8 24
Swap: 3 0 3
以下 ps 命令计算总 RSS,即 7 GB,但 top/free 命令返回已使用的 30.5 GB。为什么?
ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
我最大的错误是这台机器实际上是 32 GB 内存,而不是 64 GB。