APC 文件記憶體不起作用,但使用者記憶體很好
我剛剛獲得了一個 VPS(帶有 cPanel/WHM)來測試使用 apc 文件記憶體和使用者記憶體可以在我的應用程序中獲得什麼收益。
因此,首先我將 PHP 5.3 編譯為 DSO(apache 模組)。
然後通過 SSH 通過 PECL 安裝 APC。(首先我嘗試使用 WHM 模組安裝程序,它也有同樣的問題,所以我通過 ssh 嘗試了它)
一切似乎都很好,phpinfo 顯示 apc 已載入並啟用。
然後我檢查了apc.php。一切似乎都很好
但是當我開始測試我的 php 應用程序時,apc 中文件記憶體資訊狀態的統計資訊:記憶體文件 0(0.0 字節)
命中 1未
命中 0
請求率(命中、未命中)0.00 記憶體請求/秒
命中率 0.00 記憶體請求/秒未
命中速率 0.00 記憶體請求/秒
插入速率 0.00 記憶體請求/秒
記憶體滿計數 0
這意味著沒有 PHP 文件被記憶體,即使我瀏覽了 10 多個包含多個包含的 PHP 文件。所以肯定有一些記憶體文件。
但是使用者記憶體執行良好。
使用者記憶體資訊
記憶體變數 0(0.0 字節)
命中 1000未
命中 1000
請求率(命中、未命中) 0.84 記憶體請求/秒
命中率 0.42 記憶體請求/秒 未命中率 0.42 記憶體
請求/秒
插入率 0.84 記憶體請求/秒
記憶體滿計數0
它實際上來自一個 APC 記憶體測試腳本,它試圖檢索和儲存 1000 個條目並給我時間。一種簡單的基準。
有人能幫我一下嗎。
即使 apc.cache_by_default = 1,也不會記憶體任何 php 文件。
這是我的 apc 配置
執行時設置
apc.cache_by_default 1
apc.canonicalize 1
apc.coredump_unmap 0
apc.enable_cli 0
apc.enabled 1
apc.file_md5 0
apc.file_update_protection 2
apc.filters
apc.gc_ttl 3600
apc.include_once_override 0
apc.lazy_classes 0
apc.lazy_functions 0
apc.max_file_size 1M
apc.mmap_file_mask
apc.num_files_hint 1000
apc.preload_path
apc.report_autofilter 0
apc.rfc1867 0 apc.rfc1867_freq 0
apc.rfc1867_name APC_UPLOAD_PROGRESS
apc.rfc1867_prefix upload_apc6.rfc1867_prefix
upload_apc.rfc1867
apc.serializer 預設
apc.shm_segments 1
apc.shm_size 32M
apc.slam_defense 1
apc.stat 1
apc.stat_ctime 0
apc.ttl 0
apc.use_request_time 1
apc.user_entries_hint 4096
apc.user_ttl 0
apc.write_lock 1
此外,大多數 php 文件都在 20KB 以下,因此 apc.max_file_size = 1M 不是原因。
我也嘗試過使用’apc_compile_file’來強制一些文件進入操作碼記憶體,但沒有成功。我還重新安裝了啟用調試的 APC,但 error_log 中沒有顯示
我也嘗試將 mmap_file_mask 設置為 /dev/zero 和 /tmp/apc.xxxxxx,我也將 /tmp 權限設置為 777 無濟於事
任何線索任何人。
更新:我嘗試了以下操作,但沒有一個會導致 APC 文件記憶體填充
設置 apc.enable_cli = 1 並從 cli
設置 apc.max_file_size = 5M (以防萬一)
將 php 處理程序從 dso 切換到WHM 中的 FastCGI(然後將其切換回 dso,因為它沒有解決問題)
甚至嘗試重新啟動容器
看來問題出在 SourceGuardian 上。
從 php.ini 註釋掉 extension=“ixed.5.3.lin” 後,文件記憶體現在工作正常。
它是由我的託管服務提供商的支持人員發現的,因此對如此強大的支持表示讚賞。我不會發現這個問題好幾天了。
思想應該發布答案,以防其他人偶然發現這個問題。