服务器问题,内存不足,平均负载非常高

服务器问题,内存不足,平均负载非常高

我迫切需要帮助,找出如何解决我遇到的这个问题。我运行一个相当关键的 Web 服务器(Debian 7.5、512MB RAM、512MB 交换、Apache、MySQL)。它上面运行着几个 WordPress 网站。今天我发现网站响应速度很慢,通过 ssh 登录后发现平均负载刚好超过 10.0,RAM 使用率为 100%,交换接近 512MB 的限制。

我不知道如何弄清楚发生了什么。Apache 或 MySQL 是否未正确调整?也许有人在反复攻击服务器(我怎么知道?)。我安装了,htop但即使我看到 Apache 或 MySQL 正在消耗大量资源,我该如何找出原因?

任何正确的指导都将不胜感激。我不知所措,我必须保持这个服务器稳定。

附注:服务器已运行 30 天,所以这可能是某种缓慢泄漏。现在我已重新启动,平均负载为 0.45 1.10 0.88,RAM 为 165/512MB,交换为 68/512MB。

更新:仍然有问题。我截取了下面的屏幕截图htop

在此处输入图片描述

答案1

恭喜,您已经使用了几乎所有的交换空间。

这里第一个明显的问题是你对交换的深入研究。这可能是导致系统如此严重崩溃的原因(在系统中花费了大量时间,I/O 等待和软件中断)。

首先要做的是减少正在运行的 Apache 进程数。对于小型网站,您不需要那么多进程,这只会让你陷入交换并降低性能……这已经发生了。我建议您从非常小的进程开始,并在必要时增加进程数。例如:

StartServers            1
MinSpareServers         1
MaxSpareServers         2
MaxClients              5

这会限制您只能同时处理 5 个请求(其他所有人都必须排队等待)。如果此时您收到 Apache 发出的服务器不足警告,并且您仍有剩余的 RAM,那么您可以增加它们,但最终您将遇到 VPS 根本没有足够的 RAM 来处理所有流量的情况。此时您应该升级 VPS。

答案2

首先,根据您发布的htop带有输出的屏幕截图,似乎您在运行 WordPress 的网站上有 512MB 的 RAM?我从未见过 WordPress 在 RAM 少于 1GB 的服务器上运行良好。如果您正在运行测试或开发网站,512MB 可能就足够了,但对于生产网站,您需要 1GB 的 RAM。这就是您的问题的根源。话虽如此,以下是一些帮助您从现有设置中获得更好性能的想法:

我不知道如何弄清楚发生了什么。Apache 或 MySQL 是否未正确调整?也许有人正在通过重复攻击来攻击服务器(我怎么知道?)。我安装了 htop,但即使我看到 Apache 或 MySQL 正在消耗大量资源,我该如何找出原因?

首先,我不会对攻击的发生感到恐慌。事实是,您的服务器可能只是承担了大量合法流量,但服务器本身并未针对您的使用进行配置/调整。当然,糟糕的配置可能会在 DDoS(分布式拒绝服务)攻击期间让您坐立难安,但当正常流量突然大量出现时,这一切都会让您的生活变得糟糕透顶。

我已经发布一份不错的清单,您可以查看这些项目来提高 LAMO 堆栈的性能关于另一个类似问题,将在此重新发布供您参考:

  1. 正确配置Apache:Apache 是一款优秀的软件,但开箱即用,占用大量内存。例如,我认为默认设置是允许每秒 255 个连接?我可以向您保证,大多数简单网站在好日子里每秒也只能获得 40 个连接。因此,调整 Apache 以适应您的流量会有所帮助。此外,KeepAliveApache 中有一个设置效果很好!但开箱即用,我认为它设置为MaxKeepAliveRequests100,这相当疯狂。我通常将其设置为大约 30 个连接,耗时KeepAliveTimeout2 到 3 秒。关键是要让KeepAliveTimeout速度与平均页面下载所需的速度相匹配,并留出一点开销/缓慢空间。因此,如果页面加载时间为 1 秒,则将加载时间KeepAliveTimeout为 2 秒。
  2. 检查 WordPress 网站的代码是否存在潜在瓶颈:专注于 PHP 核心并尽可能地清理。注意过多的 MySQL 调用和文件系统调用。这是您能够让应用程序飞起来的地方!此外,检查memory_limit您的应用程序php.ini并确保它不超过必要的大小。默认值为 64M,但在许多情况下可以降低到 32M。
  3. MySQL 调整或将其移动到它自己的服务器上:在写完上面关于 MySQL 的内容后,我意识到你可能在同一个机器上托管了你的 MySQL 实例。通过运行类似这样的脚本来优化 MySQL 性能MySQL 调优入门。如果不进行调整,MySQL 将耗尽所有资源并导致系统崩溃。通过调整,MySQL 将运行得更好/更快,并且可以释放资源用于其他目的。此外,请考虑将 MySQL DB 移动到独立服务器。您可能必须学习如何正确联网和防火墙服务器以允许您的服务器访问但防止黑客入侵,但性能优势将非常显著。

关于 MySQL 调优,一开始可能需要几周时间才能确定。原因是调优脚本基于 MySQL 看到的实际流量。因此,您基本上是让您的网站上线,等待 2 天(至少),运行调优脚本,然后再等几天进行更多调优。大约一周后,您应该能够调优 MySQL,使其与您的设置尽可能好地配合使用。

答案3

首先安装这些插件:super cache(htaccess 模式)、wpbase、widget cache。众所周知,Wordpress 存在这些问题。如果这没有帮助,则可能是您的某个主题存在内存泄漏(尤其是在启用了移动视图的情况下)。

发布您的访问和错误日​​志。

我强烈建议使用 nginx 而不是 apache。

相关内容