Apache-2.2

APC PHP 記憶體大小不超過 32MB,即使設置允許更多

  • August 1, 2014

我在 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

引用自:https://serverfault.com/questions/320682