成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

真實環(huán)境下大內(nèi)存 Go 服務(wù)性能優(yōu)化一例

開發(fā) 后端
有時大家很不理解的現(xiàn)象,明明 call RPC 時設(shè)置了超時時間 timeout, 但是 Grafna 看到 P99 latency 很高,why ???不要猶豫,要么是 timeout 設(shè)置不合理,比如只設(shè)置了單次 socket timeout, 并沒有設(shè)置 circuit breaker 外層超時。參考 你真的了解 timeout 嘛[1]

[[409549]]

本文轉(zhuǎn)載自微信公眾號「董澤潤的技術(shù)筆記」,作者董澤潤 。轉(zhuǎn)載本文請聯(lián)系董澤潤的技術(shù)筆記公眾號。

本文是在上家的 case, 以前很多人在公開大會上拿該案例做分享,所以覺得有印象的同學勿噴,雖然冷飯,但是原創(chuàng),而且干貨十足 ^_^

有時大家很不理解的現(xiàn)象,明明 call RPC 時設(shè)置了超時時間 timeout, 但是 Grafna 看到 P99 latency 很高,why ???

不要猶豫,要么是 timeout 設(shè)置不合理,比如只設(shè)置了單次 socket timeout, 并沒有設(shè)置 circuit breaker 外層超時。參考 你真的了解 timeout 嘛[1]

還有一種情況就是 GC 在搗亂,我們知道 Go GC 使用三色標記法,在 GC 壓力大時用戶態(tài) goroutine 是要 assit 協(xié)助標記對象的,同時 GC STW 時間如果非常高,那么業(yè)務(wù)看起來 latency 就會得比 timeout 大很多

毛刺

該服務(wù)使用 go1.7, 需要加載海量的機器學習詞表,標準的 Go 大內(nèi)存服務(wù),優(yōu)化前表現(xiàn)為 latency 非常高

可以看到最大的己經(jīng)到了 2s

同時查看 GC PauseNS 也非常可怕,基本接近 1s, 服務(wù)處理不可用狀態(tài)

Pprof

如何開啟 pprof 這里就不寫了,網(wǎng)上有很多,大家可以自行查看

  1. go tool pprof bin/dupsdc http://127.0.0.1:6060/debug/pprof/profile 

可以看到 runtime.greyobject, runtime.mallocgc, runtime.heapBitsForObject, runtime.scanobject, runtime.memmove 就些與 GC 相關(guān)的占據(jù)了 CPU 消耗的 TOP 6

  1. go tool pprof -inuse_objects http://127.0.0.1:6060/debug/pprof/heap 

再查看下常駐對像個數(shù),發(fā)現(xiàn) 1kw 常駐內(nèi)存對像(現(xiàn)在來看很小了,不多),這些都是詞表加載的小對像

優(yōu)化對像

詞表主要使用兩種類型,map[int64][]float32 和 map[string]int

讓我們看一下三色標記,本質(zhì)是遞歸掃描所有的指針類型,遍歷確定有沒有被引用

那么問題來了,什么是指針類型呢???所有顯示 *T 以及內(nèi)部有 pointer 的對像都是指針類型,比如 map[int64][]float32 因為值是 slice, 內(nèi)部包含了指針,如果 map 有 1kw 個元素,那么 GC 也要遞歸所描所有 key/value

了解這些,優(yōu)化方法就來了,把 map[int64][]float32 變成 map[int64][6]float32, 這里 slice 變成 6 個元素的數(shù)組,業(yè)務(wù)可以接受

同時把 map[string]int 里的 key 由 string 類型換成 int 枚舉值

優(yōu)化效果

上線后優(yōu)化效果很明顯

可以看到,常駐內(nèi)存對像由 1kw 降低到 200w

同時 cpu pprof 也能看到,排名第一的是 syscall, GC 相關(guān)的己經(jīng)降低很多

查看 Grafana 外圍 IO latency 降低非常明顯。整體優(yōu)化效果不錯

例外

這里也有例外,比如 map 內(nèi)部的實現(xiàn),如果 key/value 值類型大小超過 128 字節(jié),就會退化成指針

  1. // Builds a type representing a Bucket structure for 
  2. // the given map type. This type is not visible to users - 
  3. // we include only enough information to generate a correct GC 
  4. // program for it. 
  5. // Make sure this stays in sync with runtime/map.go. 
  6. const ( 
  7.  BUCKETSIZE  = 8 
  8.  MAXKEYSIZE  = 128 
  9.  MAXELEMSIZE = 128 
  1. // bmap makes the map bucket type given the type of the map. 
  2. func bmap(t *types.Type) *types.Type { 
  3.  if t.MapType().Bucket != nil { 
  4.   return t.MapType().Bucket 
  5.  } 
  6.  
  7.  bucket := types.New(TSTRUCT) 
  8.  keytype := t.Key() 
  9.  elemtype := t.Elem() 
  10.  dowidth(keytype) 
  11.  dowidth(elemtype) 
  12.  if keytype.Width > MAXKEYSIZE { 
  13.   keytype = types.NewPtr(keytype) 
  14.  } 
  15.  if elemtype.Width > MAXELEMSIZE { 
  16.   elemtype = types.NewPtr(elemtype) 
  17.  } 
  18.  
  19.  field := make([]*types.Field, 0, 5) 
  20.   ...... 

思考

Go 每個版本性能都會提升很多,go1.7 1kw 對像服務(wù)壓力非常大,但是我司現(xiàn)在 go1.15 2kw 對像未優(yōu)化也毫無壓力

Go 在吞吐量方面優(yōu)化非常顯著。還是那句話,本文只做為 GC 性能分析參考,不要提前優(yōu)化

另外一方面也說明,Go 三色標記并不適合所有場景,本次分享的大詞表常駐內(nèi)存就是一個典型:

 

很明顯的 old objects, 不需要 GC 每次都掃描,這里羨慕 java 的分代 GC

 

責任編輯:武曉燕 來源: 董澤潤的技術(shù)筆記
相關(guān)推薦

2023-03-08 18:43:50

GPU模型隔離

2011-07-19 10:46:49

Windows 7優(yōu)化

2012-12-24 09:55:15

JavaJava WebJava優(yōu)化

2010-01-08 09:43:23

SQL Server分Analysis Se

2012-09-24 01:01:49

NginxNginx性能Web服務(wù)器

2021-05-19 08:04:11

ASP.Net服務(wù)性原則

2022-05-31 10:51:12

架構(gòu)技術(shù)優(yōu)化

2021-11-18 10:05:35

Java優(yōu)化QPS

2022-11-10 08:16:19

java性能服務(wù)性能

2020-11-10 13:42:07

Go編譯器修復(fù)

2009-11-05 10:45:58

WCF服務(wù)

2017-09-26 14:56:57

MongoDBLBS服務(wù)性能

2020-12-14 15:40:59

Nodefastifyjs

2012-04-26 14:08:52

2020-12-14 08:55:00

Node.js服務(wù)性框架

2021-06-30 10:16:54

微服務(wù)架構(gòu)測試

2009-09-17 16:38:02

WSUS服務(wù)器

2012-05-17 09:26:43

MapReduce

2009-07-16 13:03:05

ibatis resu

2023-10-18 07:32:28

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久网 | 欧美精品影院 | 欧美成人猛片aaaaaaa | 久久综合激情 | 九色.com | 欧美 日韩 亚洲91麻豆精品 | 国产97色 | 亚州中文| 国产中文字幕在线 | 国产高清在线 | 欧美一级欧美三级在线观看 | 日韩成人| 国产欧美日韩一区二区三区在线 | 古典武侠第一页久久777 | 日韩欧美三级电影在线观看 | 欧美日韩久久精品 | 欧美精品一区二区三区在线播放 | 欧美极品一区二区 | 日韩在线观看网站 | 成人免费精品视频 | 欧美日韩一区二区三区四区 | 一区二区三区小视频 | 久久国产成人午夜av影院武则天 | 久久99久久98精品免观看软件 | 国产一区二区精品自拍 | 亚洲第一视频网 | 99这里只有精品视频 | 成人午夜| 久久69精品久久久久久久电影好 | 国产一级毛片精品完整视频版 | 99re6在线视频精品免费 | 久久精品一区二区三区四区 | 欧美日韩亚洲三区 | 成人免费淫片aa视频免费 | 在线观看国产精品一区二区 | 国产这里只有精品 | 亚洲欧美一区二区三区1000 | 精品国产精品三级精品av网址 | 999精品视频 | 久久午夜视频 | 亚洲精品一区二区三区蜜桃久 |