我最近开始遇到我的 Apache 崩溃并且无法重新启动的问题。然后托管公司告诉我这与“信号量”有关,并向我发送了他们解决问题的截图:
/usr/bin/ipcrm sem $(/usr/bin/ipcs -s | grep www-data | awk '{print$2}')
Run Code Online (Sandbox Code Playgroud)
现在有一个命令可以解决我的问题,这很好,但是我又不知道这是怎么回事。
什么是信号量,谁把它们放在哪里,它们在哪里以及它们如何使我的 apache 崩溃?
我真的很高兴有一些一般性的解释!
正如其他人所说,信号量是 IPC(进程间通信结构)。像所有 IPC 一样,信号量用于允许不同的进程相互通信。
它们基本上是使用特殊系统调用创建、访问和销毁的计数器,例如 sempost(3)、semwait(3)、semget(2) 和 semop(2)。有关简要说明,请参阅 linux 系统上的 sem_overview(7)。
此处交流的定义非常原始。信号量的“通信”意味着通过上述系统/库调用读取、增加或减少计数器。
信号量的特殊之处在于它们一次只有一个进程可以对它们执行操作,并且信号量操作保证原子性,也就是说你不能进入竞争条件信号量作为内核不会换出正在执行信号量操作的进程。
另一件特别的事情是它们是在共享内存中创建的,这允许多个进程访问它们。
它们的显化/创建方式是程序使用 semget(2) 创建它们。例如,apache 在运行时会创建信号量。
ipcs -l 会告诉你系统的 ipc 资源。
您可以使用 sysctls 操作一些系统信号量和与 ipc 相关的限制。尝试 sysctl kernel.sem
通过 sysctl 查看信号量相关设置。如果您想保留任何 sysctl 更改,请尝试将它们放入/etc/sysctl.conf
.
归档时间: |
|
查看次数: |
14393 次 |
最近记录: |