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

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

我有 2 个 LAMP 网络服务器经常耗尽交换空间(参见附件顶部的屏幕截图)。

Apache的设置如下:

<IfModule prefork.c>
启动服务器 64
最小备用服务器 64
最大备用服务器数 128
服务器限制 256
最大客户数 256
每个子项的最大请求数 4096
</IfModule>

PHP 的资源限制如下:

最大执行时间 = 30
最大输入时间 = 30
内存限制 = 80M

我对这类服务器管理工​​作还不熟悉(我是一名开发人员);我可以进行哪些调整以防止交换?

以下是某个服务器崩溃时的 top 截图:截屏

答案1

由于您使用了全部 RAM 甚至更多,因此您的交换空间即将用尽。您有一个严重的问题需要立即纠正。

您有两种选择:忽略原因并添加更多 RAM,或者针对实际占用内存的问题。

如果是您自己的服务器,添加 RAM 相当便宜且相当容易,但这只是临时解决办法,如果是 VPS 或租用的服务器,则不是那么便宜。让我们尝试解决根本问题。是什么占用了这么多内存?以下是一些提示:

  • 在 MySQL 中关闭 InnoDB(除非你需要它)
  • 使用以下方法击败 Apache(和 MySQL)配置棒 +5
  • 考虑使用较小的 httpd,如 cherokee、lighttpd 或 nginx(它们非常快,几乎不占用 RAM)。主要缺点是您不能使用.htaccess文件,但可以对其功能进行硬编码。
  • 您是否正在使用 PHP 的 OP 代码缓存?请尝试将其关闭或切换到其他更高效的缓存。

就将交换项放回到实际 RAM 中而言,您可以通过以下方式进行:

swapoff -a && swapon -a

但是,当您的可用内存少于交换空间时,请不要尝试。这会导致服务器崩溃。

答案2

要快速更改,请执行以下操作:

将“MaxRequestsPerChild 4096”改为:700 会有所帮助。Apache 进程存活的时间越长,由于 mod_php 等原因,它消耗的驻留内存就越多。此外,启用 keepalive 并为其设置积极的超时设置:

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5

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

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

放弃 mod_php,改用 fastcgi 或其他应用服务器。当 php 页面由 fastcgi 提供时,Apache 进程消耗的内存量微不足道。更不用说 fastcgi 可以保持与您的数据库服务器的持久连接等。

答案3

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

相关内容