效能壓測詭異的Requests/second 響應刺尖問題,requestssecond

來源:互聯網
上載者:User

效能壓測詭異的Requests/second 響應刺尖問題,requestssecond

最近一段時間都在忙著轉java項目最後的衝刺,前期的coding翻代碼、debug、fixbug都逐漸收尾,進入上線前的效能壓測。

雖然不是大促前的效能壓測要求,但是為了安全起見,需要摸個底心裡有個數。

畢竟這次轉java的服務都是集團核心公用服務(主要是訂單網域服務)。(等我們順利上線了,我再來好好總結下其中的坎坷和壯舉。)

廢話不多說了,直接進入主題。

由於這次壓測主要重點是關注正向的兩個核心訂單服務,下單服務、查單服務。查單服務初步壓測下來問題不大,主要是db的索引和cache的問題。

下單服務有兩個核心介面,預訂單查詢、建立訂單。預訂單查詢主要是訂單的前置狀態的結算頁匯總計算(不僅是結算頁),不落具體訂單,如,各種促銷、卡券碼、虛擬幣的規則計算等等。

建立訂單邏輯稍微複雜點,對周邊的系統及中介軟體依賴也比較多,所以需要重點關注,至少心中要有數,哪怕下遊的哪個服務的效能有問題,在下次大促的時候可以最佳化掉。

(並不是說所有效能問題都需要及時最佳化,只要保證能撐得起業務量的一定範圍就好,因為效能最佳化無止境,需要把握好節奏。)

提交橫向壓測前我們需要自己先過一遍,這樣才能加快壓測的效率,由於時間比較緊再加上客觀的環境問題,我將服務中幾個沒有壓測環境的依賴去掉。(有關壓測的一些實踐我將在下篇文章好好總結下,這裡就不展開了。)壓測了幾輪(時間差不多30分鐘左右。),消除了一些環境、代碼、依賴的障礙,提交橫向走壓測流程,接著就去忙其他的事情了。(詭異的問題比較多~_~,mybatis pagehelperplugin好像也有點並發問題,還沒定位到,不知道是用的不對還是什麼情況,繼續排查,有結論了我在總結分享下。)

1.壓測報告:

2.查看伺服器監控情況:

JAVA GC:

3.查看DB情況:

4.分析

上面圖中有一幅圖有點問題,不知道大家看出來了沒有。就是我下單服務的應用伺服器的網路流量有問題,receive、send對不上。

5.排查

其實這個時候有一個結論,就是伺服器其實沒有瓶頸,不管是應用伺服器還是DB、cache。那問題應該是在程式方面。(效能分析由上至下、由下至上集合分析《java效能最佳化權威指南》)。

開始嘗試排查依賴服務,下單服務主要依賴商品、促銷。cache不是問題,因為本地有一級緩衝,而且緩衝的到期時間對不上,壓測環境的redis和MySQL在一台機器上。所以DB沒有問題,基本上redis應該也沒啥問題。(這台機器很強悍)還有部分的依賴業務方的介面我已經注釋掉了,不會有依賴。

開始懷疑商品、促銷,但是我之前分別對這兩個服務進行過壓測,這兩個服務基本上都是命中cache,QPS基本上接近18000。現在也只好對這兩個服務再進行一輪詳細的壓測。

結果很遺憾,沒啥線索,效能很好。

開始排查線程池問題,是否有block線程,通過jstack 列印出線程,基本上都是XNIO的condition wait,也沒有啥不正常。因為下單服務的其他介面都挺正常的,線程池問題應該不大。下單成功之後有意個hold的情境,就是hold虛擬幣、卡券碼等等之類的邏輯,這裡面使用了fiexd線程池(5個,設定了飽和策略及日誌輸出。),問題也不大。

開始排查日誌,restful-slow.log,jdbc-slow.log、錯誤記錄檔等等,一頓cat… grep…wc –l,啥也沒有異常。(shit開始冒汗了。。。)

只能上大招了,開始嘗試注代碼,然後壓測,逐個嘗試,先注釋DB、然後線程池hold邏輯、然後發送訊息。(無賴之舉。。。)

6.浮出水面

等我嘗試注釋掉發送訊息的邏輯時候發現問題不出現了,有希望了。開始進去看代碼,沒啥邏輯,走的是spring 的RabbitTemplate.convertAndSend 方法。(這是個同步方法,沒有任何聲明說他是async的。)

/**發送訊息*/
template.convertAndSend(messageConfig.getExchangeName(), routingKey, message, amqpMessage -> {

翻了下資料,沒啥特殊的使用要求。

順便看了下設定檔,發送訊息走的是qa環境,這個我知道,因為當時壓測環境的rabbitmq一時還沒好,而且我們走的是先定義再使用queue的流程,所以如果要用我需要先上去配置好才能使用。當時圖省事就先用了,自己壓測下來也沒啥問題,畢竟MQ的設計輸送量都很高的,TPS足夠我們用的,再加上我之前也壓過qa的MQ沒啥問題。

(資源沒隔離是因為一些客觀原因,有時候壓測環境是臨時搭建的。用到qa環境的中介軟體還有codis,但是codis基本是二級緩衝,所以問題不大,先過。(回頭沒轍再來找它。)

搞來了qa環境的rabbitmq伺服器帳號,同時開啟rabbtimq管理介面中的dashboard。開始重點關注這台伺服器。(top命名開啟,P\M看下rabbitmq各項指標。)

7.打臉

等我在開會的時候,壓測兄弟找我,哥哥那個問題又出現了。

8.總結

能隔離環境的盡量隔離,排查環境問題最頭疼,但是有時候又無法避免。(下篇壓測文章分享下,環境問題的排查方式和工具)

遇到問題一定要搞清楚根源,就算找不到根源也知道把它限定在某個範圍內,比如限制到DB、作業系統等等。

 

作者:王清培

出處:http://www.cnblogs.com/wangiqngpei557/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.