目的
控制ceph-osd进程内存占用的方法。
观测内存占用的工具
- top
- gperftool
- ceph日志
top
#top -p ceph-osd-pid
通过这个命令,可以在用户层面观测ceph-osd进程占用的内存大小。
这个方法比较简单,但是不能更具体的知道这些内存具体如何被ceph-osd使用。
gperftool
目前版本默认使用tcmalloc申请释放内存。
这里顺带说一下,tcmalloc能够加速内存的申请、释放,令程序跑得更快。
用到的命令
ceph tell {daemon-type}.{daemon-id} heap start_profiler
ceph tell {daemon-type}.{daemon-id} heap stats
ceph tell {daemon-type}.{daemon-id} heap dump
ceph tell {daemon-type}.{daemon-id} heap stop_profiler
......
具体使用方法,参考相关链接:
http://docs.ceph.com/docs/master/rados/troubleshooting/memory-profiling/
http://goog-perftools.sourceforge.net/doc/heap_profiler.html
通过gperftool,能够清楚的知道在哪段代码,哪个函数上,申请了多少内存。
ceph日志
ceph内部统计内存使用情况,也会打印日志,但是默认的日志等级不会输出相关日志。
问题解决过程
在安装好并熟悉使用gperftool后,通过gperftool的统计信息,就能够描绘出OSD代码中频繁申请内存的代码调用路径。通过这些路径大概知道OSD哪些模块需要使用内存。
- bluestore
- messager
- tcmalloc
了解到这些,再阅读代码,找到了相应的控制参数
bluestore_cache_size
osd_client_message_size_cap
这两个参数最为主要,另外一些参数,用于更精确的内存控制,这里不罗列。
还有是tcmalloc的参数,设置方法在不在ceph里头,而是单独设置
的,通过修改相应的配置文件
cat /etc/sysconfig/ceph
对各项参数的调整,可以通过top来观察,也可以通过ceph本身的日志打印。阅读代码,修改参数不断微调,最后就能理清整个内存控制的脉络,找到合适的控制方案。
网友评论