webman打包二进制如何能缩小内存

leedom

问题描述

使用php webman build:bin 8.2打包项目以后, 得到的webman.bin文件大小为52.7M;
放到服务器上启动以后共17个进程, 每个进程都是62.5M;总消耗内存1059M;
我想知道如何才能缩小内存占用,毕竟本地的每个进程才占用5-10M左右;

为此你搜索到了哪些方案及不适用的原因

查询了可能有帮助的方法, 排除vendor目录,但是启动不来

286 3 1
3个回答

walkor

忽略或者删除不需要打包的文件

  • leedom 14天前

    老大可以举个例子吗 那些是可以忽略的 我项目中除了代码文件没有其他静态文件或者日志信息

  • nitron 14天前

    比如Cache,一般的包都会包含File.Redis,Memcache,DB之类的存储方式支持,而你的项目只用了Redis,那可以去掉Redis之外的相关文件

xiaopi

主要是打包成二进制需要把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

  • 暂无评论
crazywhalecc

减小体积可分为两部分:减小 micro.sfx 的体积、减小 PHP/PHAR 代码的体积。

减小 micro.sfx 的体积

  1. 在编译静态 PHP、micro 之前,先根据你的项目特点,选择最小扩展集合,如果是生产环境则不需要 require-dev 下的扩展。
  2. 对于 Linux、Windows,你可以使用 --with-upx-pack 来减小生成的 micro.sfx 二进制文件体积(一般情况下 70MB 可缩减至 30MB)。但该方法不会减少运行时的内存占用大小。
  3. 使用较低版本的 PHP,越新版本的 PHP 占用内存越大。

减小 PHAR 代码的体积

你可以使用 box-project/box 来打包,其中会自带压缩功能。同时你可以使用 zlib、去除空白字符等方式压缩 phar 文件大小。

  • 暂无评论
🔝