关于 apache 调优,网上有很多不错的文档和帖子,例如。如何在 Ubuntu 14.04 服务器上调整 Apache
不幸的是,几乎所有这些都描述了如何使用 mpm_prefork 调整 apache。
据我所知,prefork 方法有点旧,在多线程方面效率低下……无论如何,我的客户坚持使用 mpm_event,他们的主要问题是当访问者数量很少时,他们的 VPS 变得没有响应,我发现问题出在内存上,因为他们的 RAM 已满,它开始使用交换,交换已满,恢复服务器的唯一方法是重新启动 httpd 服务,或者上帝保佑,重新启动服务器本身!
VPS 用作网络服务器、邮件服务器时有 2GB 的 RAM,并且还安装了 MySql。php.ini 文件允许 max_memory=140M(我认为有点高?!)但是现在他们确实需要这个数量。快速计算一下 VPS 正在执行的其他任务,我认为为 apache 分配 1GB 内存是安全的。
但是我在网上找不到任何方法来计算 mpm_event 的设置以将其使用量限制为最大 1GB。
任何有关此计算的帮助都将不胜感激
需要来自评论的信息:
ps -ef | grep php
=>nothing
来自 Apache 的 phpinfo() =>Server Api : CGI/FastCGI
apachectl -M
=>
Loaded Modules:
core_module (static)
authn_file_module (static)
authn_dbm_module (static)
authn_anon_module (static)
authn_dbd_module (static)
authn_socache_module (static)
authn_core_module (static)
authz_host_module (static)
authz_groupfile_module (static)
authz_user_module (static)
authz_dbm_module (static)
authz_owner_module (static)
authz_dbd_module (static)
authz_core_module (static)
access_compat_module (static)
auth_basic_module (static)
auth_form_module (static)
auth_digest_module (static)
allowmethods_module (static)
file_cache_module (static)
cache_module (static)
cache_disk_module (static)
cache_socache_module (static)
socache_shmcb_module (static)
socache_dbm_module (static)
socache_memcache_module (static)
so_module (static)
macro_module (static)
dbd_module (static)
dumpio_module (static)
buffer_module (static)
ratelimit_module (static)
reqtimeout_module (static)
ext_filter_module (static)
request_module (static)
include_module (static)
filter_module (static)
substitute_module (static)
sed_module (static)
deflate_module (static)
http_module (static)
mime_module (static)
log_config_module (static)
log_debug_module (static)
logio_module (static)
env_module (static)
expires_module (static)
headers_module (static)
unique_id_module (static)
setenvif_module (static)
version_module (static)
remoteip_module (static)
proxy_module (static)
proxy_connect_module (static)
proxy_ftp_module (static)
proxy_http_module (static)
proxy_fcgi_module (static)
proxy_scgi_module (static)
proxy_wstunnel_module (static)
proxy_ajp_module (static)
proxy_balancer_module (static)
proxy_express_module (static)
session_module (static)
session_cookie_module (static)
session_dbd_module (static)
slotmem_shm_module (static)
ssl_module (static)
lbmethod_byrequests_module (static)
lbmethod_bytraffic_module (static)
lbmethod_bybusyness_module (static)
lbmethod_heartbeat_module (static)
unixd_module (static)
dav_module (static)
status_module (static)
autoindex_module (static)
info_module (static)
suexec_module (static)
cgi_module (static)
dav_fs_module (static)
dav_lock_module (static)
vhost_alias_module (static)
negotiation_module (static)
dir_module (static)
actions_module (static)
speling_module (static)
userdir_module (static)
alias_module (static)
rewrite_module (static)
suphp_module (shared)
ruid2_module (shared)
mpm_event_module (shared)
答案1
请注意,如果您使用的是 mod_php,它与线程式 apache 工作程序不兼容,您只能将其与 mpm_prefork 一起使用。如果您坚持使用 mpm_event(甚至 mpm_worker),可以使用 php-fcgi,这是一种更好但更复杂的设置。这样,您将拥有一个完整的 apache / php 分离,因此您可以在 apache 上使用 pmp_event 并仅将 php 请求传递给由 php-fcgi 管理的 php 进程池。
但是既然您谈到了内存和交换,我将更多地关注 hpp 部分的调整。您能确认您使用的是 mod_php 吗?如果是,php.ini 中的内存设置是什么?