久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  行業(yè)資訊  > 線上項(xiàng)目出故障,該怎么辦?!

線上項(xiàng)目出故障,該怎么辦?!

來源:千鋒教育
發(fā)布人:syq
時間: 2023-05-26 16:13:00 1685088780

  問題復(fù)現(xiàn)

  在以前的文章中,小千分享了以前在工作中遇到的線上業(yè)務(wù)BUG解決思路,今天我會結(jié)合自己的授信中心這個金融項(xiàng)目,繼續(xù)給大家分析如何對自己遇到的故障進(jìn)行定位與解決,希望本文可以對缺乏實(shí)際開發(fā)經(jīng)驗(yàn)的小白有所幫助。

線上項(xiàng)目出故障

  其實(shí)要想解決開發(fā)故障,通常的解決思路大致如下:

  1.分析問題,根據(jù)理論知識+經(jīng)驗(yàn)分析問題所在,并將錯誤鎖定在一定的范圍內(nèi);

  2.通過錯誤日志,快速定位問題。線上定位問題時,主要是依靠監(jiān)控和日志。

  比如小千老師遇到過這樣一個問題:

  線上的金融項(xiàng)目啟動后,運(yùn)行速度越來越慢,一段時間后直接無法訪問,但此時的內(nèi)存使用率正常,而CPU使用率幾乎滿負(fù)荷。在重啟項(xiàng)目后,又運(yùn)行了一段時間,項(xiàng)目重復(fù)出現(xiàn)該問題。

  解決思路

  對于這種線上的故障,我們該怎么解決呢?其解決思路可以按照以下幾個步驟來實(shí)現(xiàn)。

  其實(shí),大多數(shù)情況下,只要出問題,我們都可以利用 df(查看磁盤)、free(查看內(nèi)存)、top(查看CPU) 來個素質(zhì)三連,然后再通過jstack(Java堆棧跟蹤工具)、jmap(Java堆和方法區(qū)的詳細(xì)信息)等工具排查。這些工具的具體使用命令,大家可以自行查閱。

  1.top命令

  top命令或者其他監(jiān)控數(shù)據(jù),用于查看服務(wù)器的內(nèi)存、cpu的使用情況。

  2.jps命令

  查看當(dāng)前java程序的進(jìn)程號,假如為:17357,

  3.jstat命令

  jstat -gc 17357 2000,可以查看jvm的內(nèi)存分配情況,如圖:

5

  接著我們再通過查看EU和OU、YGC、FGC的變化,來調(diào)整jvm的內(nèi)存、young區(qū)(edge,s1,s2)、old區(qū)內(nèi)存大小。

  可靠建議:

  修改JAVA_OPTS='-Xms1024m -Xmx1024m' ,將jvm的最大、最小內(nèi)存設(shè)為系統(tǒng)內(nèi)存的3/4。根據(jù)ygc,調(diào)整young區(qū)中s與edge比例,根據(jù)fgc的頻率調(diào)整young區(qū)和old區(qū)的大小(或比例)。

  然后通過jstack 進(jìn)程id,來查看線程的死鎖,例如:jstack -l 21733 | more,若出現(xiàn)下圖所示,則是出現(xiàn)了線程死鎖。

6

  4.tomcat優(yōu)化

  我們也可以在yml文件中tomcat的配置進(jìn)行優(yōu)化。

server:
port: 9105
tomcat:
threads:
# 處理請求的最大線程數(shù)
max: 350
# 最小的工作線程數(shù)
min-spare: 100
# 等待隊列的最大隊列長度
accept-count: 500

   5.設(shè)置數(shù)據(jù)庫連接池

  對于數(shù)據(jù)庫服務(wù)(如mysql),dba在部署的時候,都會設(shè)置db的最大內(nèi)存和最大鏈接數(shù),開發(fā)人員可以暫時忽略。

  另外,數(shù)據(jù)庫連接池請盡量別用dbch、c3p0等已經(jīng)過時的連接池技術(shù),推薦使用阿里巴巴的druid,其相關(guān)的鏈接配置,請參照其github的官網(wǎng)。

  具體解決過程

  結(jié)合以上解決思路,接下來給大家說一下我的具體解決過程。

  1.top定位

  由于cpu滿負(fù)荷,所以我先通過top定位到出現(xiàn)問題的線程。發(fā)現(xiàn)確實(shí)是我們的java項(xiàng)目所在進(jìn)程吃掉了所有的cpu資源,這時可通過jps+jstat來查看java的gc狀態(tài),進(jìn)一步發(fā)現(xiàn)young gc幾乎是一秒一次,fullgc沒有。所以接著我又查看了jvm的設(shè)置,young內(nèi)存才設(shè)為512m,我先去掉了這個配置,而是采用默認(rèn)配置(young:old =1:2)。

  在重啟項(xiàng)目之后,young gc基本到了10多秒一次,可項(xiàng)目運(yùn)行一段時間還是會卡死。然后我又看了下tomcat的連接池,發(fā)現(xiàn)全部都是默認(rèn)配置(默認(rèn)最大連接數(shù)為50),故先將最大鏈接設(shè)為500,等待隊列設(shè)為1000,重啟項(xiàng)目,還是出現(xiàn)cpu滿負(fù)荷,系統(tǒng)卡死。

  2.排查數(shù)據(jù)庫服務(wù)的內(nèi)存

  接著我查看了輸出的最新日志文件,發(fā)現(xiàn)日志輸出到一個dao方法之后,在輸出響應(yīng)的sql后就卡住了。接著我通過mysql鏈接工具直接執(zhí)行,sql卻很快輸出,因此排除數(shù)據(jù)庫服務(wù)的內(nèi)存不足等硬件問題。

  3.調(diào)整日志輸出級別

  通過查看項(xiàng)目的框架,發(fā)現(xiàn)日志用的log4j(同步日志輸出),日志輸出級別是:INFO,這會導(dǎo)致項(xiàng)目里面的log輸出非常多,所以我先將log的輸出級別設(shè)為warn,重新啟動項(xiàng)目,項(xiàng)目正常運(yùn)行。

  4.優(yōu)化數(shù)據(jù)表

千鋒教育

  修改日志輸出級別為warn之后,運(yùn)行了一段時間發(fā)現(xiàn)系統(tǒng)又卡死了。這時還是兩個表的查詢卡死(通訊錄和通話記錄),這兩個表的存儲量級都是上億級別的,項(xiàng)目原有的邏輯是這樣的,用戶上傳通訊錄,需要刪除原來的通訊錄,再批量插入。這樣一個大表頻繁的進(jìn)行刪除與批量插入,很容易導(dǎo)致IO響應(yīng)慢。第一步,我先通過建立唯一索引,利用insert ignore into來減少該表的IO操作,接著重新啟動項(xiàng)目,系統(tǒng)正常運(yùn)行。

  5.添加索引

  加好索引優(yōu)化了sql語句之后,系統(tǒng)還是偶爾會出現(xiàn)卡死狀態(tài)。這時,我通過dba搜索慢查詢,發(fā)現(xiàn)通話記錄和通訊錄表中有一個排序查詢,該sql的末尾使用了order by update_time desc,但update_time沒有添加索引,這就導(dǎo)致該表的查詢至少要2秒以上。所以我將sql改為了order by id,查詢就正常了,重啟項(xiàng)目,系統(tǒng)正常運(yùn)行。

  6.解決線程死鎖

  至此,系統(tǒng)還是偶爾出現(xiàn)卡死現(xiàn)象(cpu爆表),只是頻率小了很多。這時我懷疑是有線程死鎖了,從而導(dǎo)致cpu爆表。我通過運(yùn)維查找linux線程,終于發(fā)現(xiàn)確實(shí)有一個線程出現(xiàn)了死鎖,里面的信息顯示是c3p0的連接池線程。我又通過查找資料,發(fā)現(xiàn)使用c3p0作為數(shù)據(jù)庫連接池,經(jīng)常會出現(xiàn)鏈接池卡死的問題,所以我趕緊將項(xiàng)目的連接池切換為durid,然后重啟項(xiàng)目,項(xiàng)目運(yùn)行正常。

  7.新增服務(wù)器節(jié)點(diǎn)

  但系統(tǒng)在進(jìn)件量較大時,依然有一定的幾率出現(xiàn)卡死現(xiàn)象,最好考慮是當(dāng)時的項(xiàng)目環(huán)境采用的是單機(jī)部署,所以最后協(xié)調(diào)運(yùn)維新增了兩個服務(wù)器節(jié)點(diǎn),至此項(xiàng)目運(yùn)行完全正常。

  針對線上服務(wù)器故障的解決思路和過程,百澤老師給大家提供了以下幾個可靠建議:

  系統(tǒng)框架太過于老舊時,可能會引發(fā)一系列的項(xiàng)目問題,所以適當(dāng)升級項(xiàng)目的技術(shù)是有必要的;

  一些大表一定要進(jìn)行拆分,否則在高并發(fā)的環(huán)境中,數(shù)據(jù)庫的IO會遇到瓶頸;

  減少一些不必要的日志輸出,日志輸出組件盡量是異步輸出的;

  一些高頻率查詢的字段,盡量加上索引、組合索引,一些慢查詢的sql優(yōu)化也很重要;

  服務(wù)盡量單獨(dú)部署。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
PMP?認(rèn)證榮獲北京市境外職業(yè)資格認(rèn)可!

北京市人力資源和社會保障局、北京市人才工作局近日發(fā)布了關(guān)于印發(fā)《北京市境外職業(yè)資格認(rèn)可目錄(3.0版)》的通知,新版目錄境外職業(yè)資格清單...詳情>>

2023-09-07 17:27:00
怎么選擇靠譜的短視頻運(yùn)營培訓(xùn)機(jī)構(gòu)?

怎么選擇靠譜的短視頻運(yùn)營培訓(xùn)機(jī)構(gòu)?5G時代的來臨,短視頻作為新媒體中最為主流的內(nèi)容更加方便用戶瀏覽觀看信息,因此抖音、快手這類的短視頻平...詳情>>

2023-09-07 15:05:06
全媒體短視頻運(yùn)營好就業(yè)么?

全媒體短視頻運(yùn)營好就業(yè)么?現(xiàn)在學(xué)習(xí)互聯(lián)網(wǎng)運(yùn)營可不能只會單個的運(yùn)營技術(shù),企業(yè)更喜歡全能型人才。如今的互聯(lián)網(wǎng)世界有多種平臺,新媒體、短視頻...詳情>>

2023-09-07 14:49:25
短視頻運(yùn)營培訓(xùn)機(jī)構(gòu)有用嗎?

短視頻運(yùn)營培訓(xùn)機(jī)構(gòu)有用嗎?短視頻的火熱,催生了一大批的網(wǎng)絡(luò)紅人、網(wǎng)紅賬號,這些短視頻賬號通過實(shí)現(xiàn)粉絲流量變現(xiàn),獲得了非常豐厚的收入,自...詳情>>

2023-09-06 13:49:12
大數(shù)據(jù)分析就業(yè)高薪崗位介紹

大數(shù)據(jù)分析就業(yè)高薪崗位介紹?大數(shù)據(jù)行業(yè)是一個快速發(fā)展的行業(yè),其主要特征是數(shù)據(jù)規(guī)模龐大、種類多樣、處理復(fù)雜。目前,大數(shù)據(jù)行業(yè)已經(jīng)成為全球...詳情>>

2023-09-06 13:42:47
開班信息
北京校區(qū)
  • 北京校區(qū)
  • 大連校區(qū)
  • 廣州校區(qū)
  • 成都校區(qū)
  • 杭州校區(qū)
  • 長沙校區(qū)
  • 合肥校區(qū)
  • 南京校區(qū)
  • 上海校區(qū)
  • 深圳校區(qū)
  • 武漢校區(qū)
  • 鄭州校區(qū)
  • 西安校區(qū)
  • 青島校區(qū)
  • 重慶校區(qū)
  • 太原校區(qū)
  • 沈陽校區(qū)
  • 南昌校區(qū)
  • 哈爾濱校區(qū)