问题排查工具
本节介绍有助于调试服务程序的工具和API。
内置API
每个采用Cloudpods服务框架的服务都会自动注册一系列的API,用于获得服务的关键运行指标和状态,方便诊断服务程序问题。下面逐一介绍。
内置状态API
请求方法 | API路径 | climc子命令 | 说明 |
---|---|---|---|
GET | /stats | api-stats-show | 对应服务的每个API URL的请求统计,累计请求次数,平均请求延时等 |
GET | /db_stats | db-stats-show | 对应服务的数据库统计,包括最大连接数,活跃连接数等 |
GET | /worker_stats | worker-stats-show | 对应服务内的goroutine池的worker的统计,包括每个worker的活跃数量,队列长度等 |
GET | /version | version-show | 服务的版本号 |
Profile API
Cloudpods服务内置了golang的profile工具(https://pkg.go.dev/net/http/pprof),可以通过调用这些API获得服务的profile数据。
请求方法 | API路径 | 对应pprof方法 |
---|---|---|
GET | /debug/pprof/ | pprof.Index |
GET | /debug/pprof/cmdline | pprof.Cmdline |
GET | /debug/pprof/profile | pprof.Profile |
GET | /debug/pprof/symbol | pprof.Symbol |
POST | /debug/pprof/symbol | pprof.Symbol |
GET | /debug/pprof/trace | pprof.Trace |
从v3.10.4开始,profiling接口默认不启用。如需要开启,请修改对应服务的选项 enable_app_profiling 为 true,并重启服务。
获取调用栈
可以通过给服务进程发送SIGUSR1信号,触发服务进程打印当前调用栈。该方法有助于发现程序Block的函数调用栈,找到阻塞的函数方法。
使用场景 | 可能涉及的服务 |
---|---|
kvm主机创建, 或相关操作 | region, host, host-deployer |
kvm镜像相关 | glance |
vmware主机相关 | region, esxi-agent, host-deployer |
其他主机相关 | region |