ceph运营中经常会遇到slow request,简单总结下定位这些问题的方法及思路:
- 先查看集群的cpu负载,相关命令top;
- 再查看磁盘的负责,相关命令iostat、dstat等;
- 再查看网络方面的负载,相关命令netstat;netstat的输出结果里面要关注下Recv-Q Send-Q这两个queue的大小,如果Recv-Q比较大的话说明收的较慢,Send-Q比较大说明发的慢;
- 使用ceph --admin-daemon asok perf dump等命令来分析,输出结果里面需要主要关注wait那一项,比如:
"throttle-objecter_bytes": {
"val": 35652380,
"max": 838860800,
"get_started": 17898,
"get": 2182128,
"get_sum": 4255599802310,
"get_or_fail_fail": 17898,
"get_or_fail_success": 2164230,
"take": 0,
"take_sum": 0,
"put": 1248942,
"put_sum": 4255564149930,
"wait": {
"avgcount": 17897,
"sum": 4899.822857281
}
},
"throttle-objecter_ops": {
"val": 15,
"max": 1024,
"get_started": 0,
"get": 2182128,
"get_sum": 2182128,
"get_or_fail_fail": 0,
"get_or_fail_success": 2182128,
"take": 0,
"take_sum": 0,
"put": 2182113,
"put_sum": 2182113,
"wait": {
"avgcount": 0,
"sum": 0.000000000
}
},
这种情况下可能需要调大objecter_inflight_op_bytes,但需要注意的是,调大这个配置项的话,会导致rgw使用内存增加。