Php
apc apc.shm_segments 忽略了 apc.shm_size 在 apache2 中的行為怪異
這是目前的 apc.ini
extension=apc.so apc.enabled=1 apc.ttl=86400 apc.user_ttl=86400 apc.shm_segments=1 apc.shm_size=64
這給了我
1 Segment(s) with 64.0 MBytes (mmap memory, pthread mutex locking)
有趣的是,根據這個只有32M應該是可能的..
cat /proc/sys/kernel/shmmax 33554432
如果我增加段,它只是沒有效果,但如果我將 shm_size 提高到 64 以上(無論段設置如何),它在 apc.php 中可見,我會收到以下錯誤:
[apc-error] apc_mmap: mmap failed: No space left on device
我需要大約 90M 的 opcache,所以根據我的理解,考慮到 shmmax 設置,我會選擇 2x32M 段……
任何人都可以想到為什麼多個段不起作用的原因?知道為什麼 64M 在 shmmax 限制為 32M 的情況下仍在工作嗎?
APC Version 3.0.19 PHP Version 5.2.0-8+etch16
和系統(lenny)…
uname -a Linux vs210044.vserver.de 2.6.9-023stab052.4-smp #1 SMP Tue May 11 19:21:39 MSD 2010 x86_64 GNU/Linux
是的,我知道它已經過時了,還沒有機會升級,它有點複雜……
看起來 APC 的某些版本(在我的例子中是 3.0.14)似乎忽略了 apc.shm_segments 的值並使用 apc.shm_size,而且它接受的值大於每個段的最大允許大小。就像你的情況一樣。當您分配更多時,32M apache 應該掛起,至少在我的情況下是這樣。
為什麼不將 /etc/sysctl.conf 中的 shmmax 大小增加到 90M?它解決了我的問題…
我遇到過同樣的問題。您需要以 64M 的格式定義記憶體,而不僅僅是數值(參見手冊中的預設值):
apc.shm_size=64M