V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alex8
V2EX  ›  PHP

静态编译出来的 PHP 可执行文件体积过大

  •  
  •   alex8 · 2017-07-13 23:39:36 +08:00 · 4825 次点击
    这是一个创建于 2688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    加入--disable-debug --disable-phpdbg 后编译出来的 php php-fpm 仍然有 33M,使用 strip 瘦身后 11M ; opcache.a opcache.so redis nginx 执行了同样的操作后都大幅减少了文件体积;准备在生产环境做同样的操作。
    18 条回复    2017-07-15 12:00:42 +08:00
    iyaozhen
        1
    iyaozhen  
       2017-07-14 00:05:26 +08:00 via Android
    额,减小体积有什么用吗?
    a282810
        2
    a282810  
       2017-07-14 00:09:33 +08:00
    额,减少了文件体积能提升多少性能?节省多少内存?
    choury
        3
    choury  
       2017-07-14 00:12:47 +08:00
    磁盘装不下了吗?
    alex8
        4
    alex8  
    OP
       2017-07-14 00:19:36 +08:00
    PHP7.1.7,计算 10000 个素数,原来是 3.5 秒,瘦身后<3.1 秒,内存占用上有少量增加.网上说 rpm 打包前都要用 strip 把符号表删掉的,我试了下 yum 安装的程序和 scl 库里的 rh-mariadb101-mariadb,果然都没有符号表等信息。跟着大方向走,应该没错的。
    cctrv
        5
    cctrv  
       2017-07-14 05:26:39 +08:00 via iPhone
    @choury 說錯了,是 3.5 英寸磁碟裝不下了。
    kn007
        6
    kn007  
       2017-07-14 10:13:31 +08:00 via Android
    关注一下
    kn007
        7
    kn007  
       2017-07-14 11:15:03 +08:00 via Android
    @sunweiqiang8 想问下,具体怎么操作呢?怎么去编译和瘦身,谢谢。
    studentht
        8
    studentht  
       2017-07-14 13:45:51 +08:00
    @sunweiqiang8 可以加上--disable-cgi
    studentht
        9
    studentht  
       2017-07-14 13:50:39 +08:00
    @sunweiqiang8 比较好奇,你怎么知道可以加`--disable-debug --disable-phpdbg`,php70 的 configure 帮助给出来的只有下面的选项
    `
    --enable-phpdbg Build phpdbg
    --enable-phpdbg-webhelper Build phpdbg web SAPI support
    --enable-phpdbg-debug Build phpdbg in debug mode

    --enable-debug Compile with debugging symbols
    `
    alex8
        10
    alex8  
    OP
       2017-07-14 16:06:34 +08:00
    @kn007
    $phpPaht=PHP 安装路径
    strip $phpPath/bin/php $phpPath/sbin/php-fpm
    alex8
        11
    alex8  
    OP
       2017-07-14 16:18:39 +08:00
    @studentht
    --disable-cgi 选项在用,加上后不会编译生成 php-cgi

    --disable-debug --disable-phpdbg 最初网上看的,一直在用,PHP7 开始可能此选项已经默认开启了。
    kn007
        12
    kn007  
       2017-07-14 17:09:53 +08:00 via Android
    @sunweiqiang8 了解了,谢谢
    jhdxr
        13
    jhdxr  
       2017-07-14 23:33:42 +08:00
    @studentht 有 enable 的就有对应的 disable,有 with 的就有对应的 without,反过来也一样。但是,如果--help 列出来的是 enable,代表默认就是 disabled,那么你再去加一个--disable 的参数其实并不会造成什么不同。。。
    kn007
        14
    kn007  
       2017-07-14 23:45:57 +08:00
    我测试了下,strip 后体积是小了( 41MB vs 8.8MB ),但性能没提升。

    求 10000 个素数,未 strip 和 strip 后,平均都是 0.00365。测试 100 次。

    鸟哥的 bench、micro_bench、mandelbrot,测试后,结果也相差不多。
    alex8
        15
    alex8  
    OP
       2017-07-14 23:58:09 +08:00
    @jhdxr 对 PHP5 是有用的,线上环境很多需要编译 PHP5 老版本,安装脚本为了保持对 PHP5 的兼容性保留了这两个参数
    alex8
        16
    alex8  
    OP
       2017-07-15 00:11:10 +08:00
    @kn007
    你的好快啊,确定是 10000 个素数,不是 10000 以内的素数? 15 款顶配的 MBP,虚拟的 CentOS7, PHP7.1.7,刚跑了会,平均 2.85 秒( laravel 控制器中运行)。
    这是我的测试代码,难以理解的是写在 Laravel 的控制器中反而比单个文件快。
    <?php
    header("Content-type: text/plain");
    $start = microtime(true);
    $count = 0;
    $prime = function($num) {
    $t = ceil($num / 3);
    for ($i = 2; $i <= $t; $i++) {
    if ($num % $i == 0) {
    return false;
    }
    }
    return true;
    };
    for ($num = 2 ; $count < 10000; $num++) {
    if ($prime($num)) {
    $count++;
    }
    }
    $time = number_format(microtime(true) - $start, 5);
    echo "time:$time\n";
    kn007
        17
    kn007  
       2017-07-15 07:36:12 +08:00
    @sunweiqiang8 哈,线上版本早已更新。

    看来是我用错测试代码。最新的结果是

    strip 前:平均 2.981

    strip 后:平均 2.993

    直接 shell php 的运行结果。速度反而慢了,strip 后。。囧





    话说是不是用 Laravel,会 opcode cache,所以快了?

    15 款顶配的 MBP,有米。。
    studentht
        18
    studentht  
       2017-07-15 12:00:42 +08:00
    @jhdxr 我估计是 configure 的帮助没有更新,帮助里说需要手动 enable,但是实际上默认就 enable 了,现在要手动 disable
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   963 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.