性能壓測(cè)與調(diào)優(yōu)

? ? ? ? 性能壓測(cè)是當(dāng)服務(wù)上線前,或者之后重要需求發(fā)布流程中惩猫,需要做的必要測(cè)試芝硬;以模擬真實(shí)流量的方式,獲取當(dāng)前系統(tǒng)的性能指標(biāo)轧房、是否存著高并發(fā)隱患拌阴、瓶頸等信息的手段。

性能壓測(cè)處于什么位置奶镶?或者說什么時(shí)候去做呢迟赃?如何做陪拘?

如何做好線上環(huán)境的性能壓測(cè)、全鏈路壓測(cè)纤壁,如何做到壓測(cè)結(jié)果準(zhǔn)確無誤左刽,不影響外部環(huán)境、不污染數(shù)據(jù)酌媒,需要深入思考欠痴。

一、測(cè)試分類

按照上線流程:

? ??單元測(cè)試

? ??集成測(cè)試

? ??兼容性測(cè)試(前端秒咨、客戶端)

? ??性能測(cè)試

運(yùn)維階段:

????安全測(cè)試

????容災(zāi)測(cè)試(故障恢復(fù)測(cè)試)

由上可以看出斋否,性能測(cè)試是應(yīng)用服務(wù)在上線過程中的一個(gè)流程,除非是內(nèi)部系統(tǒng)拭荤,訪問量少茵臭,否則都應(yīng)當(dāng)做一下性能測(cè)試。

安全測(cè)試又叫滲透測(cè)試舅世,是運(yùn)維和研發(fā)需要關(guān)注的問題旦委;尤其是對(duì)數(shù)據(jù)安全要求高的系統(tǒng)。當(dāng)一個(gè)服務(wù)穩(wěn)定運(yùn)行后雏亚,模擬一些攻擊手段缨硝,防止SQL注入、網(wǎng)絡(luò)攻擊罢低、腳本攻擊等查辩。

容災(zāi)測(cè)試是容災(zāi)方式的驗(yàn)證,容災(zāi)方式包括:雙機(jī)房建設(shè)网持、異地多活宜岛、兩地三中心。

二功舀、壓測(cè)目的

????了解吞吐量

????瓶頸值

????系統(tǒng)隱患

可用:一次請(qǐng)求萍倡,到達(dá)服務(wù)器,有回應(yīng)辟汰;那么針對(duì)這次請(qǐng)求列敲,服務(wù)是可用的,無論返回成功或者失敗帖汞。

不可用是指請(qǐng)求沒有返回戴而,長(zhǎng)時(shí)間等待,沒有應(yīng)答翩蘸,客戶端不知道結(jié)果所意。

高可用級(jí)別:99%、99.9%、99.99%扁眯、99.999%

大家經(jīng)常說的系統(tǒng)可用性達(dá)到三個(gè)9壮莹,就是指99.9%。

高可靠:是指服務(wù)可靠姻檀,數(shù)據(jù)可靠命满。請(qǐng)求返回是成功,數(shù)據(jù)寫入正確绣版,分布式環(huán)境下數(shù)據(jù)一致性等胶台。

三、壓測(cè)指標(biāo)

壓測(cè)指標(biāo)

四杂抽、實(shí)現(xiàn)流程

1. 壓測(cè)工具選型

? ?Jmeter +?Influxdb +?Grafana +?Collectd


2.壓測(cè)環(huán)境準(zhǔn)備

? ??服務(wù)環(huán)境

? ??壓測(cè)機(jī)

? ??數(shù)據(jù)庫

? ??Redis

? ??MQ


3.壓測(cè)數(shù)據(jù)準(zhǔn)備

? ??日活數(shù)據(jù):數(shù)據(jù)要真實(shí)诈唬、流量真實(shí),結(jié)果才能越接近線上真實(shí)性能指標(biāo)缩麸。

? ??數(shù)據(jù)隔離:防止污染真實(shí)用戶數(shù)據(jù)

? ??數(shù)據(jù)恢復(fù)

? ??熱點(diǎn)數(shù)據(jù)

? ??壓測(cè)預(yù)熱:盡量模擬線上真實(shí)環(huán)境情況铸磅,如緩存命中率


4.壓測(cè)開發(fā)設(shè)計(jì)

? ??擋板

? ??Mock數(shù)據(jù)

? ??流量識(shí)別

? ??壓測(cè)場(chǎng)景

? ??加壓策略

擋板:是用來攔截調(diào)用第三方的請(qǐng)求,防止壓測(cè)對(duì)第三方造成影響杭朱;提前設(shè)計(jì)好擋板邏輯阅仔,識(shí)別壓測(cè)流量,執(zhí)行擋板邏輯弧械,并且為了真實(shí)八酒,還可以合理延遲一定時(shí)間再返回Mock數(shù)據(jù)。

流量識(shí)別:nginx做負(fù)載均衡刃唐,upstream?轉(zhuǎn)發(fā)服務(wù)器ip 時(shí)羞迷,可以獲取http請(qǐng)求Header的參數(shù),我們可以給壓測(cè)流量header加標(biāo)記參數(shù)画饥,nginx獲取參數(shù)判斷后衔瓮,轉(zhuǎn)發(fā)壓測(cè)流量到壓測(cè)機(jī)器。


5.監(jiān)控

監(jiān)控很重要荒澡,可以說是壓測(cè)中最為重要的地方报辱,如果沒有監(jiān)控,或者監(jiān)控不準(zhǔn)確单山,會(huì)嚴(yán)重影響壓測(cè)本身準(zhǔn)確性。監(jiān)控?cái)?shù)據(jù)不詳細(xì)幅疼,也會(huì)影響性能調(diào)優(yōu)米奸。

一般我們需要監(jiān)控的如下:

? ??CPU、內(nèi)存

? ??IO:網(wǎng)絡(luò)爽篷、磁盤

? ??Http請(qǐng)求悴晰、接口方法

? ??JVM

? ??中間件

? ??數(shù)據(jù)庫負(fù)載

? ??帶寬占用

其中對(duì)接口和方法的監(jiān)控需要有,而且要準(zhǔn)確,是定位性能問題的有效手段铡溪,越細(xì)化越好漂辐。

以下是一些監(jiān)控工具:?

Grafana 監(jiān)控 (CPU、內(nèi)存棕硫、成功率髓涯、http請(qǐng)求的RT)
Sentinel 監(jiān)控 (接口、方法級(jí)別)
Visualvm 監(jiān)控JVM

通過上圖可以直觀的看出JVM堆內(nèi)存的增長(zhǎng)情況和GC回收頻率哈扮、回收后內(nèi)存大小纬纪。如果回收后的內(nèi)存在持續(xù)增高,且當(dāng)前請(qǐng)求沒有增長(zhǎng)滑肉,說明有內(nèi)存泄露包各,具體什么對(duì)象泄漏,需要通過jmap等命令靶庙,查看堆內(nèi)存heap的詳情问畅。

JVM詳情查看命令

對(duì)比GC前后的對(duì)象數(shù)量,分析是哪些沒有回收六荒。


五护姆、性能優(yōu)化

注意:

慎重優(yōu)化,謹(jǐn)記二八原則 和 Amdahl定律恬吕。

優(yōu)化一定要伴隨著壓測(cè)签则,通過性能指標(biāo)、數(shù)據(jù)對(duì)比來論證和調(diào)整铐料,否則沒有意義渐裂。


1.優(yōu)化目標(biāo)

? ? ? ?提升吞吐量

????????降低 RT

2.優(yōu)化方向

????????硬件層面:CPU、內(nèi)存擴(kuò)容钠惩、換SSD固態(tài)硬盤

????????軟件層面:集群擴(kuò)容柒凉、代碼優(yōu)化、存儲(chǔ)優(yōu)化(緩存篓跛、數(shù)據(jù)庫)膝捞、減少IO

3.優(yōu)化方式

????????代碼優(yōu)化:請(qǐng)求合并、異步愧沟、Cache蔬咬、池化

????????JVM調(diào)優(yōu)

????????Linux調(diào)優(yōu)


JVM調(diào)優(yōu)

1. 調(diào)優(yōu)關(guān)注點(diǎn)

????????減少JVM不可用時(shí)間:STW(Stop the word)

????????GC 頻率

????????安全點(diǎn)SafePoint

安全點(diǎn)是需要注意的問題,很多初學(xué)者會(huì)忽略安全點(diǎn)線程等待時(shí)間沐寺,其實(shí)STW時(shí)間包括安全點(diǎn)等待時(shí)間林艘。

2. 常用GC回收器

????ParNew + CMS ????(低延遲、低核混坞、小內(nèi)存場(chǎng)景)

????G1???????????????????????? (高吞吐量狐援、高核钢坦、大內(nèi)存)

G1只有在多核CPU,大內(nèi)存情況下,才能體現(xiàn)出它的優(yōu)勢(shì)啥酱,如果內(nèi)存過小爹凹,表現(xiàn)反而不如ParNew+CMS。

那么到底多大算大內(nèi)存呢镶殷?

根據(jù)R大給出的建議是:以堆內(nèi)存8g為限禾酱,大于8g用G1,小于8g用CMS批钠。

3. JVM參數(shù)分類

????-:標(biāo)準(zhǔn)參數(shù)宇植,所有JVM都必須實(shí)現(xiàn),且向后兼容埋心。

????-X :非標(biāo)準(zhǔn)參數(shù)指郁,默認(rèn)JVM實(shí)現(xiàn)該參數(shù),不保證向后兼容拷呆。

????-XX:非stable參數(shù)闲坎,不同JVM有所不同,將來可能會(huì)取消茬斧。

4. G1關(guān)鍵參數(shù)

????-Xms16g?? -Xmx16g???

????-XX:+UseG1GC??? -XX:MaxGCPauseMillis=50??? -XX:InitiatingHeapOccupancyPercent=60? ?

????-verbose:gc ???-Xloggc:logs/gc_%p.log??? -XX:+DisableExplicitGC

????-XX:-UseLargePages? -XX:+PrintGCApplicationStoppedTime? -XX:-OmitStackTraceInFastThrow?

????-XX:+PrintSafepointStatistics? -XX:PrintSafepointStatisticsCount=1

需要注意的是腰懂,G1最好不要加新生代大小參數(shù)?-Xmn ,如果固定了新生代大小项秉,G1就沒法根據(jù) -XX:MaxGCPauseMillis 設(shè)定的最大期望GC時(shí)間绣溜,動(dòng)態(tài)調(diào)整堆內(nèi)存的新生代和老年代大小,相當(dāng)于-XX:MaxGCPauseMillis 失效了娄蔼。除非你很熟悉G1原理怖喻,加了新生代大小,配合其他參數(shù)岁诉,也可以調(diào)優(yōu)出一個(gè)不錯(cuò)的結(jié)果锚沸。否則還是交給G1本身的自動(dòng)調(diào)整吧。

5. GC 日志

2020-01-09T11:05:34.836+0800: [GC pause (G1 Evacuation Pause) (young) ……

[Eden: 8576.0M(8576.0M)->0.0B(8576.0M) Survivors: 16.0M->16.0M Heap: 8643.7M(14.0G)->68.2M(14.0G)]

[Times: user=0.05 sys=0.04, real=0.02 secs]

2020-01-09T11:05:34.863+0800: 2043140.818: Total time for which application threads were stopped:0.0286394 seconds, Stopping threads took: 0.0002674 seconds

2020-01-09T12:01:10.488+0800: 2046476.443: Application time: 3335.6250688 seconds

2020-01-09T12:01:10.490+0800: 2046476.444: [GC pause (G1 Evacuation Pause) (young) 2046476.444:


gc日志中 Stopping threads took 就是安全點(diǎn)時(shí)涕癣,線程的等待時(shí)間哗蜈,所以STW時(shí)間應(yīng)該是:GC時(shí)間 + 安全點(diǎn)等待時(shí)間。

如果 Stopping threads took 較大坠韩,說明代碼程序是有問題的距潘,需要深入查看;

具體什么情況會(huì)導(dǎo)致安全點(diǎn)時(shí)間過長(zhǎng)只搁,請(qǐng)參考:

JVM安全點(diǎn)介紹

HBase實(shí)戰(zhàn):記一次Safepoint導(dǎo)致長(zhǎng)時(shí)間STW的踩坑之旅


Linux調(diào)優(yōu)

我在對(duì)業(yè)務(wù)項(xiàng)目绽昼、RocketMQ、Redis须蜗、codis集群、Elasticsearch、Hbase等進(jìn)行優(yōu)化過程中明肮,經(jīng)常遇到一些相同的問題菱农,我總結(jié)了下,主要有以下:

慎用交換區(qū)swap

? ? ? ? 優(yōu)化方式:禁止swapping 或者設(shè)置?swappiness = 1

? ? ? ? swapping會(huì)導(dǎo)致gc過程從毫秒級(jí)變成分鐘級(jí)

善用 /dev/shm/

? ? ? ?/dev/shm/ 是linux的文件內(nèi)存系統(tǒng)柿估,是共享內(nèi)存循未,直接從物理內(nèi)存中開辟,根據(jù)使用情況會(huì)動(dòng)態(tài)擴(kuò)容秫舌。

針對(duì)一些寫入文件的妖,IO性能要求高的場(chǎng)景,可以使用/dev/shm/足陨,例如gc日志存放嫂粟。

高并發(fā)場(chǎng)景下,如果打開安全點(diǎn)日志墨缘,安全點(diǎn)日志是在安全點(diǎn)內(nèi)打印星虹,是同步的,所以日志寫入文件速度镊讼,會(huì)嚴(yán)重影響gc快慢宽涌;應(yīng)當(dāng)將gc日志配置改為:

-Xloggc:/dev/shm/gc_%p.log

其他linux調(diào)優(yōu),一般大點(diǎn)的公司蝶棋,都會(huì)有自己的運(yùn)維團(tuán)隊(duì)卸亮,運(yùn)維就會(huì)做基本的優(yōu)化,例如tcp連接優(yōu)化等玩裙,這里只介紹運(yùn)維可能忽略的兼贸,不知道的點(diǎn),這時(shí)候就需要研發(fā)同學(xué)介入献酗,找運(yùn)維做好應(yīng)用相關(guān)的Linux內(nèi)核優(yōu)化寝受。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罕偎,隨后出現(xiàn)的幾起案子很澄,更是在濱河造成了極大的恐慌,老刑警劉巖颜及,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩苛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俏站,警方通過查閱死者的電腦和手機(jī)讯蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肄扎,“玉大人墨林,你說我怎么就攤上這事赁酝。” “怎么了旭等?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵酌呆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我搔耕,道長(zhǎng)隙袁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任弃榨,我火速辦了婚禮菩收,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲸睛。我一直安慰自己娜饵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布腊凶。 她就那樣靜靜地躺著划咐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钧萍。 梳的紋絲不亂的頭發(fā)上褐缠,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音风瘦,去河邊找鬼队魏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛万搔,可吹牛的內(nèi)容都是我干的胡桨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼瞬雹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼昧谊!你這毒婦竟也來了魂仍?” 一聲冷哼從身側(cè)響起国夜,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎富蓄,沒想到半個(gè)月后胖缤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚镰,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年哪廓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狗唉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涡真,死狀恐怖分俯,靈堂內(nèi)的尸體忽然破棺而出肾筐,到底是詐尸還是另有隱情,我是刑警寧澤澳迫,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布局齿,位于F島的核電站,受9級(jí)特大地震影響橄登,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讥此,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一拢锹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萄喳,春花似錦卒稳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至染突,卻和暖如春捻爷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背份企。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工也榄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人司志。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓甜紫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親骂远。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囚霸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容