mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +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