注意

本文档适用于 Ceph 开发版本。

调试日志

Ceph 的主要调试工具是 dout 和 derr 日志函数。

Dout 有多个日志功能,可以通过配置管理系统在不同的日志级别上设置。因此,可以通过设置 debug_ms 为 10(例如)来仅启用信使的调试功能。

Dout 宏通过将日志消息包含在“if”语句中来避免生成不会被使用的日志消息。这意味着,如果你将调试级别设置为 0,并运行此代码:

dout(20) << "myfoo() = " << myfoo() << dendl;

myfoo() 将不会在这里被调用。

不幸的是,调试日志的性能相对较低。这是因为每个调试输出语句都会获取一个进程范围内的互斥锁,并且每个调试输出语句都会导致一个 write() 系统调用或对 syslog() 的调用。此外,还需要考虑使用 C++ 流的计算开销。因此,为了获得最佳性能,你需要节制地进行日志记录。

有时,启用日志可能会通过改变事件的时间来隐藏竞态条件和其它错误。调试时请记住这一点。

Performance counters

Ceph 守护进程使用性能计数器来跟踪关键统计数据,如固定 inode 的数量。性能计数器本质上是一组整数和浮点数,可以使用 PerfCounters API 来设置、递增和读取。

PerfCounters 对象通常与单个子系统相关联。它包含多个计数器。该对象是线程安全的,因为它受到内部互斥锁的保护。你可以创建多个 PerfCounters 对象。

目前,支持三种类型的性能计数器:u64 计数器、浮点计数器和长时浮点平均计数器。它们分别通过 PerfCountersBuilder::add_u64、PerfCountersBuilder::add_fl 和 PerfCountersBuilder::add_fl_avg 创建。u64 和浮点计数器仅提供一个可以原子地更新、递增和读取的值。浮点平均计数器提供两个值:当前总和和总和被改变的次数。这是为了提供一个长时平均值。

性能计数器信息可以从管理套接字(admin_sock)以 JSON 格式读取。这实现为一个 UNIX 域套接字。Ceph 的 collectd 性能计数器插件展示了如何访问这些信息。另一个示例可以在管理套接字的单元测试中找到。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.