运行 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 中非常高效地执行