2014-12-04 49 views
3

雖然我明白這些設置:Zend的OPcache性能設置VS默認設置

opcache.validate_timestamps=0 
opcache.interned_strings_buffer=16 
opcache.max_accelerated_files=3907 
opcache.blacklist_filename=/blacklisted_files 

應該提高性能(根據鏈接:123)。我真的不知道最後2,在我的情況下,「internet_strings_buffer」設置值「4」可能永遠不會被填充(因此不會給出更好的結果),但「validate_timestamps」應該刪除stat()函數開銷,因此給我更好性能,但根據我對JMeter的測試,我無法驗證這一點。單獨設置比默認設置更差。

據我所知,「性能設置」可能不會提高很多,但我認爲它不應該變差(每個請求的差別大約爲+2 ms)。

問題是:爲什麼默認設置比性能/推薦設置更好?

OPcache還處理較小的內存覆蓋/刪除/搜索比較大(談論「opcache.memory_consumption」設置)?

回答

4

選項2和3只是間接地與性能有關,因爲它們與操作碼緩存的容量有關。如果您當前的使用情況符合默認值,那麼您將不會看到任何重大差異,其他使用Opcache的系統開銷略有增加。當然,如果當前使用的不適合,您將獲得一個優勢,因爲緩存將具有更大的容量,並且您將獲得更少的緩存未命中。

選項4涉及定義PHP腳本文件名的模式,這些文件名是易失性的,因此不應該被緩存。如果您禁用了時間戳驗證,這一點尤其重要,因爲這些更改不會被Opcache拾取。

選項1確實刪除了PHP進程可以驗證的額外stat()調用。使用現代CPU,Linux內核可以非常高效地緩存inode,因此如果節點位於VFAT緩存中,則這隻能保存子mSec 。您需要很好地構建時序測試來衡量這種差異。

Opcache有一個很差的重用策略:它不打擾。高速緩存緩慢填滿,完全刷新並從頭開始重建。

+0

嗨TerryE, 我很欣賞的答案,我有一個問題: 幽州選項4很重要,如果時間戳驗證是禁用的,但在選項1你說的stat()調用不會,如果被刪除時間戳驗證設置爲FALSE。那麼什麼是「opcache.validate_timestamps」的真正意義呢? – 2014-12-07 20:55:37

+1

不完全相反,我說的相反:將'validate_timestamps'設置爲= 0參數意味着'stats'不會被執行。請參閱源存儲庫中的Opcache [README文件](https://github.com/php/php-src/blob/master/ext/opcache/README)。 – TerryE 2014-12-08 10:40:47

+0

感謝您的信息。很抱歉,不能早日接受答案。 – 2014-12-12 13:42:33