压力测试
使用golang的pprof查看内存泄漏
导入包
"net/http"
_ "net/http/pprof"
开一个端口
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()
访问地址
说明
- allocs:查看过去所有内存分配的样本(历史累计)。
- block:查看导致阻塞同步的堆栈跟踪(历史累计)。
- cmdline: 当前程序的命令行的完整调用路径(从程序一开始运行时决定)。
- goroutine:查看当前所有运行的 goroutines 堆栈跟踪(实时变化)。
- heap:查看活动对象的内存分配情况(实时变化)。
- mutex:查看导致互斥锁的竞争持有者的堆栈跟踪(历史累计)。
- 在这个页面下,点击
profile
和trace
总是会下载文件。
终端使用
go tool pprof http://localhost:6060/debug/pprof/XXX
规范的压力测试过程
- 当第一个连接成功完成了第一个业务就可以发送下一个连接
- 多台电脑同时测试
- 压测3个月,服务器还可以跑,说明程序没有问题
压力测试的目的
压测中发现的问题
- golang在开了大量的G之后,所有G都结束之后,内存不会变回和原来一样,会多出一部分
- pprof查看,发现是runtime.malg占用了内存
- 网上查找说的是大量的G产生后会有内存碎片化的情况
- 也有说是runtime.malg会保留一部分内存来让下一次更快的产生G
No responses yet