流量回放工具之 GoReplay output-http-stats(HTTP请求统计) 源码分析
Posted zuozewei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流量回放工具之 GoReplay output-http-stats(HTTP请求统计) 源码分析相关的知识,希望对你有一定的参考价值。
前言
GoReplay 可以报告 stats 请求队列的统计信息。通过结合使用--output-http-stats
和选项,默认统计信息每 5 秒输出到给控制台。
参数:–stats --output-http-stats
-output-http-stats //每5秒钟输出一次输出队列的状态
Report http output queue stats to console every N milliseconds. See output-http-stats-ms
-output-http-stats-ms int
Report http output queue stats to console every N milliseconds. default: 5000 (default 5000)
控制台输出是这样的:
其中倒数第二列等同于当前的TPS;
output_http.go
HTTPOutputConfig 统计信息收集
是否收集统计信息,统计输出间隔是多少
if o.config.Stats
o.queueStats = NewGorStat("output_http", o.config.StatsMs)
统计信息收集:
// PluginWrite writes message to this plugin
// 统计信息收集
func (o *HTTPOutput) PluginWrite(msg *Message) (n int, err error)
if !isRequestPayload(msg.Meta)
return len(msg.Data), nil
select
case <-o.stop:
return 0, ErrorStopped
case o.queue <- msg:
if o.config.Stats
o.queueStats.Write(len(o.queue))
if len(o.queue) > 0
// try to start a new worker to serve
if atomic.LoadInt32(&o.activeWorkers) < int32(o.config.WorkersMax)
go o.startWorker()
atomic.AddInt32(&o.activeWorkers, 1)
return len(msg.Data) + len(msg.Meta), nil
gor_stat.go
NewGorStat 统计类:
// NewGorStat统计类
func NewGorStat(statName string, rateMs int) (s *GorStat)
s = new(GorStat)
s.statName = statName
s.rateMs = rateMs
s.latest = 0
s.mean = 0
s.max = 0
s.count = 0
if Settings.Stats
go s.reportStats()
return
写入时做统计:
//写入时做统计
func (s *GorStat) Write(latest int)
if Settings.Stats
if latest > s.max
s.max = latest
if latest != 0
s.mean = ((s.mean * s.count) + latest) / (s.count + 1)
s.latest = latest
s.count = s.count + 1
打印输出,简单的sleep:
//打印输出,简单的sleep
func (s *GorStat) reportStats()
Debug(0, "\\n", s.statName+":latest,mean,max,count,count/second,gcount")
for
Debug(0, "\\n", s)
s.Reset()
time.Sleep(time.Duration(s.rateMs) * time.Millisecond)
字符串类型强转:
//字符串类型转换
func (s *GorStat) String() string
return s.statName + ":" + strconv.Itoa(s.latest) + "," + strconv.Itoa(s.mean) + "," + strconv.Itoa(s.max) + "," + strconv.Itoa(s.count) + "," + strconv.Itoa(s.count/(s.rateMs/1000.0)) + "," + strconv.Itoa(runtime.NumGoroutine())
runtime.NumGoroutine():返回当前存在的协程的数量。
核心调用逻辑图
相关系列:
- 性能工具之常见流量复制工具
- 流量回放工具之 goreplay 安装及初级使用
- 流量回放工具之 goreplay 核心源码分析(VIP)
- 流量回放工具之 GoReplay output-http-stats(HTTP请求统计) 源码分析
- 流量回放工具之GoReplay output-http 源码分析
以上是关于流量回放工具之 GoReplay output-http-stats(HTTP请求统计) 源码分析的主要内容,如果未能解决你的问题,请参考以下文章
流量回放工具之GoReplay input_file 源码分析
流量回放工具之GoReplay input_file 源码分析
流量回放工具之GoReplay input_file 源码分析
流量回放工具之GoReplay output-http 源码分析