我一直在检查我的网络服务器,但遇到了一些问题。首先,使用 top 时,我注意到 Apache 占用了大量内存,其实这并不奇怪,但即使对于 Apache 来说,每个进程 130-150M 似乎也很高。我正在运行 2.2 worker MPM,使用 mod_fcgid 进行 php。我以为采用这种方式可以降低内存消耗,但当我从 Prefork 和 mod_php 切换时,似乎并没有太大变化。我在这里遗漏了什么?我读到过,经过良好调整的 Apache 每个进程应该使用接近 15-25MB 的内存。我错了吗?
下面是使用我的 apache 版本编译的模块列表:
以模块形式编译:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_cache.c
mod_mem_cache.c
mod_include.c
mod_filter.c
mod_deflate.c
mod_log_config.c
mod_logio.c
mod_env.c
mod_expires.c
mod_headers.c
mod_unique_id.c
mod_setenvif.c
mod_version.c
mod_proxy.c
mod_proxy_connect.c
mod_proxy_ftp.c
mod_proxy_http.c
mod_proxy_scgi.c
mod_proxy_ajp.c
mod_proxy_balancer.c
mod_ssl.c
worker.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_info.c
mod_suexec.c
mod_cgid.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
其中是否有特别大且可以省略的。我使用服务器上的简单 Apache 设置构建了一个通用版本。我猜那里有多余的东西需要修剪。
我还有一个问题:进程之间是否有共享内存?每个进程使用超过 130MB 的内存似乎有点可疑。有没有办法限制使用的内存量?缓存设置?
答案1
这是虚拟的内存,而不是物理内存。虚拟内存通常不被视为稀缺资源。尝试减少 Apache 对虚拟内存的消耗将是浪费时间。如果您没有实际问题和实际症状,则没有什么可解决的。
答案2
Apache 有一些关于此的文档,但它位于一个奇怪的地方。
看http://wiki.apache.org/httpd/DoS,这解释了您所看到的一些内容:
请注意,ps(1) 和 top(1) 等工具报告的内存使用情况包括共享内存,因此它们报告的明显数字远高于 apache 的实际每个进程使用情况。
因此,您的“高内存”问题有点像假象。