Web服务器上的交换空间不足,该怎么办?

我有2个LAMP Web服务器,通常用掉交换空间(请参阅附上的截图)。

Apache的设置如下:

 <IfModule prefork.c>
 StartServers 64
 MinSpareServers 64
 MaxSpareServers 128
 ServerLimit 256
 MaxClients 256
 MaxRequestsPerChild 4096
 </ IfModule>configuration

PHP的资源限制是:

 max_execution_time = 30
 max_input_time = 30
 memory_limit = 80M

我是新来的服务器pipe理员这样的东西(我是一个开发人员); 我可以调整什么以防止交换?

以下是其中一台服务器崩溃时的屏幕截图: 截图

你正在使用所有的RAM,然后是一些。 你有一个严重的问题,你现在需要纠正。

你有两个select:忽略原因,只是增加更多的内存,或针对内存中真正咀嚼的问题。

添加内存是相当便宜,相当容易,如果它是你的服务器,但这是一个临时修复,如果它是一个VPS或租用服务器,它并不便宜。 让我们来解决根本问题。 什么吸那么多的记忆? 这里有一些提示:

  • 在MySQL中closuresInnoDB(除非你需要)
  • 用configuration棒+5击败Apache(和MySQL)
  • 考虑像切诺基,lighttpd或Nginx(他们真的很快,吃几乎没有内存)更小的httpd。 主要的缺点是你不能使用.htaccess文件,但你可以在他们的function硬编码。
  • 您是否使用PHP的OP代码caching? 尝试closures或切换到另一个更有效的。

就把交换项目换回真正的RAM而言,可以通过以下方式来实现:

 swapoff -a && swapon -a 

但是当你的内存不足的时候,不要试着去尝试一下, 它会崩溃你的服务器。

要做一个快速的改变,

“MaxRequestsPerChild 4096”类似于:700将有所帮助。 由于mod_php之类的原因,apache进程生存的时间越长,它将消耗的内存越多。 另外,启用Keepalive并为其设置攻击超时设置:

 KeepAlive On MaxKeepAliveRequests 200 KeepAliveTimeout 5 

这将允许每个客户端页面请求使用一个Apache进程处理所有的请求,否则它会使用多个Apache进程。 这将减less在任何给定时间运行的Apache进程的数量。

为了获得最佳的内存和每秒请求数:

移开mod_php,改用fastcgi或其他应用程序服务器。 当fastcgi提供php页面时,Apache进程消耗的内存可以忽略不计。 更不用说fastcgi可以保持持久连接到您的dbase服务器等等。

如何将静态内容的服务转移到更适合的服务器 ?