nba图文直播吧

admin · 2002-11-01

  

  本文转载自微信公家号「 Go 夜读」,作家 Go 夜读 。转载本文请相干 Go 夜读公家号。

  这日跟群众先容一款及时可视化 Go 圭外运转时数据统计的器械 statsviz

  https://github.com/arl/statsviz

  它的图形化显示看待咱们体会 Go 圭外的 GC 举止,以及内存开支等颇有效!

  操纵也很轻易:

  1. go get github.com/arl/statsviz

  2. 正在你的 http.ServeMux 上注册

  

mux:=http.NewServeMux()statsviz.Register(mux)

 

  或许操纵默许 http 注册:

  

statsviz.RegisterDefault()

 

  假如你的圭外不是一个 http 利用圭外,那末你能够增加如下代码来启动

  

gofunc(){log.Println(http.ListenAndServe("localhost:6060",nil))}()

 

  这段代码,我信赖群众都异常谙习了吧~

  当咱们将启动以后,咱们能够直接正在涉猎器中翻开:

  http://localhost:6060/debug/statsviz/

  

  

  看起来酷炫魁岸上,实在要紧依旧依附于 Go 为咱们供应的 runtime stats

  完全咱们来看看它的少少代码:

   1. websocket handler

//NewWsHandlerreturnsahandlerthatupgradestheHTTPserverconnectiontotheWebSocket//protocolandsendsapplicationstatisticsatthegivenfrequency.////Iftheupgradefails,anHTTPerrorresponseissenttotheclient.funcNewWsHandler(frequencytime.Duration)http.HandlerFunc{returnfunc(whttp.ResponseWriter,r*http.Request){varupgrader=websocket.Upgrader{ReadBufferSize:1024,WriteBufferSize:1024,}ws,err:=upgrader.Upgrade(w,r,nil)iferr!=nil{return}deferws.Close()//Explicitlyignorethiserror.Wedontwanttospamstandardoutput//eachtimetheotherendofthewebsocketconnectioncloses._=sendStats(ws,frequency)}}

2. sendStats

//sendStatsindefinitelysendruntimestatisticsonthewebsocketconnection.funcsendStats(conn*websocket.Conn,frequencytime.Duration)error{tick:=time.NewTicker(frequency)defertick.Stop()var(statsstatserrerror)forrangetick.C{runtime.ReadMemStats(&stats.Mem)stats.NumGoroutine=runtime.NumGoroutine()iferr=conn.WriteJSON(stats);err!=nil{break}}returnerr}

 

  3. 实在这个名目比拟重点的代码是前端 JavaScript 代码:

  

m.pushData=function(ts,allStats){data.times.push(ts);//timestampconstmemStats=allStats.Mem;data.gcfraction.push(memStats.GCCPUFraction);data.goroutines.push(allStats.NumGoroutine);data.heap[idxHeapAlloc].push(memStats.HeapAlloc);data.heap[idxHeapSys].push(memStats.HeapSys);data.heap[idxHeapIdle].push(memStats.HeapIdle);data.heap[idxHeapInuse].push(memStats.HeapInuse);data.heap[idxHeapNextGC].push(memStats.NextGC);data.mspanMCache[idxMSpanMCacheMSpanInUse].push(memStats.MSpanInuse);data.mspanMCache[idxMSpanMCacheMSpanSys].push(memStats.MSpanSys);data.mspanMCache[idxMSpanMSpanMSCacheInUse].push(memStats.MCacheInuse);data.mspanMCache[idxMSpanMSpanMSCacheSys].push(memStats.MCacheSys);data.objects[idxObjectsLive].push(memStats.Mallocs-memStats.Frees);data.objects[idxObjectsLookups].push(memStats.Lookups);data.objects[idxObjectsHeap].push(memStats.HeapObjects);for(leti=0;i<memStats.BySize.length;i++){constsize=memStats.BySize[i];data.bySize[i].push(size.Mallocs-size.Frees);}updateLastGC(memStats);}

 

  衬托成果是经由过程 https://github.com/arl/statsviz/blob/master/static/plotly-basic.min.js 衬托所得。

  Plotly.js 简介:它是一款开源的 JavaScript 图外库,它基于 d3.js 和 stack.gl 。是一个高档次的、描绘性的图外库。plotly.js 带来 20 种图外范例,席卷 3D 图外,统计图外,和 SVG 舆图。

  咱们来看一个官网示例,很酷炫

  

  咱们再来看看 statsviz 正在 GitHub 堆栈上供应的少少 demo 示图谋(便利群众来直观的感想 statsviz):

  

  

  

  

  

  

  假如你曾经用过它或许有其余可视化器械,迎接你来批评。

文章推荐:

2022 年中国人工智能行业发展现状与市场规模分析 市场规模超 3000 亿元

该来的总要来! 切尔西老板将彻底退出英国市场

雷神黑武士四代开售:i7搭RTX3060不到9千元

智慧城市中 5G 和物联网的未来