對(duì)於大多數(shù)項(xiàng)目而言,從源頭編譯PHP並不是必需的,但可以完全控制峰值性能,最小的膨脹和特定的優(yōu)化。 2。它涉及將PHP的C源代碼轉(zhuǎn)換為可執(zhí)行文件,允許自定義,例如剝離未使用的擴(kuò)展,啟用了CPU特定的優(yōu)化和集成自定義庫(kù),可能會(huì)產(chǎn)生5-15%的吞吐量。 3。要從源構(gòu)建php 8.3,安裝依賴項(xiàng),下載源,使用以性能為中心的標(biāo)誌(例如, - 可見的debug, - enable-opcache, - without-pear),使用make進(jìn)行編譯,然後安裝到自定義目錄中,以避免衝突。 4。關(guān)鍵配置選項(xiàng)包括設(shè)置 - 用於隔離的預(yù)訂,啟用用於Web使用的FPM,禁用CGI和PEAR以減少開銷,並在php.ini中調(diào)整OPCACHE,並使用opcache.memory_consumptiment.memory_consumption = 256和opcache.validate_timestamps.timestamps = 0。 5。性能增長(zhǎng)來自較小的二進(jìn)製文件,編譯器優(yōu)化(例如-March =本機(jī)),更緊密的庫(kù)集成和特定於工作負(fù)載的OPCACHE TUNING。 6.積極的編譯器標(biāo)誌,例如-O2和-March =本機(jī)可以通過CFLAGS設(shè)置在配置之前,以優(yōu)化主機(jī)CPU,但是由於潛在的緩存懲罰,應(yīng)避免使用-O3。 7。主要的陷阱不包括自動(dòng)安全更新,以後無法管理擴(kuò)展程序,在使用CPU特定的標(biāo)誌時(shí),在沒有調(diào)試符號(hào)的情況下調(diào)試挑戰(zhàn)以及缺乏二進(jìn)制便攜性。 8。這種方法最適合專用服務(wù)器或控制和效率很重要的高流量應(yīng)用程序,但對(duì)於共享託管或小型項(xiàng)目來說是過度的。 9.最終建議包括在重新配置時(shí)使用“清潔”,將配置命令保存在腳本中以進(jìn)行可重複性,使用Apache Bench或K6等工具進(jìn)行實(shí)際工作負(fù)載進(jìn)行測(cè)試,以及與Docker的構(gòu)建容器以保持一致的部署。從源編譯PHP正確完成後,可提供可衡量的性能優(yōu)勢(shì),但需要仔細(xì)維護(hù)和徹底的測(cè)試以證明運(yùn)營(yíng)開銷合理。
為什麼要從源中編譯PHP?

您不需要從源頭編譯大多數(shù)項(xiàng)目的php,即從操作系統(tǒng)或Homebrew,Docker或Package Manager(例如APT或YUM)等工具中構(gòu)建的包裝包裝,效果很好。但是,如果您正在追逐峰值性能,最小的膨脹或特定的低級(jí)優(yōu)化,則來自源的PHP可以完全控制。本指南介紹了自己編制PHP的原因,如何和陷阱,以獲得最佳性能。
1。 “彙編PHP”實(shí)際上是什麼意思
PHP用C編寫。當(dāng)您下載PHP源代碼時(shí),您正在獲取需要將其編譯到二進(jìn)制可執(zhí)行文件中的C文件。系統(tǒng)可以運(yùn)行。標(biāo)準(zhǔn)的php
CLI, php-fpm
過程或Apache模塊 - 都從同一源編譯。

當(dāng)您通過軟件包管理器安裝PHP時(shí),您將使用其他人編譯的二進(jìn)製文件 - 通常使用通用設(shè)置來處理大多數(shù)係統(tǒng)。通過自己編譯,您:
- 剝離未使用的擴(kuò)展
- 啟用CPU特異性優(yōu)化
- 使用較新的編譯器或標(biāo)誌以提高性能
- 與自定義庫(kù)集成(例如,特定的SSL或圖像處理LIB)
這不是魔術(shù),但是當(dāng)正確完成時(shí),它可以在現(xiàn)實(shí)世界應(yīng)用中產(chǎn)生5-15%的吞吐量。

2。逐步:從來源建造PHP 8.3
我們將以PHP 8.3(截至2024年,最新的穩(wěn)定版本)為例。這些步驟假設(shè)Ubuntu/Debian;調(diào)整您的操作系統(tǒng)。
安裝依賴項(xiàng)
sudo apt更新 sudo apt install -y build-exental autoconf libxml2-dev \ libssl-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev \ libpng-dev libfreetype6-dev libzip-dev libonig-dev
下載PHP源
CD /TMP WGET https://www.php.net/distributions/php-8.3.10.tar.gz TAR -XZF php -8.3.10.tar.gz CD PHP-8.3.10
牢記性能配置
這是自定義發(fā)生的地方。使用./configure
來定義構(gòu)建的內(nèi)容。
./configure \ -prefix =/opt/php-8.3-custom \ - Enable-fpm \ - with-fpm-user = www-data \ www-data \ - with-fpm group = www-data \ - 可啟示\ - 啟用pcntl \ - 啟用sockets \ - Enable-zip \ - 卷\ \ - with-jpeg \ - 造型\ - with-openssl \ - 與zlib \ - 可見debug \ - eNable-opcache \ - with-config-file-path =/etc/php/8.3-custom \ - with-config-file-scan-dir =/etc/php/php/8.3-custom/conf.d \ - 可見cgi \ - 無套
鑰匙旗解釋了:
-
--prefix
:安裝到自定義目錄,以免干擾系統(tǒng)PHP -
--enable-fpm
:用於NGINX/APACHE的Web使用 --disable-debug
:刪除調(diào)試符號(hào)和檢查(更快的執(zhí)行速度)-
--enable-opcache
:性能至關(guān)重要;預(yù)加載和緩存編譯了腳本 --disable-cgi
:減少攻擊表面和未使用的二進(jìn)制--without-pear
:梨已經(jīng)過時(shí);除非需要
??不要啟用每個(gè)擴(kuò)展。僅添加您的應(yīng)用程序使用的內(nèi)容。每個(gè)人都會(huì)消耗內(nèi)存和啟動(dòng)時(shí)間。
編譯並安裝
製作-j $(nproc)#使用所有CPU內(nèi)核 Sudo進(jìn)行安裝
根據(jù)您的機(jī)器,這需要5-15分鐘。
設(shè)置配置文件
sudo mkdir -p /etc/php/8.3-custom sudo cp php.ini-production /etc/php/8.3-custom/php.ini sudo cp/opt/php-8.3-custom/etc/php-fpm.conf.default/opt/php-8.3-custom/etc/etc/php-fpm.conf sudo cp/opt/php-8.3-custom/etc/php-fpm.d/www.conf.conf.default/opt/php-8.3-custom/etc/etc/php-fpm.d/www.conf
編輯/etc/php/8.3-custom/php.ini
:
opcache.enable = 1 opcache.enable_cli = 1 opcache.memory_cummumption = 256 opcache.max_accelerated_files = 20000 opcache.validate_timestamps = 0;只有生產(chǎn)!
?在開發(fā)中設(shè)置
validate_timestamps=1
以重新加載腳本進(jìn)行更改。
3。績(jī)效增長(zhǎng):期望什麼
您不會(huì)加倍PHP的速度,但這是您獲得的地方:
- 較小的二進(jìn)制大小:更少的擴(kuò)展=每個(gè)過程的內(nèi)存更少
- 編譯器優(yōu)化:GCC或Clang可以為您的CPU優(yōu)化(例如
-march=native
) - 更嚴(yán)格的集成:使用較新的庫(kù)(例如OpenSSL 3.0或System Libzip)
- opcache調(diào)用您的工作量:更多內(nèi)存,更好的文件限制
可選:?jiǎn)⒂梅e極的編譯器標(biāo)誌
在./configure
之前編輯CFLAGS
:
導(dǎo)出cflags =“ - o2 -march =本機(jī)-mtune =本機(jī)”
-
-O2
:優(yōu)化性能(默認(rèn)值為-O1
在許多構(gòu)建中) -
-march=native
:生成針對(duì)您的CPU優(yōu)化的代碼(SIMD,指令集)
??不使用
-O3
。它可以增加代碼尺寸並損害緩存性能。-O2
更安全,通常更快。
4。陷阱和警告
- 無自動(dòng)更新:您負(fù)責(zé)安全補(bǔ)丁。監(jiān)視PHP發(fā)布。
- 擴(kuò)展地獄:以後安裝PECL擴(kuò)展名可能需要相同的構(gòu)建環(huán)境。
-
調(diào)試複雜性:核心轉(zhuǎn)儲(chǔ)或segfaults需要調(diào)試符號(hào)(暫時(shí)使用
--enable-debug
)。 -
不移植:用
-march=native
製造的二進(jìn)製文件不會(huì)在較舊的CPU上運(yùn)行。
?最佳:專用服務(wù)器,高流量應(yīng)用程序,您控制基本圖像的容器。
?過度殺傷:共享託管,小地點(diǎn),快速原型製作。
最終提示
- 如果重新配置以避免過時(shí)的對(duì)象,請(qǐng)使用
make clean
- 將您的
./configure
行放在腳本中以供重複可重複 - 使用實(shí)際工作負(fù)載(例如Apache Bench或K6)測(cè)試性能,而不僅僅是
php --version
- 考慮使用Docker來容器化您的自定義構(gòu)建以保持一致性
基本上,從源中編譯PHP並不適合所有人,但是當(dāng)您需要效率的最後10%或想要消除膨脹時(shí),它是一個(gè)強(qiáng)大的工具。收益是真實(shí)的,但維護(hù)成本也是如此。了解您的用例,徹底測(cè)試並自動(dòng)化構(gòu)建。
以上是揭開PHP彙編的神秘面紗:從源構(gòu)建自定義PHP以獲得最佳性能的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

NginxhandlesstaticfilesandroutesdynamicrequeststoPHP-FPM,whichprocessesPHPscriptsviaFastCGI;2.OptimizePHP-FPMbyusingUnixsockets,settingpm=dynamicwithappropriatemax_children,spareservers,andmax_requeststobalanceperformanceandmemory;3.ConfigureNginxwit

推薦使用Homebrew安裝PHP,運(yùn)行/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安裝Homebrew,再執(zhí)行brewinstallphp或指定版本如brewinstallphp@8.1;安裝後編輯對(duì)應(yīng)路徑的php.ini文件調(diào)整memory_limit、upload_max_filesize、post_max_size和display_

wsl2isthenewstanceforseriousphpdevelopmentonwindows.1.installwsl2withubuntuingusingwsl-install,thenupdatewithsudoaptupdat E && sudoaptupgrade-y,keepprojectsinthelinuxfilesystemforoptimalperformance.2.installphp8.3andComposerviaondEjsurysppa

彙編phomerceisnotn coresemencomeformostprojectsbutprovidesfuidsfuidsfudsfiidesfulstrolcontrolforperperance,minimalbloat,andspecificoptimization.2.itinvolvesConvertingPhpphpphp'scsourcececececececeodeintoIntoExecutables,允許customizationLikizationLikeStripingunusedunsuptipingunseftimpipingunseftimpippingunsippingsextensenions enablingCpuspucpu

LaunchanEC2instancewithAmazonLinux,appropriateinstancetype,securesecuritygroup,andkeypair.2.InstallLAMPstackbyupdatingpackages,installingApache,MariaDB,PHP,startingservices,securingMySQL,andtestingPHP.3.DecouplecomponentsbymovingdatabasetoRDS,storing

OPcache和JIT是PHP8.0 性能優(yōu)化的核心工具,正確配置可顯著提升執(zhí)行效率;1.啟用OPcache并設(shè)置opcache.enable=1、opcache.memory_consumption=192、opcache.max_accelerated_files=20000、opcache.validate_timestamps=0以實(shí)現(xiàn)opcode緩存并減少解析開銷;2.配置JIT通過opcache.jit_buffer_size=256M和opcache.jit=1254啟用追蹤JIT

ChooseaCI/CDplatformlikeGitHubActionsorGitLabCIfortightversioncontrolintegrationandminimalinfrastructure;2.DefineaconsistentPHPenvironmentusingcontainerizationwithimageslikephp:8.2-cliorcomposer:latestandinstalldependenciesviacomposerinstall--no-inte

verifySystemRequirements and dipendenciesbyConfirmingoScompatiby andInstallingSenlingEssentialLibrariesandBuildTools,使用PackageManagerSlikeSlikeAptoryUmTosImplifyDependentyDependentymanagement.2.Checkphpphpphpphpphpphpphpconfigurationand and conconfigurationAndCompConfigurationAndCompilationErrateRrationRuntirNumentByRunningMinimal./confictecomma
