Ceph调试开发环境搭建
时间:2022-07-22
本文章向大家介绍Ceph调试开发环境搭建,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、相关依赖包安装
1. 安装依赖包
yum install libtool gcc gcc-c++ libuuid-devel keyutils-libs-devel libblkid-devel redhat-lsb libedit-*
yum install libatomic_ops-devel snappy-devel leveldb-devel libudev-devel cryptopp-* fuse-devellibaio-devel xfsprogs-devel automake autoconf boost-devel expat-devel
2.安装调试依赖包
yum install lttng-tools* lttng-ust* lttng*
3.下载源码
wget http://download.ceph.com/tarballs/ceph_12.2.2.orig.tar.gz
二、源码编译
1.解压ceph
tar xvf ceph_12.2.2.orig.tar.gzcd ceph_12.2.2
2. 安装官方依赖包
./install-deps.sh
./run-make-check.sh
3. 开始编译
#编译源码是个漫长的过程,根据机器配置指定。如果是虚拟机可能需要好几个小时。还会出现各种依赖包缺失的情况,非常耗时。
mkdir build
cd build
cmake ..
make -j40 (可以多核编译加快编译速度)
make install
三、测试环境部署
1. 启动开发集群
#此处有一个非常大的坑,折腾了半天。
#必须在build目录下面执行启动脚本,否则一直报缺少libec_jerasure.so,即使配置到系统变量里面也不行。
load dlopen(/libec_jerasure.so): /libec_jerasure.so: cannot open shared object file: No such file or directory
#启动开发集群
cd build
MON=1 MDS=0 OSD=3 ../src/vstart.sh -d -n -x
参数说明:
-m 指出monitor节点的ip地址和默认端口6789;
-n 指出此次部署为全新部署;
-d 指出使用debug模式(便于调试代码);
-r 指出启动radosgw进程;
--mon_num 指出部署的monitor个数;
--osd_num 指出部署的OSD个数;
--mds_num 指出部署的MDS个数;
--bluestore 指出ceph后端存储使用最新的bluestore;
2. 停止开发集群
#启动开发集群
cd build
../src/stop.sh all
3. 运行单元测试
cd build
make check
四、源码分析工具
1. gdb
擅长做精细化的调试。比如查看变量内容,查看内存内容,条件断点等。
2.lttng
ceph自带,兼容性好。适当的时候可以打印关键变量内容
3.systemtap
擅长分析代码流程,打印函数调用关系,不需要修改源码,据说还能分析性能瓶颈
- 庖丁解牛看委托和事件(续)
- ReactiveCocoa中潜在的内存泄漏及解决方案
- 面向对象系列讲解——混合模式
- 火力全开——仿造Baidu简单实现基于Lucene.net的全文检索的功能
- Go实战--实现简单的restful api
- 特殊字体神器-fontmin,秒杀一切工具
- 庖丁解牛——深入解析委托和事件
- RestQL:现代化的 API 开发方式
- 在递归函数中因不正确使用公共变量而形成死循环
- 用R语言做时间序列分析(附数据集和源码)
- Windows Live Writer插入代码vs2010插件
- 分布式队列编程优化篇
- 基于机器学习方法的POI品类推荐算法
- 【Scikit-Learn 中文文档】多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 掘金15W沸点简单分析(二)
- 老生常谈SpringAop日志收集与处理做的工具包
- 线程间通信wait---notify
- Ubuntu安装Oracle Java8
- CentOS7安装Git
- RocketMQ-环境搭建(单master模式-ubuntu版)
- 使用Web.xml配置SpringMvc(同时使用xml配置文件)
- 第七节:Activiti6.0——Task的变量使用
- 第八节:Activiti6.0——启动流程相关
- 第九节:Activiti6.0——ReceiveTask接收信号、中间信号捕获事件和中间消息捕获事件的流程推进
- SpringBoot——全局异常捕获和自定义异常
- RTSP协议视频平台EasyNVR接入到EasyNVS管理平台后无法显示RTMP及RTSP视频流地址问题
- SpringBoot——配置logback日志
- Istio 运维实战系列(2):让人头大的『无头服务』-上
- 第十节:Activiti6.0——四种Job工作的产生与管理