autopprof
当CPU或内存使用率超过特定阈值时,自动对Go应用程序进行性能分析,这些阈值是相对于Linux容器的CPU配额和内存限制而言的。
一旦启动autopprof,autopprof进程将定期检查Go应用程序的CPU和内存使用率。如果资源使用率超过每种资源类型的指定阈值,autopprof将自动对应用程序进行性能分析(堆或CPU),并将分析报告发送到特定的报告工具(例如Slack)。
CPU性能分析报告示例 | 内存性能分析报告示例 |
---|---|
安装
go get -u github.com/daangn/autopprof
使用方法
如果您的应用程序在非Linux系统上运行,您应该检查
autopprof.Start()
返回的ErrUnsupportedPlatform错误并适当处理。
package main
import (
"errors"
"log"
"github.com/daangn/autopprof"
"github.com/daangn/autopprof/report"
)
func main() {
err := autopprof.Start(autopprof.Option{
CPUThreshold: 0.8, // 默认值:0.75
MemThreshold: 0.8, // 默认值:0.75
Reporter: report.NewSlackReporter(
&report.SlackReporterOption{
App: "您的应用名称",
Token: "您的Token",
Channel: "#报告频道",
},
),
})
if errors.Is(err, autopprof.ErrUnsupportedPlatform) {
// 您可以直接跳过autopprof
log.Println(err)
} else if err != nil {
log.Fatalln(err)
}
defer autopprof.Stop()
// 您的代码在这里
}
您可以通过实现
report.Reporter
接口来创建自定义报告工具。
基准测试
对监视CPU和内存使用率的开销进行基准测试。开销非常小,因此我们不必担心性能下降。
您可以使用以下命令运行基准测试:
./benchmark.sh
BenchmarkLightJob-5 49444164 245.6 ns/op 0 B/op 0 allocs/op
BenchmarkLightJobWithWatchCPUUsage-5 48884026 250.1 ns/op 0 B/op 0 allocs/op
BenchmarkLightJobWithWatchMemUsage-5 49036617 246.3 ns/op 0 B/op 0 allocs/op
BenchmarkHeavyJob-5 59010 203759 ns/op 0 B/op 0 allocs/op
BenchmarkHeavyJobWithWatchCPUUsage-5 58915 204054 ns/op 2 B/op 0 allocs/op
BenchmarkHeavyJobWithWatchMemUsage-5 58850 204764 ns/op 2 B/op 0 allocs/op