Browse Source

pprof configuration support, #382

ffdfgdfg 5 years ago
parent
commit
533dd083fe
9 changed files with 49 additions and 0 deletions
  1. 2 0
      cmd/npc/npc.go
  2. 1 0
      cmd/nps/nps.go
  3. 1 0
      conf/npc.conf
  4. 4 0
      conf/nps.conf
  5. 6 0
      docs/feature.md
  6. 2 0
      docs/server_config.md
  7. 2 0
      docs/use.md
  8. 29 0
      lib/common/pprof.go
  9. 2 0
      lib/config/config.go

+ 2 - 0
cmd/npc/npc.go

@@ -33,6 +33,7 @@ var (
 	localType    = flag.String("local_type", "p2p", "p2p target")
 	logPath      = flag.String("log_path", "", "npc log path")
 	debug        = flag.Bool("debug", true, "npc debug")
+	pprofAddr    = flag.String("pprof", "", "PProf debug addr (ip:port)")
 )
 
 const systemdScript = `[Unit]
@@ -171,6 +172,7 @@ func (p *npc) run() error {
 			logs.Warning("npc: panic serving %v: %v\n%s", err, string(buf))
 		}
 	}()
+	common.InitPProfFromArg(*pprofAddr)
 	//p2p or secret command
 	if *password != "" {
 		commonConfig := new(config.CommonConfig)

+ 1 - 0
cmd/nps/nps.go

@@ -59,6 +59,7 @@ func main() {
 	if err := beego.LoadAppConfig("ini", filepath.Join(common.GetRunPath(), "conf", "nps.conf")); err != nil {
 		log.Fatalln("load config file error", err.Error())
 	}
+	common.InitPProfFromFile()
 	if level = beego.AppConfig.String("log_level"); level == "" {
 		level = "7"
 	}

+ 1 - 0
conf/npc.conf

@@ -12,6 +12,7 @@ web_username=user
 web_password=1234
 crypt=true
 compress=true
+#pprof_addr=0.0.0.0:9999
 
 [health_check_test1]
 health_check_timeout=1

+ 4 - 0
conf/nps.conf

@@ -76,3 +76,7 @@ http_cache_length=100
 
 #get origin ip
 http_add_origin_header=false
+
+#pprof debug options
+#pprof_ip=0.0.0.0
+#pprof_port=9999

+ 6 - 0
docs/feature.md

@@ -245,3 +245,9 @@ LevelInformational->6 LevelDebug->7
 **对于nps:**
 
 在`nps.conf`中设置相关配置即可
+
+## pprof性能分析与调试
+
+可在服务端与客户端配置中开启pprof端口,用于性能分析与调试,注释或留空相应参数为关闭。
+
+默认为关闭状态

+ 2 - 0
docs/server_config.md

@@ -19,3 +19,5 @@ log_level|日志输出级别
 auth_crypt_key | 获取服务端authKey时的aes加密密钥,16位
 p2p_ip| 服务端Ip,使用p2p模式必填
 p2p_port|p2p模式开启的udp端口
+pprof_ip|debug pprof 服务端ip
+pprof_port|debug pprof 端口

+ 2 - 0
docs/use.md

@@ -59,6 +59,7 @@ rate_limit=10000
 flow_limit=100
 remark=test
 max_conn=10
+#pprof_addr=0.0.0.0:9999
 ```
 项 | 含义
 ---|---
@@ -73,6 +74,7 @@ rate_limit|速度限制,可忽略
 flow_limit|流量限制,可忽略
 remark|客户端备注,可忽略
 max_conn|最大连接数,可忽略
+pprof_addr|debug pprof ip:port
 #### 域名代理
 
 ```ini

+ 29 - 0
lib/common/pprof.go

@@ -0,0 +1,29 @@
+package common
+
+import (
+	"github.com/astaxie/beego"
+	"github.com/astaxie/beego/logs"
+	"net/http"
+	_ "net/http/pprof"
+)
+
+func InitPProfFromFile() {
+	ip := beego.AppConfig.String("pprof_ip")
+	p := beego.AppConfig.String("pprof_port")
+	if len(ip) > 0 && len(p) > 0 && IsPort(p) {
+		runPProf(ip + ":" + p)
+	}
+}
+
+func InitPProfFromArg(arg string) {
+	if len(arg) > 0 {
+		runPProf(arg)
+	}
+}
+
+func runPProf(ipPort string) {
+	go func() {
+		_ = http.ListenAndServe(ipPort, nil)
+	}()
+	logs.Info("PProf debug listen on", ipPort)
+}

+ 2 - 0
lib/config/config.go

@@ -145,6 +145,8 @@ func dealCommon(s string) *CommonConfig {
 			c.Client.MaxConn = common.GetIntNoErrByStr(item[1])
 		case "remark":
 			c.Client.Remark = item[1]
+		case "pprof_addr":
+			common.InitPProfFromArg(item[1])
 		}
 	}
 	return c