2012-08-28 55 views
3

APC正在使用大量內存。 在我的服務器上,〜30個Wordpress和6個Magento網站,它使用的文件大小超過了1GB,這大於PHP文件的大小。APC如何使用內存?

我以爲操作碼會比PHP文件小。正如編譯的JAVA與源代碼相比。

例如,Magento的index.php在磁盤上是2571B,它在APC中使用16560B。

我不使用任何用戶緩存。

有什麼想法?

+1

一般來說,字節碼不一定小於源代碼。根據字節碼格式和源編程語言,有很多元數據和單個操作需要很多操作碼才能實現。但是,即使字節碼較大,它也不會太大。 – delnan

+0

對於它的價值,我在運行〜30個獨立安裝的應用程序時看到了非常可比的APC內存使用情況。我修改了我的應用程序,以便所有〜30個站點可以共享一個代碼庫(減少我的內存使用量〜30x) –

+0

@delan爲什麼不把它作爲答案發布?我認爲這是關鍵。 Opcode可能比真實代碼更大,因爲一個PHP指令被轉換爲許多操作碼。 – bokan

回答

2

操作碼通過它所在的路徑緩存每個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會緩存每個文件 - 它認爲它們是不同的文件。

+0

我不使用shm而是使用mmap內存。我允許使用2048M(apc.shm_size = 2048M),使用率爲50%。 – bokan

+0

@bokan您可以通過apc.php頁面驗證您使用的是否沒有用戶緩存?我有時會設置wordpress來使用可指向APC的緩存插件。這些插件存儲到用戶緩存中。 – Ray

+0

「我不使用任何用戶緩存。」我檢查了它的惠普pac.php。你似乎認爲我的APC運行不正常。你有一個服務器來比較,你可以給我的數字嗎? (APC使用的網站數量,類型,緩存量..)。 – bokan