我在 Fedora 上运行,apache
使用mod_perl
.服务器分叉一个进程来频繁发送电子邮件 - 然后分叉退出。
突然,我得到了:Cannot fork: Cannot allocate memory
。有足够的可用内存(我没有仔细观察,但可用内存比使用的内存多),apache
运行的进程没有太多 - 10?,CPU 使用率低,接近 0。重新启动服务器 httpd 优雅地解决了问题。
什么会导致这样的事情呢?我是否可能进入某种状态,其中问题是在系统中分配了太多进程 - 并且负载下降后无法恢复?
不幸的是,我没有太多信息,因为我很恐慌并试图启动该站点而不是运行诊断。 :-) 所以我的问题非常笼统:当分配太多进程时,是否有任何不明显的东西会产生这种行为?有什么特定于从 apache 内部 fork 的事情吗? ETC
谢谢你!
答案1
听起来您已达到资源限制。查看 pam_limits.so 和/etc/security/limits.conf
.这些允许管理员对用户可以使用的资源设置明确的限制,以便一个用户不能独占所有系统资源。如果 Apache 达到了由此指定的限制,即使有大量其他用户可以使用的资源,它也会返回如上所述的错误。大多数 shell 中也有limit
orulimit
命令,但我不认为这是问题所在。