Linux noob在这里。 我在Ubuntu 11.04服务器上有256MB的VPS,当我运行“free -m”时,结果显示所有正在使用的内存(包括第二行的re:buffers / cache)。 我发现这很奇怪,考虑到我只有5个Apache进程每个运行每个咀嚼大约20MB。 MYSQL占用30MB。 据我所知,根据“顶”,我没有其他记忆猪经营。
可能相关的设置:
PHP memory_limit = 32M MYSQL key_buffer = 16M Prefork MPM Maxclients = 10
所以当我回顾这些设置时,我自然而然地认为maxclients太高,所以我尝试将其切换到5.现在,不仅我的内存仍然显示为100%使用,我的网站加载很多很慢,尽pipe没有得到任何stream量现在除了我的。 我不明白这一点。 我认为一个Apache进程处理来自在“KeepAliveTimeout”窗口中收到的客户端的所有请求,我已经设置为2秒。 用我的初始configuration。 10个maxclients,我的页面加载时间是0.3ms左右,所以一个进程应该处理没有问题,是正确的?
所以接下来我去了maxclients的极端1。 我的记忆仍然是100%的使用,我的网站加载缓慢。 我是一个彻底的损失在这里的菜鸟。 根据我在基本的服务器设置上阅读的许多教程,我应该很好去。
帮帮我! 请!
Edit: total used free shared buffers cached Mem: 256 256 0 0 0 0 -/+ buffers/cache: 256 0 Swap: 0 0 0
这是因为Linux将大部分内存用作caching,并根据需要将其中的部分内容返回给您运行的任何应用程序。
所以不要恐慌。 你没事。 将MaxClients更改回默认值。
编辑:它看起来像你在OpenVZ上运行。 请参阅下面的David Schwartz回应。
你没有交换,这使得操作系统很难节省物理内存。 基本上,它没有地方放置可能永远不会被访问的数据,但它不能被certificate永远不会被访问。 所以它别无select,只能把它放在RAM中。
例如,考虑一下在服务器启动时启动但从未访问过的服务。 它可能链接到一个被重定位的库。 这种重新定位脏码在内存中的代码页。 在启动时,它可能会分配一些内存并修改其内容。 使用交换,服务长时间不运行或内存不足时,可以将这些页面从内存中逐出并存储在交换中。 (很可能永远不会被检索,但是内核不能冒这个风险 – 考虑一下像ssh这样的服务!)
没有交换,内核无法驱逐脏页,即使它们没有被访问过几天。 如此珍贵的物理记忆充斥着无用的垃圾。
更新 :显然,这是OpenVZ的神器。 有交换,你看到的内存号码是没有意义的。 您的性能问题可能会或可能不是由您控制的任何事情造成的。