我在 openvz 容器上运行 64 位 Ubuntu 10.04LTS,并从源代码编译了 Cherokee 1.0.8。即使在从“高级”->“I/O 缓存”->“未启用”禁用 I/O 缓存后,cherokee-worker 的虚拟内存使用量仍然约为 430 MB。
这是 openvz 独有的问题吗?因为很多人报告说通过禁用 io 缓存成功减少了 virt 内存使用量。
htop 输出: https://i.stack.imgur.com/akLcf.jpg (新手禁止发图片。)
提前致谢。
尼德希什达斯
答案1
其中至少有一部分是堆栈分配 (RLIMIT_STACK),分配给 cherokee 的每个线程... 而 cherokee 会产生很多线程。这些内存实际上并未使用,仍然可用,因此通常无关紧要,但使用 OpenVZ 时,它们将计入您的配额,因此您需要在 OpenVZ VPS 上将其保持在较低水平。我甚至无法在我的 256MB VPS 上以默认配置启动 cherokee,因为 OpenVZ 认为它在启动时使用的可用内存超过了 210MB。
您可以在 Web 配置中的 Advanced->Resources 下减少 cherokee 使用的线程数(如果您直接编辑 cherokee.conf,则设置为“server!thread_number = XX”),或者您可以在运行 cherokee 之前使用“ulimit -s SIZE_IN_KB”更改堆栈大小(您可以在使用“ulimit -s”更改之前查看默认值 - 我的 VPS 默认为 10240,每线程 10MB)。请记住,您需要在运行 cherokee 之前设置 ulimit,并且它不是系统范围的。因此,要么在从同一 shell 启动 cherokee 之前在 shell 中执行此操作,要么编辑启动脚本以在启动 cherokee 之前运行“ulimit -s XX”。
让 VPS(尤其是低端 VPS)正常运行的一个很好的资源是 LowEndBox。他们有一篇博客文章介绍如何“减少多线程应用程序的堆栈限制“。
答案2
内存被 php5-fpm 进程占用,而不是 cherokee。您正在运行胖 php 应用程序吗?