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

2017-07-13 23:39:36 +08:00
 alex8
加入--disable-debug --disable-phpdbg 后编译出来的 php php-fpm 仍然有 33M,使用 strip 瘦身后 11M ; opcache.a opcache.so redis nginx 执行了同样的操作后都大幅减少了文件体积;准备在生产环境做同样的操作。
4694 次点击
所在节点    PHP
18 条回复
iyaozhen
2017-07-14 00:05:26 +08:00
额,减小体积有什么用吗?
a282810
2017-07-14 00:09:33 +08:00
额,减少了文件体积能提升多少性能?节省多少内存?
choury
2017-07-14 00:12:47 +08:00
磁盘装不下了吗?
alex8
2017-07-14 00:19:36 +08:00
PHP7.1.7,计算 10000 个素数,原来是 3.5 秒,瘦身后<3.1 秒,内存占用上有少量增加.网上说 rpm 打包前都要用 strip 把符号表删掉的,我试了下 yum 安装的程序和 scl 库里的 rh-mariadb101-mariadb,果然都没有符号表等信息。跟着大方向走,应该没错的。
cctrv
2017-07-14 05:26:39 +08:00
@choury 說錯了,是 3.5 英寸磁碟裝不下了。
kn007
2017-07-14 10:13:31 +08:00
关注一下
kn007
2017-07-14 11:15:03 +08:00
@sunweiqiang8 想问下,具体怎么操作呢?怎么去编译和瘦身,谢谢。
studentht
2017-07-14 13:45:51 +08:00
@sunweiqiang8 可以加上--disable-cgi
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
2017-07-14 16:06:34 +08:00
@kn007
$phpPaht=PHP 安装路径
strip $phpPath/bin/php $phpPath/sbin/php-fpm
alex8
2017-07-14 16:18:39 +08:00
@studentht
--disable-cgi 选项在用,加上后不会编译生成 php-cgi

--disable-debug --disable-phpdbg 最初网上看的,一直在用,PHP7 开始可能此选项已经默认开启了。
kn007
2017-07-14 17:09:53 +08:00
@sunweiqiang8 了解了,谢谢
jhdxr
2017-07-14 23:33:42 +08:00
@studentht 有 enable 的就有对应的 disable,有 with 的就有对应的 without,反过来也一样。但是,如果--help 列出来的是 enable,代表默认就是 disabled,那么你再去加一个--disable 的参数其实并不会造成什么不同。。。
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
2017-07-14 23:58:09 +08:00
@jhdxr 对 PHP5 是有用的,线上环境很多需要编译 PHP5 老版本,安装脚本为了保持对 PHP5 的兼容性保留了这两个参数
alex8
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
2017-07-15 07:36:12 +08:00
@sunweiqiang8 哈,线上版本早已更新。

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

strip 前:平均 2.981

strip 后:平均 2.993

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





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

15 款顶配的 MBP,有米。。
studentht
2017-07-15 12:00:42 +08:00
@jhdxr 我估计是 configure 的帮助没有更新,帮助里说需要手动 enable,但是实际上默认就 enable 了,现在要手动 disable

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/375199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX