以下是top的输出(按%Mem 排序):
Mem: 5796624k total, 4679932k used, 1116692k free, 317652k buffers
Swap: 0k total, 0k used, 0k free, 1734160k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13169 storm 20 0 3279m 344m 16m S 0.7 6.1 201:38.40 java
5463 storm 20 0 2694m 172m 14m S 0.0 3.0 72:38.49 java
5353 storm 20 0 2561m 155m 14m S 0.0 2.7 30:20.43 java
13102 app 20 0 3813m 80m 17m S 0.3 1.4 132:37.16 java
13147 storm 20 0 3876m 65m 16m S 0.0 1.2 23:21.73 java
3081 named 20 0 230m 16m 2652 S 0.0 0.3 1:22.81 named
29773 root 20 0 318m 10m 3576 S 0.0 0.2 5:59.41 logstash-forwar
5345 root 20 0 193m 10m 1552 S 0.0 0.2 12:24.21 supervisord
1048 root 20 0 249m 5200 1068 S 0.0 0.1 0:22.55 rsyslogd
21774 root 20 0 99968 3980 3032 S 0.0 0.1 0:00.00 sshd
3456 postfix 20 0 81108 3432 2556 S 0.0 0.1 0:02.83 qmgr
3453 root 20 0 80860 3416 2520 S 0.0 0.1 0:19.40 master
在GB中:
Mem: 5.8g total, 4.7g used, 1.1g free, 0.3g buffers
所以免费的记忆是1.1 / 5.8~19%
如果我们添加最高%Mem,我们看到使用的是:6.1 + 3.0 + 2.7 + 1.4 + 1.2 + 0.3 + ...... ~16%,这意味着免费应该是大约84%
为什么数字不匹配(19%vs 84%)?
答案 0 :(得分:2)
从顶部的内存使用相关行:
def user_response(users)
users.map do |user|
user.attributes.slice(:id, :nickname, :online_sharing, :offline_export, :created_at, :app_opens_count, :last_activity, :activity_goal, :last_activity, :region)
end
end
总内存等于已用内存和可用内存的总和。另一方面,使用的是“应用程序真正使用”和缓存和缓冲区之和。所以,在你的情况下是这样的:
Mem: 5796624k total, 4679932k used, 1116692k free, 317652k buffers
Swap: 0k total, 0k used, 0k free, 1734160k cached
总内存为5.8g,应用程序确实使用了2.6g。因为,1.1g是免费的,这意味着缓存了Mem = 5796624k = 4679932k + 1116692k;
"Really used by applications" = Used - (cached + buffers)
= 4679932k - (1734160k + 317652k )
= 2628120k.
内存,这提高了性能。在应用程序需要部分缓存内存的那一刻,它立即被赋予它。这就是为什么你的总内存百分比计算的可用内存与你期望的不匹配!