今天一大早有一个日志轮换,apache错误日志的最后一行是:
[error] (9)Bad file descriptor: apr_socket_accept: (client socket) apache2: Syntax error on line 250 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/alias.load: Cannot load /usr/lib/apache2/modules/mod_alias.so into server: /usr/lib/apache2/modules/mod_alias.so: failed to map segment from shared object: Cannot allocate memory
在此之后 Apache 无法自动重新加载。大约一个小时后,当我开始查看这个时,我只是重新启动了 apache,一切都很好。它确实在新的日志文件中留下了警告:
[warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
这是什么意思,我该如何纠正曾经出错的地方?
(Apache/2.2.22 (Debian))
编辑 或者如果这不是可以修复的东西,有没有办法让apache在放弃之前自动重新加载x qty(比如带有节点的pm2)?
无法分配共享内存是一种特殊的野兽。这并不意味着整个系统内存不足,而是您已经达到了管理共享内存分配的限制之一。
两个相关的 sysctl 是
kernel.shmmax
(这是单个共享内存段可以有多大的限制,以字节为单位)和kernel.shmall
(这是可以分配给系统的共享内存的总量,以字节为单位)。用于grep Shmem /proc/meminfo; cat /proc/sys/kernel/shmall
可视化这些金额。你可以通过对比的线来判断是否
shmall
被击中。如果它们大致相等,那么您已经达到系统范围的共享内存限制,并且需要增加(或停止使用共享内存的东西)。否则,您可能需要增加到比失败的进程想要使用的更大的值。Shmem
/proc/meminfo
/proc/sys/kernel/shmall
kernel.shmall
kernel.shmmax