我遇到了 mod_python 和 Apache 的问题,我很确定我知道问题出在哪里,但我想要一点保证。我目前有一种情况,我正在使用一个只有 256M RAM的非常小的 VM。现在 MySQL 和 Apache 运行得相当好,一切都很好而且花花公子,直到我开始使用交换,我显然想尽可能避免。有了这么小的内存,这几乎是不可能的。我选择每天几次重新启动 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 有问题?谢谢!
在我的笔记本电脑上反复重新启动 Apache 时,我遇到了类似的问题(对我来说,它需要大约 40 次重新启动);我找到的唯一解决方案是完全重新启动计算机。当然,我的笔记本电脑有 2GB 的 RAM 和比您的服务器多得多的磁盘空间,所以您可能会更快地遇到这个问题......基本上,我会避免在不完全重新启动服务器的情况下多次重新启动 Apache。
删除不再使用的泄漏信号量
增加可用信号量
谷歌搜索,我找到了这个解决方案:
顺便提一句。
mod_python
自从引入 WSGI 以来,它有点过时了。大多数现代应用程序都可以使用mod_wsgi
.我假设这是在 linux 系统上完成的。
我只是想知道您是否会看到一些共享内存问题以及信号量?当 apache 被 kill -9 杀死时,我遇到过这种情况。
发生这种情况时,您是否使用以下命令检查了共享内存区域的状态: ipcs -a 这将显示当前使用的信号量、消息队列和共享内存。这可能会为您提供有关该问题的更多信息。
如果您想使用 ipcrm 命令删除旧的信号量或共享内存区域,您实际上可以(请参阅手册页了解您需要的特定选项)。
我现在不记得了,但我记得在 Linux 中修改信号量和共享内存参数相对容易。
好吧,只是对您的问题的一些想法。希望能帮助到你。