mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 15:00:26 +08:00
优化访问日志内存使用
This commit is contained in:
@@ -67,7 +67,8 @@ func (this *HTTPAccessLogQueue) Push(accessLog *pb.HTTPAccessLog) {
|
|||||||
|
|
||||||
// 上传访问日志
|
// 上传访问日志
|
||||||
func (this *HTTPAccessLogQueue) loop() error {
|
func (this *HTTPAccessLogQueue) loop() error {
|
||||||
var accessLogs = []*pb.HTTPAccessLog{}
|
const maxLen = 2000
|
||||||
|
var accessLogs = make([]*pb.HTTPAccessLog, 0, maxLen)
|
||||||
var count = 0
|
var count = 0
|
||||||
|
|
||||||
Loop:
|
Loop:
|
||||||
@@ -78,7 +79,7 @@ Loop:
|
|||||||
count++
|
count++
|
||||||
|
|
||||||
// 每次只提交 N 条访问日志,防止网络拥堵
|
// 每次只提交 N 条访问日志,防止网络拥堵
|
||||||
if count > 2000 {
|
if count >= maxLen {
|
||||||
break Loop
|
break Loop
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -178,3 +178,55 @@ func BenchmarkHTTPAccessLogQueue_ToValidUTF8String(b *testing.B) {
|
|||||||
_ = strings.ToValidUTF8(s, "")
|
_ = strings.ToValidUTF8(s, "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkAppendAccessLogs(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
|
||||||
|
var stat1 = &runtime.MemStats{}
|
||||||
|
runtime.ReadMemStats(stat1)
|
||||||
|
|
||||||
|
const count = 20000
|
||||||
|
var a = make([]*pb.HTTPAccessLog, 0, count)
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
a = append(a, &pb.HTTPAccessLog{
|
||||||
|
RequestPath: "/hello/world",
|
||||||
|
Host: "example.com",
|
||||||
|
RequestBody: bytes.Repeat([]byte{'A'}, 1024),
|
||||||
|
})
|
||||||
|
if len(a) == count {
|
||||||
|
a = make([]*pb.HTTPAccessLog, 0, count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = len(a)
|
||||||
|
|
||||||
|
var stat2 = &runtime.MemStats{}
|
||||||
|
runtime.ReadMemStats(stat2)
|
||||||
|
b.Log((stat2.TotalAlloc-stat1.TotalAlloc)>>20, "MB")
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkAppendAccessLogs2(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
|
||||||
|
var stat1 = &runtime.MemStats{}
|
||||||
|
runtime.ReadMemStats(stat1)
|
||||||
|
|
||||||
|
const count = 20000
|
||||||
|
var a = []*pb.HTTPAccessLog{}
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
a = append(a, &pb.HTTPAccessLog{
|
||||||
|
RequestPath: "/hello/world",
|
||||||
|
Host: "example.com",
|
||||||
|
RequestBody: bytes.Repeat([]byte{'A'}, 1024),
|
||||||
|
})
|
||||||
|
if len(a) == count {
|
||||||
|
a = []*pb.HTTPAccessLog{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = len(a)
|
||||||
|
|
||||||
|
var stat2 = &runtime.MemStats{}
|
||||||
|
runtime.ReadMemStats(stat2)
|
||||||
|
b.Log((stat2.TotalAlloc-stat1.TotalAlloc)>>20, "MB")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user