首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
_ "net/http/pprof" // 注册pprof HTTP端点
|
||||
"os"
|
||||
"runtime"
|
||||
"runtime/trace"
|
||||
"time"
|
||||
)
|
||||
|
||||
// simulateAlloc 模拟高频内存分配
|
||||
func simulateAlloc() {
|
||||
for {
|
||||
_ = make([]byte, 1*1024*1024) // 每次分配1MB
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 1. 启动trace追踪,输出到文件
|
||||
f, err := os.Create("gc_trace.out")
|
||||
if err != nil {
|
||||
log.Fatalf("创建trace文件失败: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
trace.Start(f)
|
||||
defer trace.Stop()
|
||||
|
||||
// 2. 启动pprof HTTP服务(端口6060)
|
||||
go func() {
|
||||
log.Println("pprof服务启动: http://localhost:6060/debug/pprof/")
|
||||
log.Fatal(http.ListenAndServe(":6060", nil))
|
||||
}()
|
||||
|
||||
// 3. 模拟内存分配压力
|
||||
go simulateAlloc()
|
||||
|
||||
// 4. 运行30秒,积累诊断数据
|
||||
log.Println("程序将运行30秒,可访问pprof分析GC...")
|
||||
time.Sleep(30 * time.Second)
|
||||
|
||||
// 5. 打印最终GC状态
|
||||
var stats runtime.MemStats
|
||||
runtime.ReadMemStats(&stats)
|
||||
log.Printf("运行结束,GC总次数: %d,累计STW时长: %d ms", stats.NumGC, stats.PauseTotalNs/1e6)
|
||||
}
|
||||
Reference in New Issue
Block a user