使用php webman build:bin 8.2打包项目以后, 得到的webman.bin文件大小为52.7M; 放到服务器上启动以后共17个进程, 每个进程都是62.5M;总消耗内存1059M; 我想知道如何才能缩小内存占用,毕竟本地的每个进程才占用5-10M左右;
php webman build:bin 8.2
webman.bin
52.7M
62.5M
1059M
5-10M
查询了可能有帮助的方法, 排除vendor目录,但是启动不来
vendor
忽略或者删除不需要打包的文件
老大可以举个例子吗 那些是可以忽略的 我项目中除了代码文件没有其他静态文件或者日志信息
比如Cache,一般的包都会包含File.Redis,Memcache,DB之类的存储方式支持,而你的项目只用了Redis,那可以去掉Redis之外的相关文件
主要是打包成二进制需要把phar和php.micro.sfx合并到一起 1.phar包的优化,可以通过减少不相干的composer包来减少,或者静态资源不要打包进去 2.php8.1.micro.sfx的优化可以通过减少php扩展来进行 不过二进制打包始终是要把php和代码都要打包进行的,所以本质上不可能通过优化使体积骤减,而且由于进程隔离,所以每个进程都需要把php+代码加载到内存中。基本上就是二进制包有多大,每个进程所占用的内存就有多大。
方案: 1.在需求可控的情况下,减少进程数。比如我们有个项目就使用webman做一个查询服务,由于数据是不怎么变化的,所以提前加载到内存中,webman的worker进程不存在IO消耗,所以自然开启一到两个进程就可以满足大并发查询服务,每个进程占俩三百M的内存。 2.不使用二进制包,使用php静态可执行文件+phar包的形式,自然每个进程占用的内存就下来了,进程中只有php文件,不包括php8.1.micro.sfx
减小体积可分为两部分:减小 micro.sfx 的体积、减小 PHP/PHAR 代码的体积。
require-dev
--with-upx-pack
你可以使用 box-project/box 来打包,其中会自带压缩功能。同时你可以使用 zlib、去除空白字符等方式压缩 phar 文件大小。
box-project/box
忽略或者删除不需要打包的文件
老大可以举个例子吗 那些是可以忽略的 我项目中除了代码文件没有其他静态文件或者日志信息
比如Cache,一般的包都会包含File.Redis,Memcache,DB之类的存储方式支持,而你的项目只用了Redis,那可以去掉Redis之外的相关文件
主要是打包成二进制需要把phar和php.micro.sfx合并到一起
1.phar包的优化,可以通过减少不相干的composer包来减少,或者静态资源不要打包进去
2.php8.1.micro.sfx的优化可以通过减少php扩展来进行
不过二进制打包始终是要把php和代码都要打包进行的,所以本质上不可能通过优化使体积骤减,而且由于进程隔离,所以每个进程都需要把php+代码加载到内存中。基本上就是二进制包有多大,每个进程所占用的内存就有多大。
方案:
1.在需求可控的情况下,减少进程数。比如我们有个项目就使用webman做一个查询服务,由于数据是不怎么变化的,所以提前加载到内存中,webman的worker进程不存在IO消耗,所以自然开启一到两个进程就可以满足大并发查询服务,每个进程占俩三百M的内存。
2.不使用二进制包,使用php静态可执行文件+phar包的形式,自然每个进程占用的内存就下来了,进程中只有php文件,不包括php8.1.micro.sfx
减小体积可分为两部分:减小 micro.sfx 的体积、减小 PHP/PHAR 代码的体积。
减小 micro.sfx 的体积
require-dev
下的扩展。--with-upx-pack
来减小生成的 micro.sfx 二进制文件体积(一般情况下 70MB 可缩减至 30MB)。但该方法不会减少运行时的内存占用大小。减小 PHAR 代码的体积
你可以使用
box-project/box
来打包,其中会自带压缩功能。同时你可以使用 zlib、去除空白字符等方式压缩 phar 文件大小。