亚洲中文字幕乱码亚洲-蜜桃成熟视频在线观看-免费中文字幕视频在线-中国五十路熟妇洗澡视频-亚洲av伊人啪啪c-国产精品成人一区二区-国产自拍视频一区在线观看-成人一区不卡二区三区四区-亚洲情精品中文字幕99在线

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

搞了次性能優(yōu)化,結(jié)果出乎意料!

0
分享至

大家好,我是程序員魚(yú)皮。

之前我?guī)Т蠹易龅? 項(xiàng)目 ,用戶可以在線制作、分享、使用代碼生成器~


這次的系列教程中,我專門(mén)用了 4 個(gè)小時(shí)的直播,給大家?guī)?lái)了一場(chǎng)極致的 性能優(yōu)化 “盛宴”。

很多同學(xué)由于沒(méi)有實(shí)習(xí)或工作經(jīng)歷,可能沒(méi)有接觸過(guò)性能優(yōu)化,但這卻是能區(qū)分程序員水平的重要技能。

為什么這么說(shuō)?

舉個(gè)例子:

  • 優(yōu)秀的程序員,能用 1 臺(tái)機(jī)器滿足 10000 個(gè)用戶的使用需求,如果滿足不了,首先想到的是繼續(xù)去優(yōu)化。

  • 而一般的程序員,用 1 臺(tái)機(jī)器可能只能滿足 1000 個(gè)用戶的使用需求,如果滿足不了,就要加機(jī)器、加資源。現(xiàn)實(shí)往往是沒(méi)有資源給你加。

怎么區(qū)分一個(gè)程序員有沒(méi)有性能優(yōu)化經(jīng)驗(yàn)?zāi)兀?/p>

就先問(wèn)大家一個(gè)問(wèn)題吧:一臺(tái)部署了 Tomcat 的服務(wù)器,每秒最多能處理多少個(gè)請(qǐng)求?

下面給大家簡(jiǎn)單分享下我直播中的性能優(yōu)化過(guò)程,答案也將在最后揭曉。

性能優(yōu)化實(shí)踐

要優(yōu)化的是一個(gè)后端查詢接口,功能是查詢出主頁(yè)要展示的分頁(yè)數(shù)據(jù)列表,邏輯很簡(jiǎn)單,就是數(shù)據(jù)庫(kù)分頁(yè)查詢而已。

如下圖:


首先我們往數(shù)據(jù)庫(kù)里插入 10 萬(wàn)條數(shù)據(jù),然后打開(kāi)瀏覽器控制臺(tái),觀察 10 次請(qǐng)求的響應(yīng)耗時(shí),平均是 700 毫秒:


1)首先,我嘗試優(yōu)化了數(shù)據(jù)查詢的 SQL 語(yǔ)句,讓它只查詢需要返回給前端的數(shù)據(jù),減少數(shù)據(jù)量。

優(yōu)化后的接口平均耗時(shí)是 500 多毫秒,大概響應(yīng)時(shí)長(zhǎng)縮短了 1 / 4:


使用 JMeter 進(jìn)行壓力測(cè)試,每秒啟動(dòng) 1000 個(gè)線程,總共啟動(dòng) 1 萬(wàn)個(gè)線程發(fā)送請(qǐng)求,在異常率 0% 的前提下,測(cè)試結(jié)果得到的 qps 為 20,這顯然不是一個(gè)很好的成績(jī)。


2)進(jìn)一步優(yōu)化,使用性能更高的 Redis 分布式緩存。將分頁(yè)查詢結(jié)果作為 JSON 字符串寫(xiě)入緩存,再次查詢的時(shí)候直接讀取就行。

結(jié)果響應(yīng)時(shí)長(zhǎng)直接縮短到了平均 20 毫秒!縮短了 25 倍!

第一個(gè)請(qǐng)求是加載緩存的,所以較慢。

有緩存的情況下,壓力測(cè)試得到的 qps 是 114.6,提升了 5 倍多!


可見(jiàn)緩存還是猛啊,讀多寫(xiě)少、更新頻率低、訪問(wèn)頻率高的數(shù)據(jù),非常適合使用緩存。

還能進(jìn)一步優(yōu)化么?

3)當(dāng)然能!使用比分布式緩存更快的本地緩存,直接從當(dāng)前服務(wù)器內(nèi)存讀取數(shù)據(jù),更快~

用瀏覽器控制臺(tái)測(cè)試響應(yīng)時(shí)長(zhǎng),幾乎沒(méi)有變化(因?yàn)槲覝y(cè)試過(guò)程中,Redis 也是本地啟動(dòng)的):


進(jìn)行壓力測(cè)試,發(fā)現(xiàn) qps 略有提升,大概 10% 左右吧:


本地緩存按道理來(lái)說(shuō)已經(jīng)是最快的讀取方式了,難道這就已經(jīng)優(yōu)化到極限了么?

當(dāng)然沒(méi)有!

4)雖然 I / O 難以繼續(xù)優(yōu)化了,但我們可以優(yōu)化程序的計(jì)算邏輯、節(jié)約 CPU 資源。

比如我修改緩存的數(shù)據(jù)類(lèi)型,不再寫(xiě)入 JSON 格式的緩存了,直接用 JDK 原生的序列化方式去保存對(duì)象,這樣讀取的時(shí)候也不需要把 JSON 轉(zhuǎn)為對(duì)象。

優(yōu)化這個(gè)邏輯后,響應(yīng)時(shí)長(zhǎng)大幅度減少!平均 8 毫秒左右:


沒(méi)想到吧,看似不起眼的 JSON 轉(zhuǎn)換操作,這么影響性能?

壓力測(cè)試的結(jié)果更恐怖了,吞吐量接近 16000,直接提升了 100 多倍!


真是不測(cè)不知道,一測(cè)嚇一跳。

問(wèn)題來(lái)了,還能繼續(xù)優(yōu)化么?

當(dāng)然可以!

5)除了業(yè)務(wù)邏輯層,我們還可以優(yōu)化請(qǐng)求層。比如修改 Tomcat 服務(wù)器的配置,增大工作線程數(shù)和最大線程連接數(shù)。

稍微改 2 行配置,吞吐量就提高了 1 / 5 左右,接近 19000!相比最開(kāi)始的 qps 20 提升了近千倍!


這。。這次到極限了么?

我怎么知道啊!肯定還是需要自己測(cè)試這個(gè)極限到底在哪里!

如何測(cè)試呢?

6)我們可以編寫(xiě)一個(gè)沒(méi)有任何業(yè)務(wù)邏輯,直接返回 "ok" 字符串的空接口。

每秒啟動(dòng) 10 萬(wàn)個(gè)線程來(lái)測(cè)試,得到的 qps 為 36000+,又提高了整整一倍!


ok,沒(méi)有任何邏輯的接口 qps 是這個(gè)數(shù),那么你再怎么優(yōu)化業(yè)務(wù)邏輯,性能的極限也不會(huì)超過(guò)這個(gè)值。

那么,還有辦法繼續(xù)優(yōu)化么?

當(dāng)然可以!

7)因?yàn)檫@只是 Tomcat 服務(wù)器 + Spring MVC 框架的極限,如果我們用別的技術(shù)呢?


這里我就拋磚引玉,大家感興趣的話,可以找個(gè)項(xiàng)目中的查詢接口、用我上面提到的方法優(yōu)化下。


回到最開(kāi)始的問(wèn)題 “一臺(tái)部署了 Tomcat 的服務(wù)器,每秒最多能處理多少個(gè)請(qǐng)求?”

其實(shí)這個(gè)答案是 無(wú)解 ,因?yàn)槿鄙倭俗钪匾臏y(cè)試條件、測(cè)試環(huán)境和測(cè)試基準(zhǔn),比如是在幾核幾 G、帶寬多少的機(jī)器上測(cè)試呢?不同的測(cè)試環(huán)境,測(cè)試結(jié)果肯定不同。性能優(yōu)化效果一定要以實(shí)際測(cè)試結(jié)果為準(zhǔn),下次遇到這種問(wèn)題的時(shí)候,別被面試官唬住了哦~

以上就是本期分享,時(shí)間有限文章就只能講這么多了,大家如果對(duì)這個(gè)項(xiàng)目、這次的性能優(yōu)化完整教程感興趣,歡迎 學(xué)習(xí)。

這個(gè)項(xiàng)目視頻教程接近 40 小時(shí),文字教程十幾萬(wàn)字,我付出了大量的頭發(fā)精力,也保證絕對(duì)是一個(gè)很能打的項(xiàng)目~



點(diǎn)擊下方關(guān)注魚(yú)皮,獲取免費(fèi)編程學(xué)習(xí)路線、簡(jiǎn)歷模板、面試題解、AI 知識(shí)庫(kù)、項(xiàng)目教程、交流群。

一些對(duì)大家有用的資源:
100+ 編程學(xué)習(xí)路線 / 實(shí)戰(zhàn)項(xiàng)目 / 求職指導(dǎo)
100+ 簡(jiǎn)歷模板
300+ 企業(yè)面試題庫(kù) mianshiya.com
500+ AI 資源大全
1 對(duì) 1 模擬面試
動(dòng)畫(huà)學(xué)算法教程

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
湖南一小車(chē)在高速公路跑100碼,突然接到陌生人電話直接嚇哭:你車(chē)輪沒(méi)了!

湖南一小車(chē)在高速公路跑100碼,突然接到陌生人電話直接嚇哭:你車(chē)輪沒(méi)了!

瀟湘晨報(bào)
2026-04-18 17:05:22
一個(gè)從沒(méi)拿過(guò)主流大獎(jiǎng)的頂流,突然殺進(jìn)AMA

一個(gè)從沒(méi)拿過(guò)主流大獎(jiǎng)的頂流,突然殺進(jìn)AMA

綠茵狂熱者
2026-04-19 10:06:44
她穿著玫瑰裙站上擂臺(tái),全場(chǎng)數(shù)到第50618人

她穿著玫瑰裙站上擂臺(tái),全場(chǎng)數(shù)到第50618人

體壇觀察猿
2026-04-19 09:35:02
歐洲媒體哀嚎“一切結(jié)束了”,荷蘭斷供光刻機(jī),坑的卻是自己人!

歐洲媒體哀嚎“一切結(jié)束了”,荷蘭斷供光刻機(jī),坑的卻是自己人!

杰絲聊古今
2026-04-19 20:07:57
魏建軍發(fā)布會(huì)現(xiàn)場(chǎng)痛批營(yíng)銷(xiāo)團(tuán)隊(duì)5分鐘:無(wú)法轉(zhuǎn)化工程師成果“相當(dāng)于犯罪”

魏建軍發(fā)布會(huì)現(xiàn)場(chǎng)痛批營(yíng)銷(xiāo)團(tuán)隊(duì)5分鐘:無(wú)法轉(zhuǎn)化工程師成果“相當(dāng)于犯罪”

三言科技
2026-04-18 20:55:06
打不得!日本戰(zhàn)艦闖入臺(tái)海峽,我軍為什么不直接擊沉它?

打不得!日本戰(zhàn)艦闖入臺(tái)海峽,我軍為什么不直接擊沉它?

趣文說(shuō)娛
2026-04-18 19:34:03
日本已具備制造核武器的幾乎所有物質(zhì)和技術(shù)條件:已囤積約44.4噸分離钚,足夠制造約5500枚核彈頭,同時(shí)還有核武器的投射工具

日本已具備制造核武器的幾乎所有物質(zhì)和技術(shù)條件:已囤積約44.4噸分離钚,足夠制造約5500枚核彈頭,同時(shí)還有核武器的投射工具

魯中晨報(bào)
2026-04-18 16:40:15
初戀開(kāi)大酒店,我調(diào)任市委書(shū)記后去她的大酒店吃飯,被她百般嘲笑

初戀開(kāi)大酒店,我調(diào)任市委書(shū)記后去她的大酒店吃飯,被她百般嘲笑

喬生桂
2025-07-10 15:37:39
光明“新鮮牧場(chǎng)”擦邊鮮牛奶,網(wǎng)友稱被誤導(dǎo)

光明“新鮮牧場(chǎng)”擦邊鮮牛奶,網(wǎng)友稱被誤導(dǎo)

新浪財(cái)經(jīng)
2026-04-19 12:44:38
48歲的老阿姨,這氣質(zhì)可以打多少分

48歲的老阿姨,這氣質(zhì)可以打多少分

鄉(xiāng)野小珥
2026-04-20 09:26:48
秦嵐 x 黑絲要人命

秦嵐 x 黑絲要人命

TVB的四小花
2026-04-20 01:48:17
震驚!蘇州一公司全員放假61天,聲稱業(yè)務(wù)停滯停工,鼓勵(lì)員工離職

震驚!蘇州一公司全員放假61天,聲稱業(yè)務(wù)停滯停工,鼓勵(lì)員工離職

火山詩(shī)話
2026-04-19 15:02:27
員工離職后刪除百萬(wàn)粉絲個(gè)人賬號(hào)視頻,被公司索賠,法院:案涉賬號(hào)歸屬于公司,前員工賠償相應(yīng)經(jīng)濟(jì)損失

員工離職后刪除百萬(wàn)粉絲個(gè)人賬號(hào)視頻,被公司索賠,法院:案涉賬號(hào)歸屬于公司,前員工賠償相應(yīng)經(jīng)濟(jì)損失

大風(fēng)新聞
2026-04-19 16:31:05
印媒:雖然美國(guó)已經(jīng)妥協(xié),但是沒(méi)有中國(guó)的表態(tài),印度還沒(méi)法崛起!

印媒:雖然美國(guó)已經(jīng)妥協(xié),但是沒(méi)有中國(guó)的表態(tài),印度還沒(méi)法崛起!

愛(ài)史紀(jì)
2026-04-20 04:50:29
錯(cuò)怪狀元郎了!之前打這么爛就是為了挑活塞?

錯(cuò)怪狀元郎了!之前打這么爛就是為了挑活塞?

籃球大圖
2026-04-20 11:47:55
廣州暹崗大山遭人私挖水晶破壞 林業(yè)部門(mén)回應(yīng)→

廣州暹崗大山遭人私挖水晶破壞 林業(yè)部門(mén)回應(yīng)→

新快報(bào)新聞
2026-04-20 00:12:42
2020年粟戎生寫(xiě)信詢問(wèn):孟良崮上為何只見(jiàn)敵酋招魂,不見(jiàn)我軍神勇

2020年粟戎生寫(xiě)信詢問(wèn):孟良崮上為何只見(jiàn)敵酋招魂,不見(jiàn)我軍神勇

歷史龍?jiān)w
2026-04-18 08:50:13
新中國(guó)對(duì)外輸出革命史:上萬(wàn)知青奔赴緬甸,結(jié)局如何?

新中國(guó)對(duì)外輸出革命史:上萬(wàn)知青奔赴緬甸,結(jié)局如何?

談史論天地
2026-04-18 14:30:03
尹正自曝把摩托車(chē)全賣(mài)了:“車(chē)牌漲價(jià)了,賺翻了,我愛(ài)摩托車(chē)”

尹正自曝把摩托車(chē)全賣(mài)了:“車(chē)牌漲價(jià)了,賺翻了,我愛(ài)摩托車(chē)”

悅君兮君不知
2026-04-18 22:21:30
為什么沒(méi)有人賣(mài)給印度化肥?看看它的騷操作就明白了!

為什么沒(méi)有人賣(mài)給印度化肥?看看它的騷操作就明白了!

步論天下事
2026-04-18 10:00:20
2026-04-20 12:24:49
程序員魚(yú)皮 incentive-icons
程序員魚(yú)皮
一手科技資訊和編程干貨
92文章數(shù) 91關(guān)注度
往期回顧 全部

科技要聞

藍(lán)色起源一級(jí)火箭完美回收 客戶衛(wèi)星未入軌

頭條要聞

男子收到陌生賬號(hào)轉(zhuǎn)賬8萬(wàn)余元 3天后奢侈品牌商家找來(lái)

頭條要聞

男子收到陌生賬號(hào)轉(zhuǎn)賬8萬(wàn)余元 3天后奢侈品牌商家找來(lái)

體育要聞

七大獎(jiǎng)項(xiàng)候選官宣!文班或全票DPOY

娛樂(lè)要聞

鹿晗生日上熱搜,被關(guān)曉彤撕下體面

財(cái)經(jīng)要聞

月之暗面IPO迷局

汽車(chē)要聞

外觀非常驚艷 全新一代寶馬6系有望回歸

態(tài)度原創(chuàng)

本地
數(shù)碼
藝術(shù)
房產(chǎn)
公開(kāi)課

本地新聞

12噸巧克力有難,全網(wǎng)化身超級(jí)偵探添亂

數(shù)碼要聞

小米米家中央空調(diào)人感風(fēng)風(fēng)管機(jī)雙出風(fēng)預(yù)售:超一級(jí)能效,8999元

藝術(shù)要聞

王羲之《換鵝帖》尚在人間,驚艷無(wú)比!

房產(chǎn)要聞

官宣簽約最強(qiáng)城更!海口樓市,突然殺入神秘房企!

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版