我的网络服务器真的很难用。我按照网上的建议做了一些调整,但还是没有找到任何具体的方法。
当我执行 htop 时,我的 Apache 进程在虚拟内存栏下占用了 450MB 内存。我在网上搜索了一下,有人说安装 eaccelerator 后系统会变得更快、更高效,占用的内存和 CPU 也会更少。不幸的是,结果比以前更糟。现在我的 Apache 进程在虚拟内存栏下显示 1488MB 内存。
虽然每个进程都显示 1488MB 内存,但我可以看到总 RAM 消耗只有 7GB,而且其中 4GB 被 Varnish Cache 占用(我将其用作反向代理)。
我不确定是否应该担心虚拟内存列。
安装 eaccelerator 后,我的服务器没有因为消耗了 18GB 的 RAM 和 2GB 的 SWAP 空间而宕机。以前也发生过这种情况。但再说一次,我安装 eaccelerator 才 1 天,所以问题可能在一两天后就会出现。
请不要建议我使用APC...它没有安装在我的服务器上。
我查看了服务器的 phpinfo 页面,发现 Eaccelerator 正在缓存脚本。到目前为止,它已经占用了大约 80MB 内存(我分配了 1GB),并且缓存了大约 900 个脚本。
到目前为止,我的预分叉设置是 -
启动服务器数 8
最小备用服务器数 5
最大备用服务器数 20
服务器限制数 256
最大客户端数 256
每个子节点的最大请求数 100
请参阅以下 htop 的屏幕截图。
仅供参考 - 这是一台专用服务器,有 8 核 CPU。
在我的服务器启动并运行之前,我的网站性能非常好。第一次加载大约需要 8 秒,第二次加载需要 2.5 秒。由于它是一个电子商务网站,因此该网站的图片很多。
答案1
Unix 系统如何使用内存是一个非常漫长而复杂的故事。将每个进程的虚拟大小相加并不能准确反映正在发生的事情。更好的方法是跟踪 httpd 进程的数量和“free”报告的可用内存(减去缓冲区/缓存)。然后将它们绘制在图表上,以获得更现实的测量结果。
虽然就您而言,由于运行清漆会使情况变得有些复杂,但它仍然可以很好地表明需求如何影响内存。
您没有提供任何有关如何配置 KeepAlives 的信息,这对内存使用和性能有很大影响。您也没有提供任何有关服务器上活动模式的信息 - 整个周期中 httpd 进程的数量如何变化?如果不知道这一点,就无法评论您提供的配置详细信息是否合适。但是,除非您怀疑代码存在重大问题,否则您的 MaxRequestsPerChild 非常低。
此外,如果不了解内容类型的相对容量,就很难说什么会有帮助 - 例如,如果您提供大量静态 CSS、JS 和 HTML,那么使用压缩会给您带来很多好处。
8 核 18Gb?Big Iron 是构建可扩展 Web 服务器架构的错误方式。
我的网站性能非常好。第一次加载大约需要 8 秒,第二次加载需要 2.5 秒
我认为我们对“优秀”一词的理解不同
虽然我怀疑这里需要进行大量的调整和重构(特别是根据您在问题中未提供的所有信息来判断),但最终您只需要添加更多硬件。与此同时,您可能需要寻求一些帮助。
答案2
如果你想减少内存使用量,你真的不应该使用预分叉但使用工人线程。顾名思义,预分叉实际上每次都会启动一个新进程,有自己的内存空间和其他东西。
因此,请将你的 Apache 改为使用工人mpm。这应该会有所帮助。
也就是说,如果你有 18GB 的 RAM,那么用 7GB 运行 Apache 有什么问题?你还能剩下很多内存来做其他事情。
也许您可以进一步解释一下您想要实现的目标。
答案3
虚拟内存就是它的名字。查看RES
实际内存使用情况的列。
详情请参阅man top
,特别是DESCRIPTIONS of Fields
部分。