 Go性能优化概览-曹春晖hash 成本太⾼ -> 使⽤ cityhash,murmurhash • 其它应⽤逻辑 -> case by case 分析了 • GC 使⽤ CPU 过⾼ • 减少堆上对象分配 • sync.Pool 进⾏堆对象重⽤ • Map -> slice • 指针 -> ⾮指针对象 • 多个⼩对象 -> 合并为⼀个⼤对象 • offheap • 降低 GC 频率 • 修改 GOGC 减少 goroutine 的创建与销毁 • 控制最⼤ goroutine 数量 总结⼀下 • 内存使⽤过⾼ • 堆内存占⽤内存空间过⾼ • sync.Pool 对象复⽤ • 为不同⼤⼩的对象提供不同⼤⼩ level 的 sync.Pool • 松散的对象调整为紧凑的对象,如:map -> slice,查找时间复杂度增加,但内存使⽤ 降低 • offheap • 邪道:动态调整 GOGC0 码力 | 40 页 | 8.69 MB | 1 年前3 Go性能优化概览-曹春晖hash 成本太⾼ -> 使⽤ cityhash,murmurhash • 其它应⽤逻辑 -> case by case 分析了 • GC 使⽤ CPU 过⾼ • 减少堆上对象分配 • sync.Pool 进⾏堆对象重⽤ • Map -> slice • 指针 -> ⾮指针对象 • 多个⼩对象 -> 合并为⼀个⼤对象 • offheap • 降低 GC 频率 • 修改 GOGC 减少 goroutine 的创建与销毁 • 控制最⼤ goroutine 数量 总结⼀下 • 内存使⽤过⾼ • 堆内存占⽤内存空间过⾼ • sync.Pool 对象复⽤ • 为不同⼤⼩的对象提供不同⼤⼩ level 的 sync.Pool • 松散的对象调整为紧凑的对象,如:map -> slice,查找时间复杂度增加,但内存使⽤ 降低 • offheap • 邪道:动态调整 GOGC0 码力 | 40 页 | 8.69 MB | 1 年前3
 1.2 Go in TiDBtps:28932.386438 After: insert test data finished ... elapse : 28.859153s tps:34651.051825 sync.Pool • Thread safe • Reuse objects to relieve pressure on the GC. • Case study: bytes pool Test on0 码力 | 27 页 | 935.47 KB | 6 月前3 1.2 Go in TiDBtps:28932.386438 After: insert test data finished ... elapse : 28.859153s tps:34651.051825 sync.Pool • Thread safe • Reuse objects to relieve pressure on the GC. • Case study: bytes pool Test on0 码力 | 27 页 | 935.47 KB | 6 月前3
 2.2.6 字节跳动在 Go 网络库上的实践write growth copy copy will data race 优化 Buffer 设计 – LinkBuffer 设计 1. 链表解决 growth copy 2. sync.Pool 复用节点 3. atomic 访问 size 解决 data race Q: 为什么业界没使用 LinkBuffer ? A: 无法使用 Read/Write API Read([]byte)0 码力 | 42 页 | 3.19 MB | 1 年前3 2.2.6 字节跳动在 Go 网络库上的实践write growth copy copy will data race 优化 Buffer 设计 – LinkBuffer 设计 1. 链表解决 growth copy 2. sync.Pool 复用节点 3. atomic 访问 size 解决 data race Q: 为什么业界没使用 LinkBuffer ? A: 无法使用 Read/Write API Read([]byte)0 码力 | 42 页 | 3.19 MB | 1 年前3
 蚂蚁金服ServiceMesh数据平面 SOFAMosn深层揭秘的大内存分配顺序 mheap -> arena ØGC 优化 ü避免入堆 ü减少内存 copy ü内存使用整体化,降低 scanobject 成本 ü使用 GC 亲和的数据结构 ü适度使用 sync.Pool ü…IO 4 Ø优化 ü尽可能多读,同时减少SetReadDeadline频繁调用,实现见 IOBuffer.ReadOnce ü适度 buffer 写数据,频繁写系统 IO 会造成写效率下降0 码力 | 44 页 | 4.51 MB | 6 月前3 蚂蚁金服ServiceMesh数据平面 SOFAMosn深层揭秘的大内存分配顺序 mheap -> arena ØGC 优化 ü避免入堆 ü减少内存 copy ü内存使用整体化,降低 scanobject 成本 ü使用 GC 亲和的数据结构 ü适度使用 sync.Pool ü…IO 4 Ø优化 ü尽可能多读,同时减少SetReadDeadline频繁调用,实现见 IOBuffer.ReadOnce ü适度 buffer 写数据,频繁写系统 IO 会造成写效率下降0 码力 | 44 页 | 4.51 MB | 6 月前3
 2022年美团技术年货 合辑秒,已分配指针对象的火焰图。可以看出已经分配了 4 千 多万个对象,GC 压力可想而知。关于 GC,我们了解到如下两种优化方案: 后端 < 1055 1. 池化:Go 的标准库中提供了一个 sync.Pool 对象池,可通过复用对象来减少 对象分配,从而降低 GC 压力。 2. 手动管理内存:通过系统调用 mmap 直接向 OS 申请内存,绕过 GC,实现 内存的手动管理。 但是,方案 20 码力 | 1356 页 | 45.90 MB | 1 年前3 2022年美团技术年货 合辑秒,已分配指针对象的火焰图。可以看出已经分配了 4 千 多万个对象,GC 压力可想而知。关于 GC,我们了解到如下两种优化方案: 后端 < 1055 1. 池化:Go 的标准库中提供了一个 sync.Pool 对象池,可通过复用对象来减少 对象分配,从而降低 GC 压力。 2. 手动管理内存:通过系统调用 mmap 直接向 OS 申请内存,绕过 GC,实现 内存的手动管理。 但是,方案 20 码力 | 1356 页 | 45.90 MB | 1 年前3
共 5 条
- 1













