2015-06-10 58 views
2

Im使用gocraft/health来检查我的服务的健康状况并确定每个endPoint的指标。但我有一个问题: CPU开始服务5小时后达到100%我不知道为什么。 不使用“gocraft /健康”它只需0.7%的CPU 的没有人Golang:gocraft/health package 100%CPU

var stream = health.NewStream() 

func main() { 
     // Log to stdout! (can also use WriterSink to write to a log file, Syslog, etc) 
    stream.AddSink(&health.WriterSink{os.Stdout}) 

    http.HandleFunc("/api/getVastPlayer", vastPlayer) 
    http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) { 
     http.ServeFile(w, r, r.URL.Path[1:]) 
    }) 

    log.Println("Listening...") 
    panic(http.ListenAndServe(":2001", nil)) 

    } 

之前,这个包工作;

func vastPlayer(w http.ResponseWriter, r *http.Request) { 

    job_1 := stream.NewJob("/api/getVastPlayer") 
     //job_2 := stream.NewJob("/api/html/") 
    sink := health.NewJsonPollingSink(time.Minute*5, time.Minute*5) 
    stream.AddSink(sink) 
     //http://creative.health.spoti.io/health 
    adr:="127.0.0.1:5001" 
    sink.StartServer(adr) 
...... 
...... 
if bol{ 
job_1.Complete(health.Success) 
} 
else{ 
job_1.Complete(health.ValidationError) 
} 
+0

您使用('bugsnag','statsd'等)下沉?你使用'健康'吗? – lnmx

+0

您是否尝试过配置文件以查看CPU的使用情况? – JimB

+2

免责声明:还没有使用过这个库,但没有检查出源代码。您是否在每个传入的http请求中移除您在vastPlayer处理程序中添加的接收器? “stream”对象似乎遍历所有的Sink实例,并且它似乎在每个请求中都添加了一个接收器。 –

回答

0

我认为这是正确的代码:

var stream = health.NewStream() 

func main() { 
     // Log to stdout! (can also use WriterSink to write to a log file, Syslog, etc) 
    stream.AddSink(&health.WriterSink{os.Stdout}) 


    sink := health.NewJsonPollingSink(time.Minute*5, time.Minute*5) 
    stream.AddSink(sink) 
     //http://creative.health.spoti.io/health 
    adr:="127.0.0.1:5001" 
    sink.StartServer(adr) 

    http.HandleFunc("/api/getVastPlayer", vastPlayer) 
    http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) { 
     http.ServeFile(w, r, r.URL.Path[1:]) 
    }) 

    log.Println("Listening...") 
    panic(http.ListenAndServe(":2001", nil)) 

    } 


    func vastPlayer(w http.ResponseWriter, r *http.Request) { 

    job_1 := stream.NewJob("/api/getVastPlayer") 
     //job_2 := stream.NewJob("/api/html/") 


...... 
...... 
if bol{ 
job_1.Complete(health.Success) 
} 
else{ 
job_1.Complete(health.ValidationError) 
} 

} 

PS: https://github.com/gocraft/health#jobs