我有一对服务器托管一个流量适中的 Magento 电子商务网站(谷歌分析报告每天 60k 页面浏览量,我认为服务器本身报告了大约 80k)。数据库服务器运行平稳快速,除了偶尔偶尔打嗝外,但 apache 服务器经常发生故障。
我已将 magento 设置为使用推荐的 PHP 缓存 (APC),并将其自己的缓存文件保存在 1.5 gig tmpfs 中(此 tmpfs 经常变得非常满,我有一个脚本运行以在 tmpfs 为超过 80% 已满)。我提供来自亚马逊云前沿的大多数图像。我最近将 nginx 设置为 apache 的反向代理(nginx 也提供静态文件)。我已经尽我所能配置了 apache - keepalives 和 hostnamelookups 都关闭了,prefork 配置如下:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我没有关闭 .htaccess 文件,并且访问日志是打开的。我知道有些模块我可以关闭。我不确定这三个变化中的任何一个会产生什么影响,如果有的话。
apache 服务器是一个 VPS,有 6 gig 的 RAM。截至撰写本文时,服务器正在报告load average: 17.77, 18.27, 49.76
,但大约有 2 gig 的可用 RAM。当它变得非常糟糕时,负载会增加到 120+ 并保持在那里 - 重新启动 apache 会使站点重新启动并重新降低负载。
vmstat
是(当服务器报告上面的负载时),我认为,显示 CPU …
我有一台运行 apache 的服务器,并且偶尔会看到 apache 进程达到 100% 并保持在那里。今天,在两个进程 100% 的情况下,我关闭了对服务器的外部访问(以防止对 apache 的进一步请求)。五分钟后,没有请求进入服务器,但两个进程仍处于 100%。
我已经运行lsof
了每个进程,他们给了我大约 9000 行输出(这对我来说也可能是希腊语)。没有其他进程似乎表现异常或等待等。
我的数据库在第二台服务器上。Usingmytop
显示来自 apache 服务器的两个处于活动状态的 MySQL 连接,均处于“睡眠”状态。我杀死了其中一个 MySQL 线程,Apache 服务器上的任一进程都没有变化。
这个 apache 服务器是简单负载均衡器背后的两个服务器之一。不知道有没有关系
如何确认 apache 问题与我在数据库服务器上看到的内容有关?这可能是狡猾的 SQL 调用的结果,还是其他原因?
编辑:发现问题。这是 Magento 的代码问题。图像大小调整功能无法打开图像,因为扩展名不正确(它是带有 jpg 扩展名的 BMP)。这个错误处理程序再次调用调整大小,等等 - 一个循环。通过strace
对行为不端的 apache 进程执行操作发现了这一点。
我最近在防火墙阻止两台服务器之间的流量方面遇到了一些麻烦,我想检查 iptables 如何处理应用于同一 IP 的多个规则。如果我运行,iptables -L -n | grep 1.2.3.4
我会看到这个输出:
ACCEPT all -- 1.2.3.4 0.0.0.0/0
DROP all -- 1.2.3.4 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 1.2.3.4
DROP all -- 0.0.0.0/0 1.2.3.4
Run Code Online (Sandbox Code Playgroud)
iptables 将如何处理这些规则?来自 1.2.3.4 的所有流量都会被丢弃吗?
apache-2.2 ×2
csf ×1
firewall ×1
hanging ×1
iptables ×1
magento ×1
mysql ×1
nginx ×1
performance ×1
php ×1