APC PHP 記憶體大小不超過 32MB,即使設置允許更多
我在 CentOS 6.0 64 位的高流量 WordPress 安裝上設置 APC (v 3.1.9)。
我已經發現了 APC 的許多怪癖,但有些地方仍然不太對勁。無論我更改什麼設置,APC 都不會實際記憶體超過 32MB。我正在嘗試將其增加到 256 MB。32MB 是 apc.shm_size 的預設值,所以我想知道它是否以某種方式卡在那裡。
我已經執行了以下
echo '2147483648' > /proc/sys/kernel/shmmax
將我係統的共享記憶體增加到 2G(我的 4G 盒子的一半)。然後跑了
ipcs -lm
返回
------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 2097152 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1
也做出了改變
/etc/sysctl.conf
然後跑
sysctl -p
使設置粘貼在伺服器上。也重新啟動了,這是一個很好的衡量標準。
在我的 APC 設置中,我啟用了 mmap(在最新版本的 APC 中預設發生)。php.ini 看起來像:
apc.stat=0 apc.shm_size="256M" apc.max_file_size="10M" apc.mmap_file_mask="/tmp/apc.XXXXXX" apc.ttl="7200"
我知道 mmap 模式將忽略對 apc.shm_segments 的引用,因此我將其保留為預設值 1。
phpinfo() 表示關於 APC 的以下內容:
Version 3.1.9 APC Debugging Disabled MMAP Support Enabled MMAP File Mask /tmp/apc.bPS7rB Locking type pthread mutex Locks Serialization Support php Revision $Revision: 308812 $ Build Date Oct 11 2011 22:55:02 Directive Local Value apc.cache_by_default On apc.canonicalize O apc.coredump_unmap Off apc.enable_cli Off apc.enabled On On apc.file_md5 Off apc.file_update_protection 2 apc.filters no value apc.gc_ttl 3600 apc.include_once_override Off apc.lazy_classes Off apc.lazy_functions Off apc.max_file_size 10M apc.mmap_file_mask /tmp/apc.bPS7rB apc.num_files_hint 1000 apc.preload_path no value apc.report_autofilter Off apc.rfc1867 Off apc.rfc1867_freq 0 apc.rfc1867_name APC_UPLOAD_PROGRESS apc.rfc1867_prefix upload_ apc.rfc1867_ttl 3600 apc.serializer default apc.shm_segments 1 apc.shm_size 256M apc.slam_defense On apc.stat Off apc.stat_ctime Off apc.ttl 7200 apc.use_request_time On apc.user_entries_hint 4096 apc.user_ttl 0 apc.write_lock On
apc.php 顯示以下圖表,無論伺服器執行多長時間(記憶體大小波動並徘徊在 32MB 以下。
見圖片 http://i.stack.imgur.com/2bwMa.png
您可以看到記憶體正在嘗試分配 256MB,但餡餅的棕色部分一直在 32MB 被回收。這被確認為刷新 apc.php 頁面顯示了上下移動的記憶體文件計數(暗示記憶體未保存其所有文件)。
有誰知道如何讓 APC 使用超過 32 MB 的記憶體大小?
**請注意,eaccelerator、xcache 和 APC 的行為相同。我在這裡讀到:
http://www.litespeedtech.com/support/forum/archive/index.php/t-5072.html
suEXEC 可能會導致此問題。
這可能是一個非首發,但你有沒有用除了那個 wordpress 實例之外的任何東西測試過這個?您真的只有 ~32MB 的可記憶體內容嗎?
您的實際問題是頻繁重啟 Apache,這會阻止 APC 建構記憶體。我不評論 wordpress 的記憶體大小。你在用cPanel嗎?它有一個日誌輪換功能,在日誌輪換之前重啟 Apache,雖然是優雅重啟但會清除所有 APC 記憶體。您可以增加日誌輪換門檻值或查看它為何如此快地達到限制。也許您可以在 Apache 配置下啟用管道日誌(在 cPanel 中)。
此連結將告訴您如何做到這兩點。
http://forums.cpanel.net/f5/cpanel-11-25-log-processing-145417.html