服务器内存耗尽-如何查找原因?

服务器内存耗尽-如何查找原因?

我的网站似乎几乎每天都会宕机长达一小时。我的主机说内存不足。我对服务器不太了解,所以希望得到下一步该怎么做的建议。

该网站 (3dsbuzz.com) 有 Wordpress 版块、Wiki、Gallery 和 VBulletin 论坛,每个版块都有自己的自定义代码和插件。因此,有很多地方可能编码效率低下。它运行在具有 2GB RAM 的云服务器上。MySQL 数据库为 370MB。我们每天的页面浏览量约为 30,000 次。

减少停机时间的最佳方法是什么?我应该升级我的服务器吗(我真的负担不起)还是 2GB 合理?我的错误日志中有很多错误,但它们并不总是在服务器停机的同时发生,所以我不确定它有多大相关性。

答案1

与服务器问题相关的一些潜在内存问题:

  • Apache(或您的 Web 服务器应用程序)设置不正确,在某些情况下可能会占用大量内存。例如,Apache 中一个常见的原因是设置MaxClients过高,这会导致它在并发用户数量足够多时耗尽所有 RAM/内存。
  • MySQL 被设置为“占用大量内存”,这会为您的 Web 服务器、缓存或其他应用程序留下很少的内存。
  • 您正在运行的其他应用程序占用了过多的 RAM。这可能是程序/扩展程序中的内存泄漏,或者只是配置为使用过多内存的行为不当的程序。

您可以采取以下措施来检查并确认问题的原因(所有这些都假设命令行访问服务器):

  • 用于top查看所有程序的内存使用情况(我相信使用“M”排序)。这应该可以让您很好地了解哪些程序正在使用内存。在“好”的时候检查,以便更好地与“坏”的时候进行比较。
  • 使用free -mvmstat检查交换使用情况。理想情况下,您希望交换使用量接近于零,并且通常您永远不希望 Apache/MySQL 使用交换内存,因为这会降低服务器的性能(并且可能是导致站点中断的原因)。

如果没有关于该问题和您的设置的更多细节,就没有什么可说的了。

答案2

2GB RAM 看起来还不错。

需要检查的一些线索:

  • 数据库

    • 配置mysql来获取slowlog--来查找瓶颈。
    • 检查 mysql 引擎。
      • 如果有 MyISAM - 则可能会出现问题,因为整个表都锁定并进行写入(例如 VBulletin 可能导致多次写入)。
      • 如果这是问题所在 - 将每个不使用 FULLTEXT 索引的表(或至少经常更改的表)转换为数据库(或者更好的是 MariaDB 或 Percona 的 XtraDB)
  • 网络服务器

    • 最大的问题可能是带有 mod_php 的 apache。(尤其是如果因为 mysql 它的顶级请求时间开始持续更长时间)。
      • 如果你有这个:
        • 最好切换到 nginx。
        • 如果你不能 - 使用 fcgi php (最好php5-fpm)。

并考虑聘请能够审核情况并帮助配置的专业人员。

答案3

没有提到操作系统。如果您使用带有 IIS 的 Windows,则最好使用专用池,您可以为其设置限制,例如要使用多少 CPU 百分比。

如果您想检查导致此问题的原因,请转到“事件查看器”并检查日志以查找错误。

相关内容