使用php webman build:bin 8.2
打包項目以后, 得到的webman.bin
文件大小為52.7M
;
放到服務(wù)器上啟動以后共17個進程, 每個進程都是62.5M
;總消耗內(nèi)存1059M
;
我想知道如何才能縮小內(nèi)存占用,畢竟本地的每個進程才占用5-10M
左右;
查詢了可能有幫助的方法, 排除vendor
目錄,但是啟動不來
主要是打包成二進制需要把phar和php.micro.sfx合并到一起
1.phar包的優(yōu)化,可以通過減少不相干的composer包來減少,或者靜態(tài)資源不要打包進去
2.php8.1.micro.sfx的優(yōu)化可以通過減少php擴展來進行
不過二進制打包始終是要把php和代碼都要打包進行的,所以本質(zhì)上不可能通過優(yōu)化使體積驟減,而且由于進程隔離,所以每個進程都需要把php+代碼加載到內(nèi)存中?;旧暇褪嵌M制包有多大,每個進程所占用的內(nèi)存就有多大。
方案:
1.在需求可控的情況下,減少進程數(shù)。比如我們有個項目就使用webman做一個查詢服務(wù),由于數(shù)據(jù)是不怎么變化的,所以提前加載到內(nèi)存中,webman的worker進程不存在IO消耗,所以自然開啟一到兩個進程就可以滿足大并發(fā)查詢服務(wù),每個進程占倆三百M的內(nèi)存。
2.不使用二進制包,使用php靜態(tài)可執(zhí)行文件+phar包的形式,自然每個進程占用的內(nèi)存就下來了,進程中只有php文件,不包括php8.1.micro.sfx
減小體積可分為兩部分:減小 micro.sfx 的體積、減小 PHP/PHAR 代碼的體積。
require-dev
下的擴展。--with-upx-pack
來減小生成的 micro.sfx 二進制文件體積(一般情況下 70MB 可縮減至 30MB)。但該方法不會減少運行時的內(nèi)存占用大小。你可以使用 box-project/box
來打包,其中會自帶壓縮功能。同時你可以使用 zlib、去除空白字符等方式壓縮 phar 文件大小。