目錄
Opcache file cache" >Opcache file cache
#設定後需重新啟動php-fpm" >#設定後需重新啟動php-fpm
系統:centOs 7" >##親測系統:centOs 7
#cpu:95%- 96%" >優化前#cpu:95%- 96%
cpu:20%-40 %" >#優化後cpu:20%-40 %
聚合報表" >第一次壓測聚合報表
聚合報告" >#第二次壓測聚合報告
首頁 後端開發 PHP7 高品質筆記來了!關於PHP7效能最佳化

高品質筆記來了!關於PHP7效能最佳化

Sep 18, 2021 pm 04:12 PM
php7

Opcache

1. Opcache原理
# PHP的正常執行流程如下

## request請求(nginx,apache,cli等)–>Zend引擎讀取.php檔案–>掃描其字典和表達式–>解析檔案–>建立要執行的電腦程式碼(稱為Opcode)–> ;最後執行Opcode–> response 回傳

每次請求PHP腳本都會執行一遍以上步驟,如果PHP原始碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重新產生Opcode,結合在Web中無所不在的快取機制,我們可以把Opcode快取下來,以後直接存取快取的Opcode豈不是更快,啟用Opcode快取之後的流程圖如下所示:

Opcode cache 的目地是避免重複編譯,減少CPU 和記憶體開銷。


2. Opcache配置在php.ini下方新增:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// 加载opcache(需确认已安装opcache拓展)

zend_extension=opcache.so

// 开启opcache

opcache.enable = 1

// OPcache共享内存存储大小,单位MB

opcache.memory_consumption=1024 // 1G

// PHP使用了一种叫做字符串驻留,默认是4MB

opcache.interned_strings_buffer=32

// 这个选项用于控制内存中最多可以缓存多少个PHP文件,这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和

opcache.max_accelerated_files=80000

// 设置缓存的过期时间(单位是秒),为0的话每次都要检查

opcache.revalidate_freq=3

// 从字面上理解就是“允许更快速关闭”

opcache.fast_shutdown=1

// CLI环境下,PHP启用OPcache

opcache.enable_cli=1

登入後複製

HugePage

1. HugePage原理#透過啟用這個特性,PHP7會把自身的TEXT段(執行體)」挪「到Huagepage上,之前的測試,我們能穩定的在Wordpress上看到2%~3%的QPS提升。
關於Hugepage是啥,簡單的說下就是預設的記憶體是以4KB分頁的,而虛擬位址和記憶體位址是需要轉換的, 而這個轉換是要查表的,CPU為了加速這個查表過程都會內建TLB(Translation Lookaside Buffer),顯而易見如果虛擬頁越小,表裡的條目數也就越多,而TLB大小是有限的,條目數越多TLB的Cache Miss也就會越高, 所以如果我們能啟用大內存頁就能間接降低這個TLB Cache Miss,至於詳細的介紹,Google一搜一大堆我就不贅述了,這裡主要說明下如何啟用這個新特性, 從而帶來明顯的性能提升。

2. HugePage配置

1

$ sudo sysctl vm.nr_hugepages=512 // 切勿越大越好,会长占内存

登入後複製

分配512個預留的大頁記憶體:

1

2

3

4

5

6

7

cat /proc/meminfo  | grep Huge

AnonHugePages:    106496 kB

HugePages_Total:     512

HugePages_Free:      504

HugePages_Rsvd:       27

HugePages_Surp:        0

Hugepagesize:       2048 kB

登入後複製

然後在php.ini中加入:

1

opcache.huge_code_pages=1

登入後複製

Opcache file cache

1. Opcache file cache介紹使用opcache把編譯後的php檔案儲存為文件,實作php原始碼保護與腳本加速, 會有很明顯的效能提升

2. Opcache file cache配置#在php.ini加入:

1

opcache.file_cache=/tmp

登入後複製

這樣PHP就會在/tmp目錄下Cache一些Opcode的二進位匯出檔, 可以跨PHP生命週期存在.

##親測系統:centOs 7

php版本:7.4

nginx
laravel: 8.5

記憶體:2G/16G

10分鐘4W並發
失敗率:24%

聚合報告


高品質筆記來了!關於PHP7效能最佳化每秒處理交易

![PHP7效能最佳化]

![PHP7效能最佳化筆記]


高品質筆記來了!關於PHP7效能最佳化

記憶體:5.8G/16G(此處我HugePage設定2048)

10分鐘4W並發
失敗率:0%


高品質筆記來了!關於PHP7效能最佳化每秒處理交易

高品質筆記來了!關於PHP7效能最佳化

高品質筆記來了!關於PHP7效能最佳化每秒處理交易

高品質筆記來了!關於PHP7效能最佳化#推薦學習:《

PHP7教程

以上是高品質筆記來了!關於PHP7效能最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
php7.0安裝了插件還是顯示未安裝怎麼辦 php7.0安裝了插件還是顯示未安裝怎麼辦 Apr 02, 2024 pm 07:39 PM

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

php7.0怎麼安裝mongo擴展 php7.0怎麼安裝mongo擴展 Nov 21, 2022 am 10:25 AM

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

php7檢測tcp埠不好用怎麼解決 php7檢測tcp埠不好用怎麼解決 Mar 22, 2023 am 09:30 AM

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

PHP 伺服器環境常見問題指南:快速解決常見難題 PHP 伺服器環境常見問題指南:快速解決常見難題 Apr 09, 2024 pm 01:33 PM

PHP伺服器環境常見的解決方法包括:確保已安裝正確的PHP版本和已複製相關檔案到模組目錄。暫時或永久停用SELinux。檢查並配置PHP.ini,確保已新增必要的擴充功能和進行正確設定。啟動或重新啟動PHP-FPM服務。檢查DNS設定是否有解析問題。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

php7.0怎麼安裝部署 php7.0怎麼安裝部署 Nov 30, 2022 am 09:56 AM

php7.0安裝部署的方法:1、到PHP官網下載與本機系統對應的安裝版本;2、將下載的zip檔案解壓縮到指定目錄;3、開啟命令列窗口,在「E:\php7」目錄下運行“php -v”命令即可。

在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? 在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? Apr 01, 2025 pm 03:06 PM

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

記錄一次用strace診斷php佔用系統資源過高的問題 記錄一次用strace診斷php佔用系統資源過高的問題 May 03, 2024 pm 04:31 PM

本機環境:redhat6.7系統。 nginx1.12.1,php7.1.0,程式碼使用yii2框架問題:本地的web站需要用到elasticsearch服務。當php使用本機伺服器搭建的elasticsearch時,本地的負載都是正常。當我使用aws的elasticsearchservice服務時,本地伺服器出現負載經常過高的情況。查看nginx和php日誌,發現沒有異常。系統的並發連線數也不高。這時候想到我們老闆跟我講的一個strace診斷工具。偵錯過程:找一個php的子程序idstrace-

See all articles