APC正在使用大量內存。 在我的服務器上,〜30個Wordpress和6個Magento網站,它使用的文件大小超過了1GB,這大於PHP文件的大小。APC如何使用內存?
我以爲操作碼會比PHP文件小。正如編譯的JAVA與源代碼相比。
例如,Magento的index.php在磁盤上是2571B,它在APC中使用16560B。
我不使用任何用戶緩存。
有什麼想法?
APC正在使用大量內存。 在我的服務器上,〜30個Wordpress和6個Magento網站,它使用的文件大小超過了1GB,這大於PHP文件的大小。APC如何使用內存?
我以爲操作碼會比PHP文件小。正如編譯的JAVA與源代碼相比。
例如,Magento的index.php在磁盤上是2571B,它在APC中使用16560B。
我不使用任何用戶緩存。
有什麼想法?
操作碼通過它所在的路徑緩存每個php文件。所以這是30 x每wordpress PHP文件或6 x每個Magento PHP文件。這並不是說任何PEAR庫或其他你可能使用的庫。
此外,您在/etc/php.d/apc.ini或php.ini文件中設置的內存允許APC的設置是什麼?
apc.shm_segments=1
apc.shm_size=256
將分段時間乘以大小,並且與APC一樣大。即使您沒有真正使用它,它也會立即使用此內存塊。檢查你的apc.php文件以查看實際使用情況。
縱觀wordpress最近安裝的wordpress,我看到至少8M的php文件。所以,如果你有30個站點,他們自己完全安裝wordpress並使用APC,那麼單獨(沒有任何插件)將是操作碼緩存中的大量內容。
一般來說,操作碼應該小於文件大小,但你肯定無法知道100%。例如,檢查系統緩存選項卡中的APC.php,我看到這個文件被緩存:/usr/share/pear/Zend/View/Abstract.php
。我知道在磁盤上它是33k,但APC報告它使用了20K的內存。如果我在兩個位置(如/usr/share/pear/Zend/View/Abstract.php
和/usr/share/pear/Zend2/View/Abstract.php
)有兩個這樣的文件副本,並在不同的代碼塊中引用這兩個副本,APC會緩存每個文件 - 它認爲它們是不同的文件。
一般來說,字節碼不一定小於源代碼。根據字節碼格式和源編程語言,有很多元數據和單個操作需要很多操作碼才能實現。但是,即使字節碼較大,它也不會太大。 – delnan
對於它的價值,我在運行〜30個獨立安裝的應用程序時看到了非常可比的APC內存使用情況。我修改了我的應用程序,以便所有〜30個站點可以共享一個代碼庫(減少我的內存使用量〜30x) –
@delan爲什麼不把它作爲答案發布?我認爲這是關鍵。 Opcode可能比真實代碼更大,因爲一個PHP指令被轉換爲許多操作碼。 – bokan