java線上解決思路記錄

某天,具體是哪天記不清楚裏,時間緊要沒截圖裏。
懷着激動的心情,終於有機會處理線上問題,特此把問題記錄下,分享給小夥伴,寫的有點爛,文采不好,不對的地方,大家指出

問題一、後臺系統線上頁面出現加載慢、加載不出來的情況。
問題是我同事發現,處理過程向他請教了不少的問題,特此謝謝他。
出現這類問題,就猜想是代碼邏輯、SQL出現的問題,光想還是不切實際的。還是要去找出問題,出現問題肯定是去看日誌嘛,打開業務服務器,業務服務器是我們取得名字,公司裏好幾個服務器,業務服務器裏是項目運行的代碼,cd 到對應目錄下log。vim打開直接底部輸入/ $日誌切換到底部,日誌有點多,一行一行找很耗時間,底部的日誌是最新的。發現有異常開頭記錄的是項目名以及包名,想問題是出在這裏,仔細一點找,找到對應的類以及方法,英語不好,嘿嘿,用的Google翻譯,翻譯大致意思方法調用超時。超時3秒,中間爲什麼超時,是用的zk技術,問題已經很明顯裏。回到本地項目,找到對應的服務下面的類、方法太多了,一個個去找很耗時間,嘿嘿,用了一個小技巧shirt + ctrl + alt + n找類很快。小夥伴們可以自己去試試。找到問題所在把代碼邏輯看一遍,SQL看一遍,SQL用執行計劃試一下,索引之類挺正常,我在想爲什麼會出問題,回到代碼邏輯,猜想可以測測代碼查詢數據庫的執行時間,currentTimeMillis() 不會的小夥伴可以去百度,我也是百度的,嘿嘿。測試結果得出一比較某一處的代碼超過裏2秒,時間很長,for循環查詢數據庫IO開銷很大,隨着數據的增多,問題終於找到裏。這是要改邏輯,改吧。XXXX。改好裏測試一下時間只有200毫秒,用posm測試代碼,運行正常OK,打包上線,出問題裏,數據一部分沒裏,邏輯改的有問題,沒有本地項目測試。好吧,吸取教訓一定要本地測試完纔去上線,有一點是,本地測試拷貝線上的數據更準哦,老大哥那裏學的。

問題二、手機系統功能頁面數據是空白
1.15號解決的問題,平時工作很忙,繼續記錄過程,方便記錄特保存了x張圖片,老大哥不在,挺懷戀他的,問題是使用人員王哥發現的,羣裏找到這張圖片。客服要我們的產品嘛,公司要把產品測試一遍確認安裝過程沒問題,發給客服。
在這裏插入圖片描述
首先謝謝劉哥,把所有的問題都排查一遍,一開始覺得問題是服務器造成的,平時沒少發脾氣。找到對應的服務器,服務器kill 9 進程。nohup java --重啓沒解決。這問題大了,你看看吧,心裏默想這麼難,並丟給我一張圖片
在這裏插入圖片描述
看到前綴包名地址,後面類名,行數487。提供了定位問題的信息。去對應服務模塊找,一個個太難找。有一套快捷鍵賊快。全局項目搜索類名,找到對應的類,大致的看了一遍代碼,沒去多看,找不到問題。親自去看看服務器日誌,看日誌最底層時間最新,發現一個大問題特此還粘貼部分保存着,拿出來和大夥分享。

java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

看到有個方法,猜想這方法的問題,問題根源找到,機器是不會騙我的
特此還找到拋出此異常的方法,不好意思,這是mybatis源碼裏的異常,仔細看異常是我們log日誌記錄的一樣
在這裏插入圖片描述
找到根源所在,下一步就百度。這方法什麼作用,大致意思是個查詢返回一條數據方法。項目中單表操作就沒寫sql語句,選擇重寫這個方法,異常信息返回的數據條數大於1條就會報錯,回到項目中找到此重寫的方法,返回值是一個對象。同時返回二條數據,報錯。得改,改成返回Llist對象方法。接受多個對象。同步數據庫數據,測試沒問題。打包install,包上傳到服務器,上傳發布就懶得記錄裏。 這類問題在前期看不到,很正常。隨着系統的使用,數據增多問題就自然出現。

問題三、待發現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章