编译的Ceph二进制文件过大问题
前言
在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有这个问题
本篇就是记录如何解决这个问题的
打rpm包的方式
用我自己的环境编译的时候发现一个问题,编译出来的rpm包还是很大,开始怀疑是机器的原因,换了一台发现二进制包就很小了,然后查询了很多资料以后,找到了问题所在
在打rpm包的时候可以通过宏变量去控制是否打出一个的debug的包,这个包的作用就是把二进制文件当中包含的debug的相关的全部抽离出来形成一个新的rpm包,而我的环境不知道什么时候在/root/.rpmmacros添加进去了一个
%debug_package %{nil}
搜寻资料后确定就是这个的问题,这个变量添加了以后,在打包的时候就不会进行debug相关包的剥离,然后打出的包就是巨大的,可以这样检查自己的rpmbuild的宏变量信息
[root@host1 ceph-10.2.6]# rpmbuild --showrc|grep debug_package
%{!?__debug_package:
%{?__debug_package:%{__debug_install_post}}
-14: _enable_debug_packages 1
-14: debug_package
%global __debug_package 1
-14: install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}
如果开启了debug包抽离(默认就是开启的),那么rpmbuild在打包的过程中会有个调用
/usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/rpmbuild/BUILD/ceph-10.2.5
这个就是rpmbuild过程中,进行抽离debug信息的操作,也就是缩小二进制的过程,这个并不能直接执行命令,需要用rpmbuild -bb ceph.spec 打包的时候内部自动进行调用的
上面是rpm打包过程中进行的二进制缩小,那么如果我们是源码编译安装时候,如何缩小这个二进制,答案当然是可以的
源码编译安装的方式
./configure 后make生成的二进制文件就在./src下面了
我们以ceph-mon为例进行抽离
这个-O3并没有影响到太多的生成的二进制的大小,--with-debug会有一定的影响,关键还是strip的这个操作
./configure --with-debug CXXFLAGS=-O3 CFLAGS=-O3 CCASFLAGS=-O3
所以默认的就行
如果整体进行安装就使用make install-strip安装即可
[root@host1 ceph-10.2.6]# make install-strip
[root@host1 ceph-10.2.6]# ll /usr/local/bin/ceph-osd
-rwxr-xr-x 1 root root 14266576 Mar 23 17:57 /usr/local/bin/ceph-osd
[root@host1 ceph-10.2.6]# ll /usr/local/bin/ceph-osd -hl
-rwxr-xr-x 1 root root 14M Mar 23 17:57 /usr/local/bin/ceph-osd
[root@host1 ceph-10.2.6]# ll src/ceph-osd -hl
-rwxr-xr-x 1 root root 248M Mar 23 17:54 src/ceph-osd
关键的strip的用法
gcc编译的时候带上-g参数,就是添加了debug的信息
gcc -g -o
分离debug information
[root@host1 ceph-10.2.6]#objcopy --only-keep-debug src/ceph-osd src/ceph-osd.debug
[root@host1 ceph-10.2.6]# ll src/ceph-osd -hl
-rwxr-xr-x 1 root root 248M Mar 23 17:54 src/ceph-osd
[root@host1 ceph-10.2.6]# ll src/ceph-osd.debug -hl
-rwxr-xr-x 1 root root 235M Mar 23 18:08 src/ceph-osd.debug
另外一种方法:
[root@host1 ceph-10.2.6]# cp src/ceph-osd src/ceph-osd.debug
[root@host1 ceph-10.2.6]# strip --only-keep-debug src/ceph-osd.debug
[root@host1 ceph-10.2.6]# ll src/ceph-osd.debug -hl
-rwxr-xr-x 1 root root 235M Mar 23 18:10 src/ceph-osd.debug
从原始文件去掉 debug information
[root@host1 ceph-10.2.6]# objcopy --strip-debug src/ceph-osd
[root@host1 ceph-10.2.6]# ll src/ceph-osd -hl
-rwxr-xr-x 1 root root 18M Mar 23 18:11 src/ceph-osd
objcopy --strip-debug main
另外一种方法:
[root@host1 ceph-10.2.6]# strip --strip-debug --strip-unneeded src/ceph-osd
[root@host1 ceph-10.2.6]# ll src/ceph-osd -hl
-rwxr-xr-x 1 root root 14M Mar 23 18:12 src/ceph-osd
启用debuglink模式
[root@host1 ceph-10.2.6]# objcopy --add-gnu-debuglink src/ceph-osd.debug src/ceph-osd
[root@host1 ceph-10.2.6]# gdb src/ceph-osd
或者
[root@host1 ceph-10.2.6]# gdb -s src/ceph-osd.debug -e src/ceph-osd
总结
二进制包里面包含了debug的一些相关信息,可以通过strip的方式将内部的debug内容清理掉,这样就可以得到比较小的二进制包了
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2017-03-23 |
编译的Ceph二进制文件过大问题的更多相关文章
- 源码编译安装ceph
标签(空格分隔): ceph,ceph安装,ceph运维 centos7系统,aarch64架构下安装最新版本的ceph(13.0.0),x86架构的环境无需修改脚本即可. 一,物理环境: 内核版本: ...
- ubuntu 下编译安装ceph
git clone --recursive https://github.com/ceph/ceph.git cd ceph/ sudo apt-get install libtool sud ...
- Ceph编译安装教程
Ceph官方版本目前支持的纠删码很有限,实验室这块希望能够整合我们自主开发的纠删码BRS(Binary Reed–Solomon encoding),所以需要编译Ceph环境.Ceph官方目前推荐的安 ...
- [翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切
Go vs C#, Part 3: Compiler, Runtime, Type System, Modules, and Everything Else | by Alex Yakunin | S ...
- Ceph 管理和使用
ceph 管理 上次介绍了Ceph集群架构并且搭建了ceph集群,本节介绍ceph用户认证流程和挂载.cephFS.ceph RBD以及ceph mds高可用 1. ceph 授权流程和用户权限管理 ...
- CEPH-2:rbd功能详解及普通用户应用ceph集群
ceph集群rbd使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍rbd存储功能如何灵活的使用,集群背景: $ ceph -s cluster: id: 53717 ...
- 学习 opencv---(6)玩转opencv源代码:生成opencv 工程解决方案与opencv 源码编译
在这篇中,我们探讨如何通过已安装的opencv选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码.我们可以对其源代码进行再 ...
- 比特币Bitcoin源代码安装编译
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 比特币 (货币符号: ฿;英文名:Bitcoin;英文 ...
- 我的复杂的OpenCV编译之路(OpenCV3.1.0 + VS2010 + Win7)
教程:www.cnblogs.com/jliangqiu2016/p/5597501.html 这里主要记载我编译遇到的错误及解决方法. OpenCV3.1软件下载:https://sourcefor ...
随机推荐
- 方格取数(简单版)+小烈送菜(不知道哪来的题)-----------奇怪的dp增加了!
一.方格取数: 设有N*N的方格图(N<=20),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A(1,1) 点出发,可以向下行走,也可以向右走,直到到达右下 ...
- nrm切换npm源
使用 nrm 提供了一些最常用的npm包镜像地址,能够让我们快速的切换安装包时候的服务器地址: 全局安装nrm包 npm i nrm -g 查看当前所有可用的镜像源地址以及当前所使用的镜像源地址 nr ...
- python的deque(双向)队列详解
首先 python的队列有很多种 Python标准库中包含了四种队列,分别是queue.Queue / asyncio.Queue / multiprocessing.Queue / collecti ...
- Hive Sql的窗口函数
date: 2019-08-30 11:02:37 updated: 2019-08-30 14:40:00 Hive Sql的窗口函数 1. count.sum.avg.max.min 以 sum ...
- B树摘要
BTree 以下内容是根据<算法导论>摘要而来,由于国内书籍对B树的定义是以阶来定义,而<算法导论>中使用的是最小度来定义,并且节点中关键字个数也不相同,在翻看网上博客时,产生 ...
- mysql-connector-java各种版本下载地址
mysql-connector-java下载地址: http://mvnrepository.com/artifact/mysql/mysql-connector-java 目录 1.进去后选择自己的 ...
- C语言100题集合005-删除一维数组中所有相同的数,使之只剩一个
系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...
- Flink的DataSource三部曲之三:自定义
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 对于button元素的理解
button有四种常用的类型: submit: 此按钮将表单数据提交给服务器.如果未指定属性,或者属性动态更改为空值或无效值,则此值为默认值. reset: 此按钮重置所有组件为初始值. butt ...
- Tomcat 总结
JavaWeb简介 JavaWeb,是用Java技术来解决相关web互联网领域的技术总和. Web包括:web服务器和web客户端两个部分,有两种软件架构 C/S:客户端/服务器端 B/S:浏 ...