記一次性能故障排查

最近一次公司服務出了一些性能的問題,主要是內存不釋放。

領到任務后就開始展開工作。項目是用.net core 6寫的,在框上應該不會有什么問題,這是大背景。另外服務是部署在k8s上的,于是就和性能測試人員,開發人員搭測試環境,展開問題重現的測試。

問題很簡單,集中在排查幾個大查詢,并發10個大查詢,每次請求數據在數十萬到上百萬條記錄,pod的內存就很快飆上去了,并且之后不釋放。重現了,就看看怎么解決吧,內存不釋放,第一個想到的就是手動GC一下看看什么現象,結果是手動GC是管理用的,那就說明服務內部沒有有效的調用GC,或調用的GC的釋放內存的速度,沒有請求增長內存的速度快。

這個問題可以通過修改項目配置,開啟項目工作站后臺并發回收模式,就能有效地改善。這是個配置,很容易做到,于是修改完后推到鏡像倉庫,并部署在性能pod中,再次進行測試。同樣的并發,同樣的請求,這時,內存會邊用邊回收,不會飆了。在觀察各項性能指標時,發現一個問題,當并發變更時,tps始終是30來個,更奇怪的是,pod的資源有有空閑,數據庫的資源也有空閑(大數據查庫的方案在路中)。這不僅僅是一個問題,還是一個棘手的問題。

先看看代碼邏輯,就是在service層先查一下緩存,拿上信息再查數據庫,回來的數據進行重組封裝,緩存用的官方分布式Redis緩存組件,數據庫訪問用的dapper,按理這些組件都應該是靠得住的,自己寫的邏輯中到是有少許復雜。總感覺是那里有個鎖,卡住了,所有資源都還有剩余,但tps起不來。

在這時,生產環境報出了504錯誤,網關超時,說明上游請求有超時現象。

這時又增加了排查任務,504超時,結合上面的分析,覺得tps上不來,更多的請求等待,必然會有超時的,隱隱覺得是一個問題,只要疏通那個鎖,就應該能解決504超時。同時經過測試發現,只要一個大查詢,數據量足夠大,需要數據庫等待,其他查詢就會卡住,這肯定會有504出現。

繼續排查吧,現在只能把這個復雜的查詢分解開來測試,只進行緩存操作,沒問題;只進行大數據查詢,資源占用也能上來。那就是只要緩存組合慢的大查詢,就有問題。

為了驗證問題,把Redis分布緩存組件改成內存式分布式緩存(因為測試是在單pod上進行),再次測試時,發現問題解決了,數據庫的cpu就會升起來,pod的cpu也會升,最終以數據庫cpu打滿結束,這個時候,tps也升到是150多個,這就足以說明官方Redis分布緩存有坑(原因是緩存包是從舊的版本升上來的,官方已發布新版本)。

到此,我的分析工作就告一段落,內存和tps上升不了(504也一樣的原因)都找到問題了。接下來那就整改代碼,再度進行性能測試,驗證問題。

想在這里說的是,排查性能問題是個慢活,細活,通過現象推斷問題,有很多時間,現象會把人帶偏,沒關系,再通過更多的現象進行再推斷,再排查。另外,不要相信所有組件都是可靠的,有可能單個可靠,組合就有問題,一定要分段排查,完整驗證,再去信任。

這次排查后,可能還有其他性能問題,沒關系,那就再排查,一個好的服務性能,肯定是經過千錘百煉的,不可能是天生的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282754.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html單選框 點擊取消選中,radio單選框再點擊取消選中

html:html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">單選框選項a選項b選項c選項dcheckradio.js://參數:obj為當前點擊的radio對象function onClickRadioStyle(obj){var…

開啟AngularJS 1.X的學習之路(1)

概念(1) AngularJS 應用 AngularJS 模塊&#xff08;Module&#xff09; 定義了 AngularJS 應用。AngularJS 控制器&#xff08;Controller&#xff09; 用于控制 AngularJS 應用。ng-app指令定義了應用, ng-controller 定義了控制器。eg: <div ng-app"myApp" ng-…

Hello boke!

Hello boke&#xff01;轉載于:https://www.cnblogs.com/yikuan-919/p/9319071.html

ASP.NET Core在.NET 7 RC1中的更新

原文鏈接&#xff1a;https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-rc-1/[1]原文作者&#xff1a;Daniel Roth翻譯&#xff1a;沙漠盡頭的狼(谷歌翻譯加持).NET 7 Release Candidate 1 (RC1) 現已推出[2]&#xff0c;其中包括對 ASP.NET Core 的許…

html5 tab菜單切換頁面,11個常用的jQuery TAB切換菜單源碼及制作教程

11個常用的jQuery TAB切換菜單源碼及制作教程SponsorTAB切換式菜單可以方便為我們減少很多網頁布局空間&#xff0c;而且用jQuery的話可以加入一些動畫效果&#xff0c;比如漸變&#xff0c;向左右滑動等&#xff0c;提升一定的用戶體驗&#xff0c;所以TAB菜單目前來說是很流行…

7.16 10.19-10.22

10.19 iptables規則備份和恢復[roothyc-01-01 ~]# service iptables save 保存iptables規則該命令會將規則保存在/etc/sysconfig/iptables將iptables規則備份到一個文件中[roothyc-01-01 ~]# iptables-save>/tmp/ipt.txt將iptables規則備份到ipt.txt文件中從備份規則的文件恢…

走進javascript——不起眼的基礎,值和分號

值 有時我很想知道javascript解析引擎是如何區分一個變量的值&#xff0c;比如下面這段代碼。 var x javascript; //javascript x "hello"; // hello x 555; //555 x null; //null x a; //a is not defined x true; //true 對于數字是直接賦值的&#xff0c;因…

ConcurrentDictionary字典操作竟然不全是線程安全的?

好久不見&#xff0c;馬甲哥封閉居家半個月&#xff0c;記錄之前遇到的一件小事。ConcurrentDictionary<TKey,TValue>絕大部分api都是線程安全的[1]&#xff0c;唯二的例外是接收工廠函數的api&#xff1a;AddOrUpdate、GetOrAdd&#xff0c;這兩個api不是線程安全的&…

碼農小汪-Hibernate學習8-hibernate關聯關系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...

近期我也是有點郁悶&#xff0c;究竟是程序中處理關聯關系。還是直接使用外鍵處理關聯關系呢&#xff1f;這個的說法不一致&#xff01;程序中處理這樣的關聯關系的話。自己去維護這樣的約束。這樣的非常樂觀的一種做法&#xff01;或者是直接在數據庫中處理這樣的直接的外鍵關…

HTML中彈窗中加入圖片,javascript里怎么實現點擊圖片彈出對話框?

JavaScript中可以使用document.getElementsByTagName方法后去img標簽&#xff0c;然后遍歷所有img標簽并為其添加點擊事件實現點擊彈出對話框。JavaScript實現點擊圖片彈出對話框&#xff1a;img {width: 500px;height: 300px;}//獲取所有的img標簽var imgObjs document.getEl…

Java學習優秀網站

各類程序員學習路線圖&#xff1a; http://www.runoob.com/coder-learn-path 博學谷&#xff1a; http://v.itcast.cn/map/22.html 慕課網&#xff1a; http://www.imooc.com/course/programdetail/pid/31 轉載于:https://www.cnblogs.com/Arsene/p/6441831.html

Dcloud課程2 什么是Dcloud

Dcloud課程2 什么是Dcloud 一、總結 一句話總結&#xff1a;DCloud提供了一套快速開發應用的跨平臺技術方案。 1、DCloud的產品架構&#xff1f; MUI(H5)HBuilder 2、什么是MUI&#xff1f; 最接近原生體驗的移動App的UI框架。 3、什么是H5&#xff1f; html5功能增強標準 二、…

html5 輪詢自動刷新數據,后臺調用exe,前端定時輪詢調用結果

前提使用asp.net core 2.1前端使用vueui使用element-ui前端發送請求用Axios新建asp.net core程序1.jpg修改Index.html{Layout null;}test{{ msg }}發送請求打開記事本// 創建 Vue 實例&#xff0c;得到 ViewModelvar vm new Vue({el: #app,data: {msg: 準備發送請求打開exe},…

洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek

題目描述 Bessie is playing hide and seek (a game in which a number of players hide and a single player (the seeker) attempts to find them after which various penalties and rewards are assessed; much fun usually ensues). She is trying to figure out in which…

使用ssh免密碼登錄Linux服務器

頻繁登錄Linux服務器時&#xff0c;使用ssh <username><host>的方式登錄&#xff0c;但是每次都需要輸入密碼是件很麻煩的事。我們還可以使用私鑰/公鑰對的方式在免密碼登錄服務器。首先需要在遠程服務器中安裝ssh-server服務&#xff0c;才可以使用ssh登錄。如果沒…

linux下tomcat開啟遠程調試

1.center下&#xff0c;在startup.sh文件首行中添加如下語句 declare -x CATALINA_OPTS"-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address8000"(不要換行&#xff0c;要在同一行)Ubuntu下&#xff0c;在catali…

.NET 7 RC1 發布

原文鏈接&#xff1a;https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-1/[1]原文作者&#xff1a;Jeremy Likness&#xff0c;Angelos Petropoulos&#xff0c;Jon Douglas翻譯&#xff1a;沙漠盡頭的狼(谷歌翻譯加持)今天我們宣布 .NET 7 候選版本 1。這是生產…

html 字符串最后加空格,html space空格符

htmlcss 代碼在網頁中如何插入打出空格字符實現方法**摘要瀏覽器總是會截短 HTML 頁面中的空格。HTML將所有空格字符&#xff0c;制表符&#xff0c;空格和回車符壓縮為一個字符。如果要縮進段落&#xff0c;則不能簡單地鍵入五個空格然后開始文本。 如果您在文本中寫 10 個空格…

.NET MAUI實戰 FilePicker

1.概要最近在遷移 GeneralUpdate.Tool的時候需要用到文件選擇&#xff0c;在MAUI中可以使用FilePicker進行選擇。ref1: https://gitee.com/Juster-zhu/GeneralUpdateref2:https://docs.microsoft.com/zh-cn/dotnet/maui/platform-integration/storage/file-picker?tabswindows…

SQL Server中,with as使用介紹

一&#xff0e;WITH AS的含義 WITH AS短語&#xff0c;也叫做子查詢部分&#xff08;subquery factoring&#xff09;&#xff0c;可以讓你做很多事情&#xff0c;定義一個SQL片斷&#xff0c;該SQL片斷會被整個SQL語句所用到。有的時候&#xff0c;是為了讓SQL語句的可讀…