首頁  >  文章  >  後端開發  >  高品質筆記來了!關於PHP7效能最佳化

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

藏色散人
藏色散人轉載
2021-09-18 16:12:332499瀏覽

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下方新增:

// 加载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配置

$ sudo sysctl vm.nr_hugepages=512 // 切勿越大越好,会长占内存
分配512個預留的大頁記憶體:

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中加入:

opcache.huge_code_pages=1

Opcache file cache

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

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

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

#設定後需重新啟動php-fpm

##親測系統:centOs 7

php版本:7.4

nginx
laravel: 8.5

優化前#cpu:95%- 96%

記憶體:2G/16G

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

聚合報告


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

![PHP7效能最佳化]

![PHP7效能最佳化筆記]


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

#優化後cpu:20%-40 %

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

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

第一次壓測聚合報表


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

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

#第二次壓測聚合報告

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

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

PHP7教程

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

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除