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使用內存增加。