我非常需要帮助,想出如何解决我遇到的这个问题。 我运行一个相当关键的Web服务器(Debian 7.5,512MB内存,512MB交换,Apache,MySQL)。 它运行了几个WordPress网站。 今天,我发现这些网站的响应速度非常缓慢,并且发现平均负载正好在10.0以上,内存使用率达到了100%,交换接近了512MB的限制。
我不知道如何弄清楚发生了什么事情。 Apache或MySQL没有正确调整? 也许有人攻击服务器重复点击(我怎么知道?)。 我安装了htop
但即使我看到Apache或MySQL耗尽了大量的资源,我怎么知道为什么呢?
任何正确的方向将得到大力赞赏。 我在这里亏本,我必须保持这台服务器的稳定。
附注:服务器已经运行了30天,所以这可能是某种缓慢的泄漏。 现在我已经重新启动,平均负载为0.45 1.10 0.88,RAM为165 / 512MB,交换为68 / 512MB。
更新:仍然有问题。 我捕获了下面的htop
截图。
恭喜,您已经设法使用几乎所有的交换空间。
这里第一个显而易见的问题是你深入交换。 这可能是导致系统崩溃的原因(在系统中花费了大量的时间,I / O等待和软件中断)。
首先要做的是减less正在运行的Apache进程的数量。 你不需要那么多的小网站,这只会让你深入交换和杀死你的performance…这是已经发生的事情。 我会build议你开始非常小,并在必要时增加。 一个例子:
StartServers 1 MinSpareServers 1 MaxSpareServers 2 MaxClients 5
这限制了您只能提供5个同时请求(其他人必须排队等待)。 如果在这一点上,你会收到Apache发出的关于服务器用完的警告,并且你还有内存空间,那么你可以增加它们,但是你最终会跑到你的VPS根本没有足够的内存处理所有的stream量。 此时你应该升级VPS。
基于你用htop
输出发布的截图之前,似乎你在运行WordPress的站点上有512MB的RAM? 我从来没有见过WordPress的服务器less于1GB的内存。 也许如果你正在运行testing或开发网站,512MB是足够的,但对于生产站点,你需要1GB的RAM。 这是你的问题的根源。 这就是说,以下是一些想法,可以帮助您从设置中获得更好的性能:
我不知道如何弄清楚发生了什么事情。 Apache或MySQL没有正确调整? 也许有人攻击服务器重复点击(我怎么知道?)。 我安装了htop,但即使我看到Apache或MySQL耗尽了大量的资源,我怎么知道为什么呢?
首先,我不会惊恐发生袭击事件。 实际情况是,您的服务器可能只是承担了大量的合法stream量,但是服务器本身并未针对您的使用进行configuration/调整。 当然,不好的configuration可以让你在DDoS(分布式拒绝服务)攻击过程中坐下来,但是当好的/正常的stream量突然出现在大数量的时候,它们都会使你的生活变得悲惨。
我发布了一个很好的列表项目,您可以查看以提高您的LAMO堆栈在另一个类似的问题上的performance ,并将在此处转发以供您参考:
KeepAlive
设置,效果很好! 但是,我认为这是MaxKeepAliveRequests
设置为100,这相当困难。 我通常把它设置为大约30个连接,一个2到3秒的小KeepAliveTimeout
。 关键是让KeepAliveTimeout
匹配平均页面下载所需的速度和一点点的开销/缓慢空间。 所以如果一个页面在1秒钟内加载,请保持2秒的KeepAliveTimeout
。 php.ini
的memory_limit
,并确保它不高于必要的。 默认是64M,但在很多情况下可以降到32M。 关于MySQL的调整,这可能需要几个星期才能确定。 调整脚本的原因是基于MySQL看到的真实stream量。 所以,你基本上让你的网站生活在世界上,等待2天(至less),运行调整脚本,然后等待几天再调整一些。 一个星期左右之后,你应该能够调整MySQL的工作,以及它可以与你的设置。
首先安装这些插件:超级caching(htaccess模式),wpbase,小部件caching。 WordPress的是有这些问题而闻名。 如果这没有帮助,可能是你的一个主题(特别是如果启用移动视图)的内存泄漏。
发布您的访问和错误日志。
我强烈build议使用nginx而不是apache。