真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux性能優(yōu)化實(shí)例分析

本篇內(nèi)容介紹了“l(fā)inux性能優(yōu)化實(shí)例分析”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),網(wǎng)站設(shè)計(jì),綿陽(yáng)服務(wù)器托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出成都創(chuàng)新互聯(lián)公司。

自從上次修改backlog之后, Silly的IO能力,就一直以少量(約4~6K)的差距落后于redis,卻一直找不到原因。

這次打算從頭做一次profile來問題到底出在哪。

先用GNU提供的gprof分析一下C代碼是否有值得優(yōu)化的地方,結(jié)果發(fā)現(xiàn)CPU使用率最高的地方是luaVM內(nèi)部和malloc/free。

我們所有的業(yè)務(wù)邏輯全在lua層做的,而IO線程與worker(lua)線程進(jìn)行交互時(shí)是通過malloc來實(shí)現(xiàn)的。這幾乎表明C代碼幾乎已經(jīng)沒有優(yōu)化的余地了。

但是有個(gè)好消息,就是gprof不去profile系統(tǒng)調(diào)用和so,也許還有機(jī)會(huì)。

壓測(cè)時(shí),先使用top看一下每個(gè)cpu core的使用率,包括用戶態(tài)與內(nèi)核態(tài)。

用戶態(tài)過高一般是應(yīng)用邏輯代碼消耗的,內(nèi)核態(tài)則有可能是因?yàn)橄到y(tǒng)調(diào)用過多,上下文切換過頻繁,等其他原因。

不過top只能看到當(dāng)時(shí)的cpu狀態(tài),不太好看出整個(gè)測(cè)試區(qū)間,cpu消耗的曲線。可以改用’sar -u -P ALL 1’每隔一秒打印出cpu的使用情況。

通過觀察發(fā)現(xiàn),有一個(gè)線程的內(nèi)核態(tài)有70+%之多,相比Redis來講高出不少。

再使用vmstat命令查看in(系統(tǒng)中斷)/cs(上下文切換), 可以確認(rèn)在整個(gè)壓測(cè)區(qū)間in和cs顯著升高,推測(cè)應(yīng)該是系統(tǒng)調(diào)用造成的。

為了近一步確認(rèn)這些‘中斷和上下文切換’是由Silly造成的,使用’pidstat -w -p PID 1’來打印出某一個(gè)線程的上下文切換頻率。

當(dāng)確認(rèn)之后,再使用’strace -p $PID -c -f’來收集此進(jìn)程所有系統(tǒng)調(diào)用次數(shù)。再根據(jù)收集到的信息有針對(duì)性的優(yōu)化。

如果以上都做了,還是沒有什么可以優(yōu)化的余地。沒關(guān)系,我們還有一個(gè)神器perf來查看Cache命中率,分支預(yù)測(cè)失敗率,CPU調(diào)度遷移等與cpu密切相關(guān)的信息。

如果以上都已經(jīng)做還是沒有找到優(yōu)化空間。

還有一個(gè)很常見但很容易被人忽略的因素,就是CPU的用戶態(tài)和內(nèi)核態(tài)都很低。

這種情況下,一般是程序或集群間有隊(duì)列(這個(gè)隊(duì)列可能是socket等一切有FIFO性質(zhì)的設(shè)施),隊(duì)列的一端處理過慢(比如由于某種原因,處理端被卡住了,而又不耗cpu) ,而隊(duì)列的產(chǎn)生端在產(chǎn)生完請(qǐng)求之后,由于一直沒有收到回應(yīng),也一直在idle中。

整個(gè)表現(xiàn),看上去特別詭異,就像是突然間機(jī)器空載了一樣。


最后,當(dāng)我們發(fā)現(xiàn)應(yīng)用層代碼實(shí)在無法優(yōu)化之后,別著急,也許還有最后幾個(gè)免費(fèi)午餐你還沒有吃。

jemalloc

一款很優(yōu)秀的內(nèi)存分配器,即使對(duì)多線程也有很好的表現(xiàn)。以此次優(yōu)化silly為例,把內(nèi)存分配器換成jemalloc 5.0之后,請(qǐng)求處理速度有顯著提升。

__builtin_expect

GNU內(nèi)建函數(shù),可以用來向GCC暗示哪個(gè)分支更高概率的被執(zhí)行,以便GCC可以生成更好的代碼,以方便CPU做分支預(yù)測(cè)。當(dāng)我們的分支判斷成功與失敗的概率有顯著差別時(shí)(比如異常處理),可以用來提高性能,至于能提高多少,要看具體情況。其中一種情況的測(cè)如見上篇。

cpu affinity

linux內(nèi)核向應(yīng)用程序提供了一些接口,可以讓我們微調(diào)內(nèi)核,包括調(diào)度算法。cpu affinity可以修改進(jìn)程或線程的cpu親和力。以暗示內(nèi)核,最少可能選成cpu遷移,cpu遷移數(shù)據(jù)可以通過perf工具來獲取。

“l(fā)inux性能優(yōu)化實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞標(biāo)題:linux性能優(yōu)化實(shí)例分析
本文地址:http://weahome.cn/article/goggds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部