顶部的内存丢失在哪里?

时间:2016-11-25 07:15:32

标签: linux operating-system

以下是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%)?

1 个答案:

答案 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. 内存,这提高了性能。在应用程序需要部分缓存内存的那一刻,它立即被赋予它。这就是为什么你的总内存百分比计算的可用内存与你期望的不匹配!