为什么重启后不到 24 小时所有内存就用完了?

为什么重启后不到 24 小时所有内存就用完了?

运行 Ubuntu Server 12.04,meminfo 显示几乎所有内存都已利用:

$ cat /proc/meminfo
MemTotal:        8173180 kB
MemFree:          139556 kB
Buffers:         1146204 kB
Cached:          3062088 kB
SwapCached:           28 kB
Active:          4181280 kB
Inactive:        2175224 kB
Active(anon):    1824800 kB
Inactive(anon):   329536 kB
Active(file):    2356480 kB
Inactive(file):  1845688 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      11719380 kB
SwapFree:       11719068 kB
Dirty:               160 kB
Writeback:             0 kB
AnonPages:       2148472 kB
Mapped:            98200 kB
Shmem:              6128 kB
Slab:            1509448 kB
SReclaimable:    1463828 kB
SUnreclaim:        45620 kB
KernelStack:        4504 kB
PageTables:        37756 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    15805968 kB
Committed_AS:    2828504 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      295632 kB
VmallocChunk:   34359432032 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      195904 kB
DirectMap2M:     8187904 kB

这是重启后几个小时内发生的情况。内存消耗很快。当我运行 top 时,前 5 个条目如下所示:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                
20011 myuser    20   0  654m 406m 3584 S    2  5.1   3:38.71 ruby                                    
 1311 root      20   0     0    0    0 S    0  0.0   3:50.95 jbd2/sda3-8                             
20633 root      20   0     0    0    0 S    0  0.0   0:02.82 kworker/7:3                             
27547 myuser    20   0 17468 1492 1044 R    0  0.0   0:00.07 top                                     
    1 root      20   0 24728 2672 1380 S    0  0.0   0:01.28 init                                    
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd 

因此目前只有 ruby​​ 正在利用内存。

我可以进一步细分 Phusion Passenger(Apache 的一个模块)和 Apache:

------ Passenger processes ------
PID    VMSize     Private   Name
---------------------------------
4088   218.3 MB   0.3 MB    PassengerWatchdog
4092   1271.8 MB  2.9 MB    PassengerHelperAgent
4099   230.6 MB   1.0 MB    PassengerLoggingAgent
7143   317.8 MB   90.3 MB   Passenger RackApp: /home/mysite/public_html/store.mysite.com/current
14841  654.3 MB   414.2 MB  Passenger RackApp: /home/mysite/public_html/staging.mysite.com/current
17393  718.3 MB   444.1 MB  Passenger RackApp: /home/mysite/public_html/staging.mysite.com/current
20004  526.2 MB   231.3 MB  Passenger RackApp: /home/mysite/public_html/staging.mysite.com/current
20011  654.1 MB   340.6 MB  Passenger RackApp: /home/mysite/public_html/staging.mysite.com/current
20018  462.2 MB   150.9 MB  Passenger RackApp: /home/mysite/public_html/staging.mysite.com/current
### Processes: 9
### Total private dirty RSS: 1675.62 MB

Apache 工作者:

lynx http://localhost/server-status

   Total accesses: 4452 - Total Traffic: 19.3 MB
   CPU Usage: u.31 s.21 cu0 cs0 - .000612% CPU load
   .0524 requests/sec - 238 B/second - 4556 B/request  
   10 requests currently being processed, 5 idle workers

_WW_W__WWWW..W.W..._W...........................................
................................................................
................................................................
................................................................

$ ps aux | grep apache2 | grep -v pts | awk '{ tot += $6; procs += 1; print $2,$6,$11  } END { print "TOTAL: ",tot,"/",procs,"=",tot/procs }'
4084 23068 /usr/sbin/apache2
7089 13496 /usr/sbin/apache2
11074 13668 /usr/sbin/apache2
14848 13288 /usr/sbin/apache2
16562 13508 /usr/sbin/apache2
16565 13248 /usr/sbin/apache2
17527 13832 /usr/sbin/apache2
21656 13516 /usr/sbin/apache2
23567 13508 /usr/sbin/apache2
24407 13508 /usr/sbin/apache2
25506 13256 /usr/sbin/apache2
26736 13540 /usr/sbin/apache2
26742 13288 /usr/sbin/apache2
27526 13512 /usr/sbin/apache2
27729 13036 /usr/sbin/apache2
28198 13032 /usr/sbin/apache2
TOTAL:  224304 / 16 = 14019

如您所见,apache/phusion 乘客不可能使用近 8 GB 的 RAM。这里可能发生了什么?

答案1

它可能不是实际使用的 RAM,而是磁盘缓存。磁盘缓存是指将任何常用文件存储在 RAM 中,以便可以轻松快速地再次检索它们,而无需等待磁盘(这比等待 RAM 慢得多)。您通常可以使用命令的第二行来判断应用程序实际使用了多少 RAM free

以下是一个例子:

            total       used       free     shared    buffers     cached
Mem:         12925       1221      11704         35         32        468
-/+ buffers/cache:        720      12205
Swap:            0          0          0

在这个例子中,我实际使用了 13GB 内存中的 720MB,但加上磁盘缓存,总共 1221MB。一段时间后,我的 RAM 使用量会增加,因为磁盘缓存会增加,但实际的应用程序 RAM 使用量可能不会增加。

我希望这能更好地解释事情。

答案2

来自你的帖子:Cached: 3062088 kB

这确实不是什么问题。您的交换使用率非常低。

SwapTotal:      11719380 kB
SwapFree:       11719068 kB

这意味着绝大多数工作都在 RAM 中非常高效地执行

相关内容