66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
|
package pprof
|
|||
|
|
|||
|
import (
|
|||
|
"expvar"
|
|||
|
_ "expvar"
|
|||
|
"net/http"
|
|||
|
_ "net/http/pprof"
|
|||
|
"sync"
|
|||
|
)
|
|||
|
|
|||
|
var _expvars_ints = make(map[string]*expvar.Int)
|
|||
|
var _expvars_floats = make(map[string]*expvar.Float)
|
|||
|
var _expvars_strings = make(map[string]*expvar.String)
|
|||
|
|
|||
|
var _expvars_ints_lock = &sync.RWMutex{}
|
|||
|
var _expvars_floats_lock = &sync.RWMutex{}
|
|||
|
var _expvars_strings_lock = &sync.RWMutex{}
|
|||
|
|
|||
|
// StartCommonProfileMonitor 启动公共性能分析http服务器
|
|||
|
// 接口1:http://ip:port/debug/vars返回内存监控的json数据
|
|||
|
// 接口2:http://ip:port/debug/pprof/xxx
|
|||
|
func StartCommonProfileMonitor(accessHttpAddr string) {
|
|||
|
go func() {
|
|||
|
http.ListenAndServe(accessHttpAddr, nil)
|
|||
|
}()
|
|||
|
}
|
|||
|
|
|||
|
// AddCommonProfileExpVarInt 添加/debug/vars返回的json变量,保证全局名字唯一
|
|||
|
func AddCommonProfileExpVarInt(name string, delta int64) {
|
|||
|
_expvars_ints_lock.Lock()
|
|||
|
defer _expvars_ints_lock.Unlock()
|
|||
|
if data, find := _expvars_ints[name]; find {
|
|||
|
data.Add(delta)
|
|||
|
} else {
|
|||
|
v := expvar.NewInt(name)
|
|||
|
v.Add(delta)
|
|||
|
_expvars_ints[name] = v
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// AddCommonProfileExpVarFloat 添加/debug/vars返回的json变量,保证全局名字唯一
|
|||
|
func AddCommonProfileExpVarFloat(name string, delta float64) {
|
|||
|
_expvars_floats_lock.Lock()
|
|||
|
defer _expvars_floats_lock.Unlock()
|
|||
|
if data, find := _expvars_floats[name]; find {
|
|||
|
data.Add(delta)
|
|||
|
} else {
|
|||
|
v := expvar.NewFloat(name)
|
|||
|
v.Add(delta)
|
|||
|
_expvars_floats[name] = v
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// AddCommonProfileExpVarInt 添加/debug/vars返回的json变量,保证全局名字唯一
|
|||
|
func AddCommonProfileExpVarString(name string, cur string) {
|
|||
|
_expvars_strings_lock.Lock()
|
|||
|
defer _expvars_strings_lock.Unlock()
|
|||
|
if data, find := _expvars_strings[name]; find {
|
|||
|
data.Set(cur)
|
|||
|
} else {
|
|||
|
v := expvar.NewString(name)
|
|||
|
v.Set(cur)
|
|||
|
_expvars_strings[name] = v
|
|||
|
}
|
|||
|
}
|