服务器内存不足 – 如何查找原因?

我的网站几乎每天都要停下来一个小时。 我的主机说它已经用完了RAM。 我对服务器的了解不多,所以对于下一步该怎么做会有所build议。

该网站(3dsbuzz.com)有一个WordPress的部分,维基,画廊和VBulletin论坛,每个都有自己的自定义代码和插件。 所以有很多潜在的地方可能被低效地编码。 它从具有2GB内存的云服务器运行。 MySQL数据库是370MB。 我们每天获得约30,000个网页浏览量。

减less停机时间的最佳方法是什么? 我应该升级我的服务器(我真的不能承受)或2GB合理? 我的错误日志中有很多错误,但是它们并不总是在服务器closures的同一时间发生,所以我不确定它有多相关。

2GB的RAM看起来不错。

一些线索检查:

  • 数据库

    • configurationmysql以获得slowlog – find瓶颈。
    • 检查mysql引擎。
      • 如果存在MyISAM,则可能是由于整个表锁与写入有关的问题(例如VBulletin可能导致很多写入)。
      • 如果这是个问题 – 将每个不使用FULLTEXT索引(或者至less经常改变的表)的表转换成InnoDb (或者MariaDB或者Percona的更好的XtraDB)
  • Web serwer

    • 最大的问题可能是Apache与mod_php。 (特别是如果因为mysql最高时间请求开始持续更长时间)。
      • 如果你有这个:
        • 最好切换到nginx。
        • 如果你不能 – 使用fcgi php(最好是php5-fpm )。

并考虑聘请专业人士审计情况和帮助configuration。

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

  • Apache(或您的Web服务器应用程序)的设置不正确,在某些情况下可能会消耗大量的内存。 例如,Apache中的一个常见原因是将MaxClients设置得太高,这将导致在有足够的并发用户的情况下耗尽所有的RAM /内存。
  • MySQL设置为“内存饥饿”,这为您的Web服务器,caching或其他应用程序留下less量内存。
  • 你正在运行的其他应用程序正在使用太多的RAM。 这可能是一个程序/扩展中的内存泄漏,或者只是configuration为使用太多内存的行为不当的程序。

你可以做的事情来检查和确认是什么导致问题(所有这一切都假设命令行访问服务器):

  • 使用top查看所有程序的内存使用情况(我相信用'M'sorting)。 这应该给你一个很好的开始什么程序正在使用内存。 在“好”时间检查,以更好地比较“坏”。
  • 使用free -mvmstat检查交换使用情况。 理想情况下,您希望交换使用率(接近)为零,并且通常情况下,您不希望Apache / MySQL必须使用交换内存,因为这会导致您的服务器性能下降(也可能是您的站点中断的原因)。

没有更多的细节问题和你的设置没有什么可说的。

没有提到OS。 如果您使用的是Windows,那么最好使用一个专用的池,您可以使用这个池来限制使用多lessCPU百分比。

如果你想检查是什么导致这个问题去“事件查看器”,并检查日志find你的错误。