我的小型 ec2 实例有 1.7 GB 内存,运行基于 CentOS 的 Amazon AMI,Apache 占用的内存过多,这是一个问题。如果您查看屏幕截图,内存使用率将保持在 90-100%,直到我重新启动 httpd 服务,然后它将重新启动,并重新增加到 90% 以上。
我将非常感激您能帮助我找到问题所在。这可能是“正常”的 Apache 行为,利用所有可用内存?还是存在需要我查找的泄漏。目前,我有点困惑,不知道到底发生了什么。
我们正在使用 Apache MPM prefork,没有 sql 或类似的东西 - 只有 apache。该网站是这里。
答案1
正如 HTTP500 所说,除非机器真的堵塞了,否则你不应该担心这个问题。看看救命!Linux 占用了我的内存!。这不是一个非常类似的情况,因为进程而不是缓冲区占用了 RAM,但差别并不大:机器的物理 RAM 是一种资源,可以使用内核缓冲区或备用 Apache 工作进程来及时处理传入的请求。如果您不使用 RAM,那么您就为机器的大小付出了过高的代价。
无论如何,如果你想使用 MPM 设置,Apache 文档是http://httpd.apache.org/docs/current/mod/prefork.html
也许您可以减少 MinSpareServers、StartServers 等,因为您已经声明该网站流量较低。这样,您将有更多的可用 RAM 可供内核缓冲区用于其恶意目的。
答案2
Linux 使用所有内存是正常的,未使用的内存将被重新用作磁盘缓存。请参阅:Linux 占用了我的内存
您可以通过查看输出来验证这一点free -m
,并期望看到如下内容:
total used free shared buffers cached
Mem: 7889 6887 101 0 106 2307
-/+ buffers/cache: 5373 3416
Swap: 1903 17 1886
+/- buffers/cache 行是您想要的。它将缓存的 RAM 添加到空闲内存中,以便让您更好地了解实际可用的内存量。在这种情况下,您需要注意 3416 这个数字,而不是 101。