我迫切需要帮助来弄清楚如何解决我遇到的这个问题。我运行一个相当关键的网络服务器(Debian 7.5、512MB RAM、512MB swap、Apache、MySQL)。它在上面运行几个 WordPress 网站。今天我发现网站响应很慢,ssh 发现平均负载略高于 10.0,RAM 使用率为 100%,swap 接近 512MB 限制。
我不知道如何弄清楚发生了什么。Apache 或 MySQL 是否未正确调整?也许有人在反复攻击服务器(我怎么知道?)。我安装了htop
,但即使我看到 Apache 或 MySQL 正在消耗大量资源,我怎么能找出原因呢?
任何正确方向的观点都将不胜感激。我在这里不知所措,我必须保持这台服务器稳定。
旁注:服务器运行了 30 天,所以这可能是某种缓慢的泄漏。现在我已经重新启动,平均负载为 0.45 1.10 0.88,RAM 为 165/512MB,swap 为 68/512MB。
更新:仍然有问题。htop
我截取了下面的截图。
恭喜,您已经设法使用了几乎所有的交换空间。
这里第一个明显的问题是你深入交换了。这可能是导致系统如此剧烈抖动的原因(在系统中花费大量时间、I/O 等待和软件中断)。
首先要做的是减少正在运行的 Apache 进程的数量。对于一个小型站点,你不需要那么多,它只会让你深入交换并扼杀你的表现......这已经发生了。我建议你从很小的地方开始,并在必要时增加。一个例子:
这限制您只能同时处理 5 个请求(其他人都必须排队等候)。如果此时您收到来自 Apache 的关于服务器耗尽的警告,并且您仍有可用的 RAM,那么您可以增加它们,但您最终会遇到 VPS 根本没有足够的 RAM 来运行的地步。处理您的所有流量。此时您应该升级 VPS。
首先,根据您发布的带有
htop
输出的屏幕截图,您在运行 WordPress 的站点上似乎有 512MB 的 RAM?我从未见过 WordPress 在内存小于 1GB 的服务器上感到高兴。也许如果您正在运行测试或开发站点,512MB 就足够了,但对于生产站点,您需要 1GB 的 RAM。那是你问题的根源。也就是说,这里有一些想法可以帮助您从现有设置中获得更好的性能:首先,我不会对发生的攻击感到恐慌。现实情况是,您的服务器可能只是承担了高负载的合法流量,但服务器本身并未针对您的使用进行配置/调整。当然,糟糕的配置可能会让您在 DDoS(分布式拒绝服务)攻击期间坐下来,但是当好的/正常流量突然大量出现时,这一切都会让您的生活变得悲惨。
我发布了一个很好的项目列表,您可以查看以提高您在另一个类似问题上的 LAMO 堆栈性能,并将在此处重新发布以供您参考:
KeepAlive
Apache 中有一个设置非常好用!但是开箱即用,我相信它被设置为MaxKeepAliveRequests
100,这是相当疯狂的。我通常将其设置为大约 30 个连接,KeepAliveTimeout
时间为 2 到 3 秒。关键是要具有与KeepAliveTimeout
平均页面下载所需的速度相匹配的速度,并为开销/速度留出一点空间。因此,如果页面在 1 秒内加载,请执行KeepAliveTimeout
2 秒。memory_limit
你的php.ini
并确保它没有高于必要的值。默认为 64M,但在很多情况下可以降低到 32M。关于 MySQL 调优,一开始可能需要几周时间才能确定。调整脚本的原因是基于 MySQL 看到的真实流量。因此,您基本上让您的网站向全世界开放,等待 2 天(至少),运行调整脚本,然后再等几天再调整一些。大约一周后,您应该能够调整 MySQL 以使其与您的设置一样好。
首先安装这些插件:超级缓存(htaccess模式)、wpbase、小部件缓存。Wordpress 以存在这些问题而闻名。如果这没有帮助,则可能是您的某个主题出现内存泄漏(尤其是在启用移动视图的情况下)。
发布您的访问和错误日志。
我强烈建议使用 nginx 而不是 apache。