mod_python 与 Apache 故障

mod_python 与 Apache 故障

我在使用 mod_python 和 Apache 时遇到了问题,我非常确定我知道问题出在哪里,但我希望得到一些安慰。我目前遇到的情况是,我正在使用非常小型虚拟机,只有 256M RAM。现在 MySQL 和 Apache 运行得相当好,一切都很好,直到我开始使用 swap,这显然是我想尽可能避免的。但是,由于 RAM 太少,这几乎是不可能的。我选择每天几次 cron up 重新启动 MySQL 和 Apache,但是,大约 4-5 天后,我收到设备上没有剩余磁盘空间的消息:

[Mon May 11 06:00:14 2009] [notice] caught SIGTERM, shutting down
[Mon May 11 06:00:20 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon May 11 06:00:20 2009] [notice] Digest: generating secret for digest authentication ...
[Mon May 11 06:00:20 2009] [notice] Digest: done
[Mon May 11 06:00:21 2009] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads.
[Mon May 11 06:00:21 2009] [error] (28)No space left on device: mod_python: Failed to create global mutex 1 of 4 (/tmp/mpmtx265021).

我最初的想法是缺少信号量,但事实似乎并非如此。至少我过去用来规避这个问题的技巧到目前为止还没有奏效。我看到使用 mod_python 的人也遇到过类似的问题,但我没有找到太多实际的解决方法。是我的重启导致了这个问题,还是 mod_python 有问题?谢谢!

答案1

我在笔记本电脑上反复重启 Apache 时也遇到过类似的问题(我大概重启了 40 次);我发现的唯一解决方案是完全重启计算机。当然,我的笔记本电脑有 2GB 的 RAM 和比您的服务器多得多的磁盘空间,所以您可能会更快地遇到这个问题……基本上,我会避免在没有完全重启服务器的情况下多次重启 Apache。

答案2

  1. 删除不再使用的泄漏信号量

    ipcs -s | perl -ane '/^0x00000000/ && `ipcrm -s $F[1]`'
    
  2. 增加可用的信号量

    echo “kernel.sem = 512 32000 100 512″ >> /etc/sysctl.conf; sysctl -p
    

答案3

通过谷歌搜索,我发现找到了这个解决方案

您实际上需要增加系统上的 SysV 信号量的数量。

我使用(在 /etc/sysctl.conf 中):(
kernel.sem = 512 32000 100 512
通过运行 sysctl -p 设置此文件中的选项)。

顺便说一句。mod_python自从引入 WSGI 以来,它有点过时了。大多数现代应用程序都可以使用mod_wsgi

答案4

我假设这是在 Linux 系统上完成的。

我只是想知道您是否可能看到一些共享内存问题以及信号量问题?当通过 kill -9 杀死 Apache 时,我遇到过这种情况。

发生这种情况时,您是否使用以下命令检查了共享内存区域的状态:ipcs-a 这将显示信号量、消息队列和共享内存的当前使用情况。这可能会为您提供有关问题的更多信息。

实际上,如果您想删除旧的信号量或共享内存区域,您可以使用 ipcrm 命令(请参阅手册页以了解您需要的特定选项)。

我现在记不清了,但我记得在 Linux 中修改信号量和共享内存参数相对容易。

好吧,这只是对你的问题的一些想法。希望对你有帮助。

相关内容