Zend Opcache 的最佳設定

2021-09-19 04:46:43 字數 2515 閱讀 3413

在網上無意中看到的一篇文章,這哥們非常簡潔地談論了zend opcache的最佳設定,他說他為此花了大量的時間探索zend opcache的每個設定選項的細節,甚至是閱讀它的源**,並且在自己的專案中實踐(乙個每天有117 million的http請求的應用)。

opcache優化在著名的《modern php》 中也有重要篇幅。在php文件也有詳細介紹:

個人覺得這種文章相當有指導意義,所以特地把它的設定方式摘譯如下(格式有些修改)。

這個選項用於設定快取的過期時間(單位是秒),當這個時間達到後,opcache會檢查你的**是否改變,如果改變了php會重新編譯它,生成新的opcode,並且更新快取。值為「0」表示每次請求都會檢查你的php**是否更新(這意味著會增加很多次stat系統呼叫,譯註:stat系統呼叫是讀取檔案的狀態,這裡主要是獲取最近修改時間,這個系統呼叫會發生磁碟i/o,所以必然會消耗一些cpu時間,當然系統呼叫本身也會消耗一些cpu時間)。可以在開發環境中把它設定為0,生產環境下不用管,因為下面會介紹另外乙個設定選項。

當這個選項被啟用(設定為1),php會在opcache.revalidate_freq設定的時間到達後檢測檔案的時間戳(timestamp)。

這個設定是不是有些蛋疼,但是我強烈建議你在生產環境中使用,why?因為當你在更新伺服器**的時候,如果**較多,更新操作是有些延遲的,在這個延遲的過程中必然出現老**和新**混合的情況,這個時候對使用者請求的處理必然存在不確定性。

這個選項用於控制記憶體中最多可以快取多少個php檔案。這個選項必須得設定得足夠大,大於你的專案中的所有php檔案的總和。我的**庫大概有6000個php檔案,所以我把這個值設定為乙個素數7963。

真實的取值是在質數集合 中找到的第乙個比設定值大的質數。 設定值取值範圍最小值是 200,最大值在 php 5.5.6 之前是 100000,php 5.5.6 及之後是 1000000。

聽起來好複雜,但用下面的命令就妥啦

你可以執行find . -type f -print | grep php | wc -l這個命令來快速計算你的**庫中的php檔案數。

這個選項的預設值為64mb,我把它設定為192mb,因為我的**很大。你可以通過呼叫opcachegetstatus()來獲取opcache使用的記憶體的總量,如果這個值很大,你可以把這個選項設定得更大一些。

這是乙個很有用的選項,但是似乎完全沒有文件說明。php使用了一種叫做字串駐留(string interning)的技術來改善效能。例如,如果你在**中使用了1000次字串「foobar」,在php內部只會在第一使用這個字串的時候分配乙個不可變的記憶體區域來儲存這個字串,其他的999次使用都會直接指向這個記憶體區域。這個選項則會把這個特性提公升乙個層次——預設情況下這個不可變的記憶體區域只會存在於單個php-fpm的程序中,如果設定了這個選項,那麼它將會在所有的php-fpm程序中共享。在比較大的應用中,這可以非常有效地節約記憶體,提高應用的效能。

這個選項的值是以兆位元組(megabytes)作為單位,如果把它設定為16,則表示16mb,預設是4mb,這是乙個比較低的值。

另外乙個很有用但也沒有文件說明的選項。從字面上理解就是「允許更快速關閉」。它的作用是在單個請求結束時提供一種更快速的機制來呼叫**中的析構器,從而加快php的響應速度和php程序資源的**速度,這樣應用程式可以更快速地響應下乙個請求。把它設定為1就可以使用這個機制了。

最終我們對於opcache在php.ini的設定如下:

開發模式下推薦,直接禁用opcache擴充套件更好

opcache.revalidate_freq=0

opcache.validate_timestamps=1

opcache.max_accelerated_files=3000

opcache.memory_consumption=192

opcache.interned_strings_buffer=16

opcache.fast_shutdown=1

多台機器集群模式或者**更新頻繁時推薦,可以兼顧效能,方便**更新

opcache.revalidate_freq=300

opcache.validate_timestamps=1

opcache.max_accelerated_files=7963

opcache.memory_consumption=192

opcache.interned_strings_buffer=16

opcache.fast_shutdown=1

穩定專案推薦,效能最好

opcache.revalidate_freq=0

opcache.validate_timestamps=0

opcache.max_accelerated_files=7963

opcache.memory_consumption=192

opcache.interned_strings_buffer=16

opcache.fast_shutdown=1

via:

最佳的小路

世界著名建築大師格羅培斯設計的迪斯尼樂園,經過了3年的施工,馬上就要對外開放了。然而各景點之間的道路該怎樣聯絡還沒有具體的方案。施工部打 給正在法國參加慶典的格羅培斯大師,請他趕快定稿,以便按計畫竣工和開放。格羅培斯大師從事建築研究40多年,攻克過無數建築方面的難題,在世界各地留下了70多處精美的傑...

wxVectorProperty 屬性的設定

用wx中屬性網格屬性設定時遇到了些麻煩。為了設定編輯器中模型的3d座標,在屬性網格中加了3d座標屬性。但是在設定wxvectorproperty,不知道如何設定。後來在wxpropertygridproperties檔案中找到了這個巨集wx pg declare variant data wxvec...

活動的最佳實踐之 啟動活動的最佳寫法

通過呼叫目的活動提供的特定方法來啟動目的活動,並傳遞資料,可以為後續實際開發中減少不必要的麻煩。以下為在mainactivity 啟動secondactivity 為例 secondactivity 提供actionstart 方法,並將context data設定為引數,在該方法中定義intent...