首页 » 网站建设 »

给编译安装的程序“脱衣服”

2019年5月18日 / 25次阅读
云服务器

Linux环境下的strip命令,可以给可执行程序“脱衣服”,就是删除程序的符号表,让程序体积变小,但并不影响程序的运行,程序运行时内存占用变小,只是调试受到影响。谁会在生产环境调试呢!

如果是通过yum或者apt安装的程序,默认已经是脱过衣服的了(stripped)。只有我们自己编译安装的程序,才需要我们手动去strip。可以对可执行程序strip,可以对.so动态链接库strip,但是不能对.a静态库strip。

我尝试了一下用strip给httpd程序脱衣服,为了节省内存的消耗,发现效果还不错。

先用file命令查看一下httpd程序是否已经脱过衣服:

xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ file httpd
httpd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=91bc3c9276d6c15126cab4002a6ab1efdd93b9ae, not stripped

做个备份:

xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ sudo cp httpd httpd_bak

查看httpd程序的大小:

xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ ll -h httpd
-rwxr-xr-x 1 root root 2.3M May 10 16:52 httpd*

脱:xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ sudo strip httpd

再看大小:

xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ ll -h httpd
-rwxr-xr-x 1 root root 626K May 18 17:12 httpd*

从2.3M,缩小到了626K。

最后,别忘了重启Apache。

注意,apachectl只是个脚本,真正有效果的是httpd程序:

xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ file apachectl
apachectl: POSIX shell script, ASCII text executable
xinlin@iZ252v4Z:/usr/local/apache-2.4/bin$ file httpd
httpd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=91b
c3c9276d6c15126cab4002a6ab1efdd93b9ae, stripped

libphp7.so脱衣服的效果更好

libphp7.so这个动态链接库,在没有strip之前,有42M:

$ ll -h lib*
-rwxr-xr-x 1 root root 42M Aug 15 17:42 libphp7.so

strip后,只剩下15M:

$ ll -h lib*
-rwxr-xr-x 1 root root 15M Aug 15 18:03 libphp7.so

针对我自己的wordpress独立博客网站,需要strip的程序有Apache所有程序(/usr/local/apache/bin/*)和所有.so模块(/usr/local/apache/mudoles/*),还有jpeg工具(/usr/local/jpeg/bin/*)和Python3(/usr/local/python3/bin/*)。

下面介绍如何批量strip,其实很简单,使用古老的UNIX的glob匹配规则,$ sudo strip *

生产环境,建议对所有编译安装的程序和使用到的.so库进行strip脱衣服。

本文链接:https://www.maixj.net/wz/strip-httpd-21405

相关文章

留言区

《给编译安装的程序“脱衣服”》有5条留言

  • 麦新杰

    将所有apache的so文件都脱衣服:$ sudo strip mod_*,libphp7.so要手动进行,这个最大。 []

  • 麦新杰

    给libphp7.so也脱了衣服,这个模块最大,43M,脱完之后,还有15M。 []

  • 麦新杰

    strip还可以对动态链接库.so文件进行脱衣服操作,但是不能对静态库.a文件这样做。 []

  • 麦新杰

    在httpd进程数量比较多的情况下,strip给httpd脱衣服后,内存节省效果明显。 []

  • 麦新杰

    strip程序还可以给动态链接库脱衣服,不过我还没有尝试过。 []


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top