精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

怎樣優(yōu)化一個Go服務(wù)以減少40%的CPU使用率?

新聞 前端
通過分析 Go 解析服務(wù),我們能定位出問題區(qū)域,更好地理解我們的服務(wù),并決定在哪里(如果有的話)投入時(shí)間來做改進(jìn)工作。

 [[329811]]

通過優(yōu)化一個 Go 服務(wù),Coralogix 公司的工程師成功減少了 40% 的 CPU 使用率。

10 年前,谷歌遇到一個由 C++ 編譯時(shí)間過長造成的嚴(yán)重瓶頸,他們需要全新的解決方案。為應(yīng)對這一挑戰(zhàn),谷歌工程師創(chuàng)建了一種叫 Go(又名 Golang)的新編程語言。Go 語言借鑒了 C++ 的優(yōu)點(diǎn)(比如其性能和安全特性),同時(shí)結(jié)合了 Python 的開發(fā)速度,這讓其能快速使用多個核心,實(shí)現(xiàn)并發(fā)計(jì)算。

在 Coralogix,我們解析客戶日志來為它們提供相應(yīng)的實(shí)時(shí)分析、警報(bào)和元數(shù)據(jù)等。為做到這一點(diǎn),解析階段必須非常快,但解析階段卻又非常復(fù)雜,并需要為每一個日志行服務(wù)加載大量規(guī)則。這是我們覺得采用 Golang 的原因之一。

這項(xiàng)新服務(wù)全天候運(yùn)行在我們的生產(chǎn)環(huán)境中。雖然結(jié)果很不錯,但是它仍然需要運(yùn)行在高性能的機(jī)器上。這個 Go 服務(wù)運(yùn)行在一臺 8 核 CPU 和 36GB 內(nèi)存的 AWS m4.2xlarge 實(shí)例上,每天解析超過數(shù)百億的日志。這個階段,一切運(yùn)行正常,可以將就,但這不是我們的風(fēng)格,我們希望用更少的 AWS 實(shí)例來提供更多的功能,比如性能等。為實(shí)現(xiàn)這一目標(biāo),我們需要了解瓶頸的本質(zhì),以及如何能減少或完全消除它們。

1. 問題分析

我們決定在服務(wù)上運(yùn)行一些性能分析,并檢查是什么導(dǎo)致 CPU 的高消耗,看看是否可以做些優(yōu)化工作。

升級版本

首先,我們將 GO 升級到最新的穩(wěn)定版本(軟件生命周期中的關(guān)鍵一步)。此前,我們的版本是 1.12.4,現(xiàn)在用的是 1.13.8。

根據(jù)官方文檔,1.13 版本在 runtime library 和一些對內(nèi)存使用有很大影響的組件進(jìn)行了重大改進(jìn)。不管怎么說,使用最新的穩(wěn)定版本很有意義,并且為我們節(jié)省了很多工作。

https://golang.org/doc/devel/release.html

因此,內(nèi)存消耗也從 800MB 左右優(yōu)化到 180MB 左右。

分析開始

其次,為更好地理解我們的工作流程,并了解我們在哪里花費(fèi)時(shí)間和資源,我們開始進(jìn)行分析。

分析不同的服務(wù)和編程語言可能看起來非常復(fù)雜并令人生畏,但是在 Go 中,它實(shí)際上非常簡單,僅用幾個命令就可以實(shí)現(xiàn)。Go 有一個叫”pprof”的專門工具,可以通過監(jiān)聽路由(默認(rèn)端口為 6060)在應(yīng)用程序中啟用該工具,并使用 Go 包來管理 HTTP 連接

  1. import _ "net/http/pprof" 

然后,在主函數(shù)或者路由包中啟用如下操作:

  1. go func() { 
  2.     log.Println(http.ListenAndServe("localhost:6060",nil)) 
  3. }() 

現(xiàn)在我們可以啟動服務(wù)并連接到

  1. Http://localhost:6060/debug/pprof 

完整的 Go 文檔可以參閱此處。

https://golang.org/pkg/net/http/pprof

pprof 的默認(rèn)配置是每隔 30 秒對 CPU 使用率進(jìn)行采樣。我們可以調(diào)整一些配置從而實(shí)現(xiàn)對 CPU 使用率、heap usage 等參數(shù)的采樣。我們主要關(guān)注的是 CPU 的使用情況,因此在生產(chǎn)階段中,我們采取一個 30 秒間隔的性能采樣,并發(fā)現(xiàn)下圖中的顯示內(nèi)容(注意:這是在我們升級了 Go 版本并將 Go 的內(nèi)部組件降到最低之后的結(jié)果):

 

Go profiling

如你所見,我們發(fā)現(xiàn)很多與運(yùn)行時(shí)庫(runtime package )相關(guān)的活動,其中需要特別指出是 GC(垃圾收集):幾乎 29% 的 CPU 被 GC 使用,這還只是消耗最多的前 20 個對象。由于 Go 的 GC 已經(jīng)非常快并做了很大優(yōu)化,最好的實(shí)踐就是不要去改變或修改它。由于我們的內(nèi)存消耗非常低(與前一個 Go 版本相比),所以主要問題變成了高對象分配率。

如果是這樣的話,我們可以做兩件事情:

  1. 調(diào)整 Go GC 活動來適應(yīng)我們的服務(wù)行為,也就是說,我們需要延遲 GC 的觸發(fā)來減少其運(yùn)行頻率。作為代價(jià),我們將不得不消耗更多的內(nèi)存。
  2. 找出代碼中分配了太多對象的函數(shù)、區(qū)域或行。

觀察一下實(shí)例類型,我們有大量的空閑內(nèi)存,而 CPU 數(shù)量則被機(jī)器類型所限制。因此我們需要調(diào)整這個比率。從 Golang 早期開始,就有一個閥值(flag)被大多數(shù)開發(fā)人員所忽視:GOGC。該閥值的缺省值為 100,它的主要工作就是告訴系統(tǒng)何時(shí)觸發(fā) GC。當(dāng)堆達(dá)到其初始大小的 100% 時(shí),默認(rèn)值將觸發(fā) GC 進(jìn)程。將默認(rèn)值更改為更高數(shù)字則延遲 GC 觸發(fā),反之,將更快地觸發(fā) GC。我們開始針對不同的數(shù)值進(jìn)行基準(zhǔn)測試,最終發(fā)現(xiàn)當(dāng) GOGC=2000 時(shí),我們能獲得最佳性能。

這將我們的內(nèi)存使用量從 200 MB 立刻增加到 2.7 GB(這還是在我們更新 Go 版本減少了內(nèi)存消耗之后),并將我們的 CPU 使用率降低 10%。

下面的截圖展示了這些基準(zhǔn)測試的結(jié)果:

 

Gogc=2000 的結(jié)果

CPU 使用率排名前 4 的函數(shù)變成了我們的服務(wù)函數(shù),這才說得過去。現(xiàn)在,總的 GC 使用量變成了約 13%,比之前的一半還少。

繼續(xù)深入

我們本可以就此打住,但我們還是決定繼續(xù)去調(diào)查分配這么多對象的位置以及原因。很多時(shí)候,分配對象都有一個很好的理由(例如在流處理的情況下,我們?yōu)槊織l消息都創(chuàng)建了很多新對象,因?yàn)樗c下一條消息無關(guān),需要移除它),但在某些情況下,有一種簡單的方法可以優(yōu)化并極大地減少對象創(chuàng)建。

首先,讓我們運(yùn)行一個和之前相同的命令,只做一個小小的變動,采用 heap dump:

  1. Http://localhost:6060/debug/pprof/heap 

為了查詢結(jié)果文件,我們可以在代碼文件目錄中運(yùn)行如下命令來分析調(diào)試結(jié)果:

  1. go tool pprof -allocobjects <HEAP.PROFILE.FILE> 

我們的截圖看起來是這樣的:

 

除第三行外,一切似乎都很合理。第三行是一個監(jiān)控函數(shù),在每個 Coralogix 規(guī)則解析階段的末尾向我們的 Promethes 導(dǎo)出者(exporter)輸出報(bào)告。為獲取進(jìn)一步的信息,我們運(yùn)行以下命令:

  1. list <FunctionName> 

例如:

  1. list reportRuleExecution 

然后,我們得到以下結(jié)果:

 

這兩個對 WithLabelValues 的調(diào)用其實(shí)是針對度量的 Prometheus 調(diào)用(我們讓產(chǎn)品來決定是否真的需要它)。此外,我們看到第一行創(chuàng)建了大量對象(占該函數(shù)總分配對象的 10%)。通過進(jìn)一步研究,我們發(fā)現(xiàn)這是一個將客戶 ID 從 int 轉(zhuǎn)換為 string 的過程。該過程非常重要,但考慮到數(shù)據(jù)庫中的客戶數(shù)量有限,我們不應(yīng)該為迎合 Prometheus 而將變量作為字符串接收。

因此,我們沒有在每次創(chuàng)建一個新字符串并在函數(shù)結(jié)束時(shí)丟棄它(浪費(fèi)了分配時(shí)間和 GC 的更多工作),而是在對象初始化時(shí)定義了一個映射,映射了從 1 到 10 萬之間的所有數(shù)字以及一個相對應(yīng)的”get”操作。

我們運(yùn)行了一個新的性能分析會話來驗(yàn)證上述論點(diǎn),結(jié)果證明它是正確的(我們可以看到這部分不再分配對象了):

 

這并不是一個非常大的改動,但總的來說,這為我們節(jié)省了另一個 GC 活動,更具體地說,大約 1% 的 CPU 使用率。

最終狀態(tài)顯示在下面的截圖中:

 

2. 最終結(jié)果

內(nèi)存使用:~1.3GB -> ~2.7GB

CPU 使用:~2.55 均值和~5.05 峰值 -> ~2.13 均值和~2.9 峰值。

Golang 優(yōu)化之前的 CPU 使用率:

 

Golang 優(yōu)化之后的 CPU 使用率:

 

總的來說,我們的改進(jìn)主要體現(xiàn)在峰值時(shí)間段,每秒處理的日志數(shù)量提升了。這意味著我們的基礎(chǔ)設(shè)施不再需要針對異常值進(jìn)行調(diào)優(yōu),而且變得更加穩(wěn)定。

3. 總結(jié)

通過分析 Go 解析服務(wù),我們能定位出問題區(qū)域,更好地理解我們的服務(wù),并決定在哪里(如果有的話)投入時(shí)間來做改進(jìn)工作。大多數(shù)性能分析工作最終都會參照用戶使用情況對閥值或配置進(jìn)行調(diào)優(yōu),從而獲得更好的性能。

 

 

責(zé)任編輯:張燕妮 來源: 架構(gòu)頭條
相關(guān)推薦

2009-11-16 17:03:20

Oracle優(yōu)化CPU

2022-03-02 09:01:07

CPU使用率優(yōu)化

2010-04-27 10:32:54

Oracle優(yōu)化CPU

2019-01-15 15:04:54

CPU電腦使用率

2024-04-11 13:27:19

Linuxtop命令

2010-04-12 11:21:35

Oracle優(yōu)化CPU

2021-08-10 11:45:57

topCPULinux

2021-05-31 15:53:57

CPU Top命令

2024-05-14 08:47:01

JavaPAC++

2012-07-02 16:38:22

Linux服務(wù)器閏秒

2012-07-03 09:57:11

閏秒Linux 服務(wù)器

2022-07-23 21:31:24

KubernetesLinux開源

2014-12-01 13:44:03

cgroupscpulimitlinux

2021-11-11 16:46:02

CPU使用率 .NET

2019-09-24 14:52:35

CPU負(fù)載Linux

2019-07-31 07:26:16

Linux服務(wù)器CPU

2022-06-06 10:20:59

CPUCPU 使用率CPU 負(fù)載

2020-07-08 07:00:00

LinuxCPU應(yīng)用程序

2010-01-18 10:13:08

VB.NET獲取CPU

2009-12-15 15:12:05

Linux限制進(jìn)程cp
點(diǎn)贊
收藏

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

中文字幕在线看片| 高潮一区二区三区乱码| 综合激情视频| 日韩精品视频在线| 国产三级三级看三级| 怡红院在线播放| 久久精品人人爽人人爽| 亚洲一区中文字幕| 中文字幕69页| 欧美激情麻豆| 亚洲视频欧洲视频| 国产情侣久久久久aⅴ免费| 78精品国产综合久久香蕉| 一级做a爱片久久| 亚洲欧美国产不卡| 天堂在线资源8| 国产精品中文字幕欧美| 国产成人一区二区三区电影| 国产亚洲精品女人久久久久久| 国产一区二区三区不卡视频网站| 欧美xxxx老人做受| 天天综合天天添夜夜添狠狠添| 亚洲美女尤物影院| 亚洲二区视频在线| 女女百合国产免费网站| 1024免费在线视频| 久久久久国产一区二区三区四区| 91精品啪在线观看麻豆免费| 9i精品福利一区二区三区| 欧美91视频| 久久亚洲国产精品| 青青草自拍偷拍| 精品国产aⅴ| 日韩久久午夜影院| 久久午夜夜伦鲁鲁片| 在线精品国产亚洲| 日韩一级成人av| 男女污污视频网站| 国产精品美女久久久久人| 欧美午夜一区二区| 蜜桃免费在线视频| 另类中文字幕国产精品| 日本韩国精品在线| 黑鬼大战白妞高潮喷白浆| 涩涩在线视频| 欧美日韩在线第一页| 国产视频九色蝌蚪| 女厕盗摄一区二区三区| 欧美性xxxxxx| 精品国产成人av在线免| 蜜桃精品在线| 欧美日韩久久一区二区| 中文字幕av不卡在线| 看片一区二区| 欧美精品欧美精品系列| 中文字幕一区二区在线观看视频 | 亚洲精品中文字幕99999| 亚洲精品福利资源站| 91精品小视频| 禁断一区二区三区在线| 在线中文字幕日韩| 免费成人深夜夜行网站| 综合视频在线| 久久久亚洲福利精品午夜| 日本少妇激情视频| 噜噜噜躁狠狠躁狠狠精品视频| 日韩暖暖在线视频| 一本色道久久综合精品婷婷 | 国产精品网红直播| 国产免费无遮挡| 成人免费视频国产在线观看| 久久精品国产精品国产精品污| 亚洲色欧美另类| 国产欧美一区二区在线观看| 中文字幕99| 欧美寡妇性猛交xxx免费| 午夜亚洲福利老司机| 国产视频一区二区三区在线播放| 人人精品久久| 亚洲国产成人久久综合| av女人的天堂| 欧美国产三级| 日本精品va在线观看| 91精品在线视频观看| av在线免费不卡| 色综合久久av| 三级网站视频在在线播放| 大荫蒂欧美视频另类xxxx| 国产一区二区在线免费播放| 亚洲精品一区在线| 国产亚洲一级高清| 欧美成人精品激情在线视频| 久久男女视频| 成人欧美一区二区三区视频xxx| 天堂а在线中文在线无限看推荐| 国产精品系列在线| 欧美又粗又长又爽做受| 三级成人黄色影院| 欧美大片国产精品| 美女100%露胸无遮挡| 国产精品啊v在线| 国产精品国产福利国产秒拍| 丰满大乳国产精品| 亚洲欧美综合网| 国产福利一区视频| 动漫视频在线一区| xxx欧美精品| 99久久久久久久久| 丁香啪啪综合成人亚洲小说 | 最新国产露脸在线观看| 色88888久久久久久影院按摩| 亚洲精品久久久久久| av中文一区| 51ⅴ精品国产91久久久久久| 午夜精品小视频| 国产精品久久久久久久久晋中| 亚洲熟妇无码另类久久久| 精品视频在线一区| 中文字幕综合在线| 久久午夜鲁丝片| 26uuu另类欧美亚洲曰本| 国产精品视频一二三四区| 国产麻豆一区| 在线观看日韩欧美| 丁香社区五月天| 91在线视频播放地址| 国产中文字幕乱人伦在线观看| 亚洲成人1区| 在线视频日韩精品| 性色av一区二区三区四区| 91免费视频网| 国产肥臀一区二区福利视频| 国产精品极品| 国内免费精品永久在线视频| 午夜精品一二三区| 亚洲在线观看免费| 国产麻豆剧传媒精品国产| 亚洲色图网站| 亚洲一区亚洲二区亚洲三区| 粗大黑人巨茎大战欧美成人| 欧美一区二区三区在线看| 国产传媒免费在线观看| 精品在线播放免费| 中文字幕一区二区三区在线乱码| 福利一区二区免费视频| 日日噜噜噜夜夜爽亚洲精品| 中文天堂在线资源| 国产精品免费视频一区| 亚洲精品综合在线观看| 99久久久久国产精品| 成人免费直播live| 亚洲wwwww| 精品国产第一区二区三区观看体验| 国产成人综合在线视频| 国产精品一区2区| a级黄色小视频| 亚洲精品亚洲人成在线| 国产精品第七影院| 欧美jizz18性欧美| 日韩精品一区二区三区四区 | 国内精品久久国产| 不卡一二三区| 日韩在线观看网站| www.com欧美| 香港成人在线视频| 国产三级短视频| 国产在线精品一区二区| 久久久久99精品成人片| 香蕉久久夜色精品国产更新时间| 国产成人91久久精品| 免费a级人成a大片在线观看| 精品国产在天天线2019| 91porny在线| 国产精品丝袜黑色高跟| 丰满少妇一区二区三区专区| 亚洲乱码久久| 亚洲人成人77777线观看| 蜜桃在线一区| 奇米4444一区二区三区| 黄色片网站在线| 亚洲精品国产精品乱码不99按摩 | 中文字幕欧美日韩在线| 国产www免费观看| 欧美日韩免费网站| 亚洲一级二级片| 不卡一区中文字幕| 午夜免费福利在线| 亚洲乱码视频| 大桥未久一区二区三区| 亚洲人成亚洲精品| 91香蕉亚洲精品| 亚洲精品动漫| 欧美激情第三页| 在线播放麻豆| 亚洲美女www午夜| 国产黄色小视频在线观看| 色婷婷综合久色| 国产亚洲成人精品| 国产精品久久久久久久久晋中 | 欧美日韩国产欧| 欧美激情第六页| 亚洲网一区二区三区| 国产精品入口免费视| 女人让男人操自己视频在线观看| 久久在线免费视频| 成人午夜电影在线观看| 日韩国产精品视频| 超碰在线播放97| 欧美另类高清zo欧美| 欧美日韩中文视频| 亚洲美女免费视频| 久久精品日韩无码| 久久精品在线免费观看| 人妖粗暴刺激videos呻吟| 国产综合色在线| 狠狠躁狠狠躁视频专区| 久久高清国产| 黄色大片在线免费看| 欧美精品一区二区三区久久久竹菊| 日韩国产伦理| 亚洲图片久久| 国内精品久久久久久久果冻传媒| 欧美二区观看| 成人欧美一区二区三区黑人孕妇| 91亚洲视频| 国产精品pans私拍| 极品美鲍一区| 91精品91久久久久久| av中文字幕在线看| 久久久久国产精品免费网站| 中国av在线播放| 久久亚洲精品毛片| 麻豆传媒视频在线观看免费| 最近中文字幕日韩精品| jizz在线观看| 中文日韩在线观看| av网站无病毒在线| 中文字幕日本欧美| 91激情在线| 日韩视频精品在线| 久cao在线| 久久亚洲电影天堂| 亚洲综合影视| 久久久久亚洲精品| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美黑人巨大xxx极品| 欧美大片黄色| 欧美又大又硬又粗bbbbb| 成人爽a毛片免费啪啪| 日本高清视频一区| yy6080久久伦理一区二区| 国产精品一区二区三区毛片淫片 | 欧美日韩精品电影| 一级久久久久久久| 91精品国产综合久久精品图片| 国产偷人妻精品一区二区在线| 欧美大片在线观看一区二区| 蜜臀av免费在线观看| 日韩精品视频中文在线观看| 免费福利在线观看| 最近免费中文字幕视频2019| 国产美女在线观看| 久久久最新网址| 日韩电影网站| 91久久久在线| 巨人精品**| 日本一区不卡| 亚洲91中文字幕无线码三区| 免费人成自慰网站| 噜噜噜91成人网| 亚洲妇熟xx妇色黄蜜桃| 东方欧美亚洲色图在线| 五级黄高潮片90分钟视频| 国产精品美女久久久久av爽李琼 | 婷婷视频在线| 久久久久久久久久久成人| 97久久香蕉国产线看观看| 91精品国产自产在线老师啪 | 国产无精乱码一区二区三区| 日韩欧美精品在线观看| 亚洲手机在线观看| 精品国产髙清在线看国产毛片| 国模精品一区二区| 欧美日本高清一区| 亚洲电影有码| 国产精品一区二区三区在线观| 成人中文视频| 免费看黄在线看| 久色婷婷小香蕉久久| 久久久久成人精品无码中文字幕| 中文字幕av免费专区久久| 久久亚洲成人av| 欧美私人免费视频| 日本激情一区二区三区| 日韩中文第一页| 成人美女视频| av色综合网| 日韩在线观看电影完整版高清免费悬疑悬疑| 老司机激情视频| 久久99国产精品尤物| 亚洲第九十七页| 亚洲精品乱码久久久久久久久| 日韩电影在线观看一区二区| 精品少妇一区二区三区 | 亚洲欧美日韩一区| 乱子伦一区二区三区| 亚洲国产精品中文| 国产在线看片| 国产精品免费久久久久久| 欧美大奶一区二区| www.一区二区.com| 加勒比av一区二区| 国产探花视频在线播放| 欧美日韩国产限制| 亚洲精品人妻无码| 久久在线免费观看视频| 四虎影视国产精品| 色99中文字幕| 日韩国产欧美在线观看| av无码一区二区三区| 亚洲综合一区二区精品导航| 国产精品无码在线播放| 自拍偷拍亚洲在线| 成人精品动漫| 色一情一乱一伦一区二区三区| 久久国产福利| 中文字幕日韩三级片| 图片区小说区国产精品视频| 黄色片网站免费在线观看| 九九精品在线视频| 日本少妇精品亚洲第一区| 国产又大又长又粗又黄| 久久超碰97中文字幕| 精品一区二区6| 欧美电影影音先锋| 黄色av电影在线观看| 91日韩在线播放| 伊人久久大香线| av地址在线观看| 亚洲午夜在线视频| 天天色综合久久| 日本精品va在线观看| 中文有码一区| 99免费视频观看| 国产精品不卡一区二区三区| 一级黄色片免费看| 久久中文字幕国产| 一区二区三区视频免费视频观看网站| 91视频成人免费| 成人免费av资源| 麻豆精品久久久久久久99蜜桃| 亚洲女成人图区| 精品国产美女a久久9999| 杨幂一区欧美专区| 国产一区久久久| 国产午夜免费视频| 精品亚洲一区二区| 成人a在线观看高清电影| 一区二区91美女张开腿让人桶| 国产在线一区观看| 国产中文字幕免费| 亚洲精选一区二区| 99精品国自产在线| 国产盗摄视频在线观看| av中文字幕不卡| 最近中文字幕在线观看视频| 免费av在线一区| 日韩大尺度在线观看| 亚洲综合欧美激情| 亚洲午夜视频在线观看| 精品无吗乱吗av国产爱色| 国产日韩精品视频| 激情综合久久| 摸摸摸bbb毛毛毛片| 日韩无一区二区| 在线观看欧美日韩电影| 一区二区三区精品国产| 丁香婷婷综合五月| 加勒比在线一区| 欧美伦理91i| 国产精品一区二区99| 永久免费黄色片| 欧美性jizz18性欧美| a级在线观看| 欧美1o一11sex性hdhd| 韩国成人福利片在线播放| 波多野结衣视频网站| 久久中文精品视频| 国产影视精品一区二区三区| 日本精品一二三| 精品视频资源站| 狠狠躁少妇一区二区三区| 中文字幕中文字幕一区三区| 99久久99精品久久久久久| 91丨九色丨蝌蚪丨对白| 欧美在线日韩在线| 好吊一区二区三区| 成人一级片免费看| 精品中文视频在线| 98视频精品全部国产|