我买了 VPS,上面安装了 ubuntu。我安装了 apache 作为辅助角色(不是 prefork),还安装了 ruby EE 1.8.7 和 mysql 5.x
现在,当我检查内存时,我发现机架使用了 18.6%(共 924 MB)(一定是我正在运行的 rails 应用程序)
当我执行 free -m 时,我得到以下结果:
total used free shared buffers cached
Mem: 924 602 322 0 0 0
-/+ buffers/cache: 602 322
Swap: 0 0 0
我的内存用在哪儿了?free -m 显示所有使用的内存都是我的缓存,没有其他的,这是怎么回事?到目前为止,我的网站还没有任何用户。
除了 rack 的 18.6% 和 mysql 的 2.6% 之外,AUX 没有显示任何有趣的内容。
一旦我关闭 Apache 实例,内存就会降至 150 MB。
已加载的 Apache 模块列表:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_worker_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgid_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
passenger_module (shared)
这是猫的结果/proc/meminfo
MemTotal: 946344 kB
MemFree: 336624 kB
Buffers: 0 kB
Cached: 0 kB
SwapCached: 0 kB
Active: 0 kB
Inactive: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 946344 kB
LowFree: 336624 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 0 kB
Mapped: 0 kB
Slab: 0 kB
PageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 0 kB
Committed_AS: 0 kB
VmallocTotal: 0 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
答案1
您所看到的行为有几个原因。首先:
ps aux 的 % 基于常驻:
%mem %MEM ratio of the process's resident set size to the physical memory on the machine, expressed as a percentage. (alias pmem).
在显示值时,free 的报告包括活动内存(ps 中的常驻/%MEM)以外的内容
要点是,当您查看空闲空间时,您会看到在显示总数时 VSZ 和其他分配被加在一起。当您查看 ps 中的 % 时,您只看到了拼图的一小部分。
为了验证这一点,你可以看看两件事,首先运行:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www 18442 0.0 0.0 519156 65460 ? Sl Sep08 1:47 httpd
您应该看到 VSZ 将比 RSS 大得多,并且如果您进行计算,则可能会得出更大的 % (如果包括在内)。
其次,您可以通过直接查看 /proc/meminfo 来检查实际使用的内存量:
# cat /proc/meminfo
MemTotal: 99197880 kB
MemFree: 72697684 kB
Buffers: 13813488 kB
Cached: 4841820 kB
SwapCached: 196 kB
Active: 4662952 kB
...
您会注意到,免费的“已使用”列不仅仅是活动(大致是来自 ps 的 RSS)。
关于为什么会出现这种情况的实际解释实际上在几本书中都有介绍,如果你想入睡的话,这些书是非常好的书,但是你可以从几篇文章中获得一些基本的了解:
记忆信息: http://www.redhat.com/advice/tips/meminfo.html
ps/virtual 和 VSZ 解释: http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html
答案2
如果关闭 Apache 会释放 450mb(大约一半的内存),那么就开始查看 Apache。查看它在启动时加载的模块、任何相关环境以及响应请求所消耗的任何内存。您的应用程序中可能存在占用内存较多或内存泄漏的模块。还要查看启动时的工作程序数量和工作程序池大小。