安裝Memcached擴展WordPress 網站訪問速度慢需要LCP優化的解決方法
安裝Memcached擴展 進行LCP優化LCP是最近幾年Google推出的一個網站評估指標,LCP(Largest Contentful Paint)最關鍵的兩個指標,一個是LCP另外一個是CLS,將LCP優化到2秒之內的話,在Google搜索中會有更多的網站展示機會。 LCP優化在WordPress中有很多熱門緩存插件,大家可以去安裝緩存插件。無論如何優化緩存,最終還是要縮短初始服務器的響應用時,在LCP優化之前,需要先配置服務器緩存。
關於LCP具體參考:優化Largest Contentful Paint 最大內容繪製
網址未被視為良好網址的原因圖例。
服務器端緩存工具
緩存(或內容緩存)是一種廣泛使用的技術,用於將數據副本存儲在臨時存儲位置(也稱為緩存)中,因此與從原始存儲中檢索數據相比,可以輕鬆,快速地訪問數據。根據緩存的類型和目的,存儲在緩存中的數據可以包括文件或文件片段(例如HTML文件,腳本,圖像,文檔等),數據庫操作或記錄,API調用,DNS記錄等。
Linux服務器的緩存工具有很多優秀的開源緩存工具,Memcached和Redis等等,下面主要介紹一下Memcached的使用方法。
Memcached
Memcached是一個免費,開源,簡單但功能強大的分佈式內存對象緩存系統。它是內存中的鍵值存儲區,用於存儲小塊數據,例如數據庫調用,API調用或頁面呈現的結果。它可以在類似Unix的操作系統(包括Linux和OS X)上運行,也可以在Microsoft Windows上運行。
什麼是Memcached 內存緩存
免費開源、高性能、分佈式內存對象緩存系統,本質上是通用的,但旨在通過減輕數據庫負載來加速動態Web 應用程序。
Memcached 是一種內存中的鍵值存儲,用於存儲來自數據庫調用、API 調用或頁面呈現結果的任意小塊數據(字符串、對象)。
Memcached 簡單而強大。其簡單的設計促進了快速部署、易於開發,並解決了大數據緩存面臨的許多問題。其API 適用於大多數流行語言。
Memcached官網 :http://memcached.org
最新穩定版:memcached-1.6.18.tar.gz (2023-1-10)
Memcached安裝
Debian/Ubuntu:apt-get 安裝libevent-dev Redhat/Centos:dnf 安裝libevent-devel
下載源碼編譯安裝
wget http://memcached.org/latest tar -zxvf memcached-1.6.18.tar.gz cd memcached-1.6.18 ./configure && make && make test && sudo make install
安裝完畢後需要啟動
#查看memcache是否安裝完成ls -al /usr/local/bin/mem* #啟動memcache的服務/usr/local/bin/memcached -d -m 200 -u www -p 11211 -c 256 -P /tmp/memcached.pid
Memcache參數說明:
- -d選項是啟動一個守護進程,
- -m是分配給Memcache使用的內存數量,單位是MB,我這裡是10MB
- -u是運行Memcache的用戶,這裡是root
- -l是監聽的服務器IP地址,如果有多個地址的話,我這裡指定了服務器的IP地址202.207.177.177
- -p是設置Memcache監聽的端口,我這裡設置了11211,最好是1024以上的端口
- -c選項是最大運行的並發連接數,默認是1024,我這裡設置了256,按照你服務器的負載量來設定
- -P是設置保存Memcache的pid文件,我這裡是保存在/tmp/memcached.pid
通過軟件倉庫安裝
dnf install libevent-devel memcached
安裝之後,設置開機啟動
#啟動systemctl start memcached #設置開機啟動systemctl enable memcached #查看當前狀態systemctl status memcached
Memcached修改緩存大小
安裝完畢後,修改memcached 的緩存大小,默認是64M,將緩存修改為1024M
打開 /etc/sysconfig/memcached 文件,將CACHESIZE修改為:1024
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="1024" OPTIONS="-l 127.0.0.1,::1,controller"
修改完畢後,systemctl restart memcached
重新啟動服務
ps -ef | grep memcached
查看一下配置是否生效
Memcached安裝完畢後,如果想讓Memcached在網站中正常工作,還需要在PHP中安裝Memcached擴展.
安裝Memcached擴展
注意:在安裝Memcached之前,需要了解,在PHP擴展中有Memcache擴展和Memcached擴展兩種,Memcached擴展是Memcache擴展的升級版本,支持功能更多。性能更好。注意不要安裝錯了。
- memcache 是pecl 擴展庫版本,支持原生php,屬於第一代cache;
- memcached 是libmemcached 版本,出現較後,是新一代cache,因此也更加完善,推薦使用memcached 。
通過DNF 方式安裝的PHP8.0的安裝路徑和配置位置如下:
- RPM包安裝PHP的安裝路徑:/usr/bin/php-config
- PHP的配置文件:/etc/php.ini
下面是Memcache擴展和Memcached擴展的安裝方法,如無Memcache擴展的安裝需求,可以直接跳轉的Memcached擴展的安裝方法
源碼安裝Memcache擴展
安裝Memcache擴展所需依賴。
dnf install zlib zlib-devel
第一步:打開https://pecl.php.net/package/memcache下載php8的Memcache擴展安裝包。
注意:php版本不同,Memcache擴展安裝包也不一樣,找對應的版本安裝。
php8的Memcache擴展安裝包:https://pecl.php.net/get/memcache-8.0.tgz
第二步:登錄服務器,下載解壓Memcache擴展安裝包
wget https://pecl.php.net/get/memcache-8.0.tgz tar -xvf memcache-8.0.tgz cd memcache-8.0
第三步:安裝Memcache擴展
phpize ./configure --with-php-config=/usr/bin/php-config make && make install
安裝成功後,會顯示安裝位置 Installing shared extensions: /usr/lib64/php/modules/
第四步:修改php.ini文件,啟用Memcache擴展,在php.ini文件末尾加上下面內容。
extension = memcache
測試PHP配置是否正確,然後重新啟動PHP服務
php-fpm -t systemctl restart php-fpm
查看php探針文件,擴展正常啟動
源碼安裝Memcached擴展
第一步:打開https://pecl.php.net/package/memcached下載php8的Memcached擴展安裝包。
注意:php版本不同,Memcached擴展安裝包也不一樣,找對應的版本安裝。
php8的Memcached擴展安裝包:memcached-3.2.0.tgz
第二步:登錄服務器,下載解壓Memcached擴展安裝包
wget https://pecl.php.net/get/memcached-3.2.0.tgz tar -xvf memcached-3.2.0.tgz cd memcached-3.2.0
memcached,這個擴展需要libmemcached 客戶端庫,否則會出現如下錯誤:
error: memcached support requires libmemcached. Use --with-libmemcached-dir= to specify the prefix where libmemcached headers and library are located
dnf install libmemcached libmemcached-devel remi-libmemcached-awesome
注意:如果在軟件倉庫中沒有libmemcached-devel,可以下載安裝
wget https://vault.centos.org/centos/8/PowerTools/x86_64/os/Packages/libmemcached-devel-1.0.18-15.el8.x86_64.rpm dnf --enablerepo=powertools install libmemcached-devel
第三步:安裝Memcached擴展
phpize ./configure --with-php-config=/usr/bin/php-config make && make install
安裝成功後,會顯示安裝位置 Installing shared extensions: /usr/lib64/php/modules/
第四步:修改php.ini文件,啟用Memcached擴展,在php.ini文件末尾加上下面內容。
extension = memcached
測試PHP配置是否正確,然後重新啟動PHP服務
php-fpm -t systemctl restart php-fpm
查看php探針文件,Memcached擴展正常啟動
你可以在無需下載源碼的情況下,使用pecl命令安裝memcached擴展
pecl install memcached
知識點:如果無法使用dnf在軟件倉庫中安裝php擴展,可以使用pecl命令在php官方擴展庫中進行安裝。
Memcached擴展安裝完畢後,還需要進行WordPress與Memcached的連接,如果不進行服務器端與WEB端的連接的話,Memcached緩存將不會起作用。
WordPress配置Memcached緩存
在wp-config.php中添加如下內容。
global $memcached_servers; $memcached_servers = array( array( '127.0.0.1', // Memcached server IP address 11211 // Memcached server port ) );
如果多站點緩存設置的話,參考下面內容:
global $memcached_servers; $memcached_servers = array( array( '1.2.3.4', 11211 ), array( '1.2.3.5', 11211 ) );
memcached 監聽IP 和端口,你可以通過如下命令查看:
netstat -nutlp | grep memcache
在WordPress中使用緩存插件配置memcached
下載安裝W3 Total Cache Pro v2.3.0 免費下載破解版! WordPress緩存插件推薦
W3TC目前可以在插件界面配置memcached內存緩存,無需複雜配置,也無需修改代碼等等,W3TC功能強大,緩存配置選項繁多,可以配合WP Meteor插件使用。
如何監控Memcached工作是否正常
將memcache.php文件下載後,上傳到服務器上WordPress目錄下,在上傳之前,先修改文件內的訪問用戶口令。
$VERSION='$Id$'; define('ADMIN_USERNAME','設置一個用戶名'); // Admin Username define('ADMIN_PASSWORD','設置一個密碼'); // Admin Password define('DATE_FORMAT','Y/m/d H:i:s'); define('GRAPH_SIZE',200); define('MAX_ITEM_DUMP',50); $MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array //$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // 如果是多站點內存緩存,設置這裡
上傳之後,訪問memcache.php文件的URL地址,即可看到內存緩存的工作頁面。
Zend OPcache配置
使用Opcache 進行PHP 代碼編譯加速優化。提高代碼的執行效率我們可以使用OPcache來提高PHP代碼的執行效率, 減少每次加載和解析PHP 腳本的開銷。在php8中OPcache是默認開啟的。
PHP配置jit,PHP 8在PHP的內核中添加了JIT編譯器,可以極大地提高性能。更強的cpu密集處理,或許以後php也可以適當做複雜協議解析。
首先,僅在啟用opcache的情況下,JIT才有效,這是大多數PHP安裝的默認設置,但您應確保opcache.enable在php.ini文件中將其設置為1 。通過opcache.jit_buffer_size設置JIT。
只需要配置php.ini就可以了,在php.ini末尾添加:
opcache.enable=1 opcache.jit_buffer_size=100M opcache.jit=1255 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
opcache.revalidate_freq
這個選項用於設置緩存的過期時間(單位是秒),當這個時間達到後,opcache 會檢查你的代碼是否改變,如果改變了PHP 會重新編譯它,生成新的opcode,並且更新緩存。值為“0” 表示每次請求都會檢查你的PHP 代碼是否更新(這意味著會增加很多次stat系統調用,譯註: stat系統調用是讀取文件的狀態,這裡主要是獲取最近修改時間,這個系統調用會發生磁盤I/O,所以必然會消耗一些CPU時間,當然系統調用本身也會消耗一些CPU時間)。可以在開發環境中把它設置為0,生產環境下不用管,因為下面會介紹另外一個設置選項。
opcache.validate_timestamps
當這個選項被啟用(設置為1),PHP會在opcache.revalidate_freq 設置的時間到達後檢測文件的時間戳(timestamp)。
如果這個選項被禁用(設置為0),opcache.revalidate_freq 會被忽略, PHP 文件永遠不會被檢查。這意味著如果你修改了你的代碼,然後你把它更新到服務器上,再在瀏覽器上請求更新的代碼對應的功能, 你會看不到更新的效果,你必須得重新加載你的PHP (使用kill -SIGUSR2 強制重新加載)。
這個設定是不是有些蛋疼, 但是我強烈建議你在生產環境中使用, why?因為當你在更新服務器代碼的時候,如果代碼較多,更新操作是有些延遲的,在這個延遲的過程中必然出現老代碼和新代碼混合的情況,這個時候對用戶請求的處理必然存在不確定性。
opcache.max_accelerated_files
這個選項用於控制內存中最多可以緩存多少個PHP 文件,這個選項必須得設置得足夠大,大於你的項目中的所有PHP 文件的總和。我的代碼庫大概有6000 個PHP 文件,所以我把這個值設置為一個素數7963 (譯註: 不知道這哥們為什麼要設置這個數,7963 也不是大於6000 的最小素數),你可以運行“find . -type f -print | grep php | wc -l” 這個命令來快速計算你的代碼庫中的PHP文件數。
opcache.memory_consumption
這個選項的默認值為64MB,我把它設置為192MB,因為我的代碼很大。你可以通過調用opcachegetstatus() 來獲取opcache 使用的內存的總量,如果這個值很大,你可以把這個選項設置得更大一些。
opcache.interned_strings_buffer
這是一個很有用的選項,但是似乎完全沒有文檔說明。 PHP 使用了一種叫做字符串駐留(string interning) 的技術來改善性能。例如,如果你在代碼中使用了1000 次字符串“foobar”,在PHP 內部只會在第一使用這個字符串的時候分配一個不可變的內存區域來存儲這個字符串,其他的999 次使用都會直接指向這個內存區域。這個選項則會把這個特性提升一個層次。
默認情況下這個不可變的內存區域只會存在於單個php-fpm 的進程中,如果設置了這個選項,那麼它將會在所有的php-fpm 進程中共享。在比較大的應用中,這可以非常有效地節約內存,提高應用的性能。
這個選項的值是以兆字節(megabytes) 作為單位,如果把它設置為16,則表示16MB,默認是4MB,這是一個比較低的值。
opcache.fast_shutdown
另外一個很有用但也沒有文檔說明的選項。從字面上理解就是”允許更快速關閉”。它的作用是在單個請求結束時提供一種更快速的機制來調用代碼中的析構器,從而加快PHP 的響應速度和PHP 進程資源的回收速度,這樣應用程序可以更快速地響應下一個請求。把它設置為1 就可以使用這個機制了。