本文主要在windows环境与linux环境下,分别对多个go日志库进行串行与并行压力测试,测试目的主要时对比各个库的内存分配占用与写日志效率。
压测对象
压测环境
压测结果
压测数据如下
日志记录器 | 核心数 | 操作次数 | 每操作耗时(ns) | 内存分配(B) | 分配次数 |
---|---|---|---|---|---|
Serial_NativeLog | 4 | 598,425 | 4,095 | 248 | 2 |
Serial_NativeLog | 8 | 589,526 | 4,272 | 248 | 2 |
Serial_Zap | 4 | 485,172 | 4,943 | 352 | 6 |
Serial_Zap | 8 | 491,910 | 4,851 | 353 | 6 |
Serial_GoLogger | 4 | 527,454 | 3,987 | 80 | 2 |
Serial_GoLogger | 8 | 574,303 | 4,083 | 80 | 2 |
Serial_Slog | 4 | 498,553 | 4,952 | 344 | 6 |
Serial_Slog | 8 | 466,743 | 4,942 | 344 | 6 |
Serial_SlogAndGoLogger | 4 | 443,798 | 5,149 | 344 | 6 |
Serial_SlogAndGoLogger | 8 | 460,762 | 5,208 | 344 | 6 |
Parallel_NativeLog | 4 | 424,681 | 5,176 | 248 | 2 |
Parallel_NativeLog | 8 | 479,988 | 5,045 | 248 | 2 |
Parallel_Zap | 4 | 341,937 | 6,736 | 352 | 6 |
Parallel_Zap | 8 | 353,247 | 6,517 | 353 | 6 |
Parallel_GoLogger | 4 | 4,240,896 | 549 | 163 | 3 |
Parallel_GoLogger | 8 | 4,441,388 | 550 | 128 | 3 |
Parallel_Slog | 4 | 477,423 | 4,972 | 344 | 6 |
Parallel_Slog | 8 | 447,642 | 5,064 | 344 | 6 |
Parallel_SlogAndGoLogger | 4 | 424,813 | 5,242 | 345 | 6 |
Parallel_SlogAndGoLogger | 8 | 425,070 | 5,215 | 345 | 6 |
库 | 测试类型 | 并发数 | 平均时间(ns/op) | 内存分配(B/op) | 内存分配次数(allocs/op) |
---|---|---|---|---|---|
NativeLog | Serial | 4 | 3956 | 248 | 2 |
8 | 4044 | 248 | 2 | ||
Parallel | 4 | 4916 | 248 | 2 | |
8 | 5026 | 248 | 2 | ||
Zap | Serial | 4 | 4815 | 352 | 6 |
8 | 4933 | 353 | 6 | ||
Parallel | 4 | 6773 | 352 | 6 | |
8 | 6610 | 353 | 6 | ||
GoLogger | Serial | 4 | 4010 | 80 | 2 |
8 | 3966 | 80 | 2 | ||
Parallel | 4 | 568 | 165 | 3 | |
8 | 576 | 128 | 3 | ||
slog | Serial | 4 | 4914 | 344 | 6 |
8 | 4921 | 344 | 6 | ||
Parallel | 4 | 4952 | 344 | 6 | |
8 | 5075 | 344 | 6 | ||
slog + GoLogger | Serial | 4 | 5058 | 344 | 6 |
8 | 5046 | 344 | 6 | ||
Parallel | 4 | 5150 | 345 | 6 | |
8 | 5250 | 345 | 6 |
go-logger
的性能显著优于其他日志库,尤其是在处理大量并发日志写入时。以下是根据基准测试数据,分析的各个日志库的性能:库名 | 并发性能(ns/op) | 内存分配(B/op) | 内存分配次数(allocs/op) | 备注 |
---|---|---|---|---|
NativeLog | 4916 - 5026 | 248 | 2 | Go自带日志库,性能中等 |
Zap | 6610 - 6773 | 352 | 6 | 性能一般,适合常规场景 |
GoLogger | 568 - 576 | 165 | 3 | 极高性能,适合高并发场景 |
Slog | 4952 - 5075 | 344 | 6 | 性能一般,适合常规使用 |
SlogAndGoLogger | 5150 - 5250 | 345 | 6 | 与单独使用Slog类似 |
压测对象
压测环境
压测结果
说明:由于在虚拟机中压测,所有库的写数据性能都相应有所下降。该压测数据主要作用在于相对性能数据的比较。
测试类型 | 库名 | 操作次数 | 平均耗时 (ns/op) | 内存分配 (B/op) | 内存分配次数 (allocs/op) | 说明 |
---|---|---|---|---|---|---|
串行日志记录 | NativeLog | 22579 | 151340 | 248 | 2 | go自带log库 |
Zap | 24124 | 152754 | 352 | 6 | zap | |
GoLogger | 25770 | 148053 | 80 | 2 | go-logger | |
Slog | 23752 | 150566 | 344 | 6 | slog | |
SlogAndGoLogger | 21273 | 151930 | 344 | 6 | slog+go-logger | |
并行日志记录 | NativeLog | 20794 | 170186 | 248 | 2 | go自带log库 |
Zap | 20793 | 170915 | 353 | 6 | zap | |
GoLogger | 743540 | 4845 | 128 | 3 | go-logger | |
Slog | 20175 | 171776 | 345 | 6 | slog | |
SlogAndGoLogger | 21015 | 172507 | 369 | 6 | slog+go-logger |
go-logger 在Linux环境中,相对来说,有更好的性能表现。内存分配情况在windows环境与Linux环境是一致的。高并发场景中,在Linux环境,go-logger的性能是slog的30-40倍。而在windows环境,则是slog的10倍。
在高并发场景中,如果对性能要求较高的情况下,推荐使用 go-logger