免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
重啟大法好!線上常見(jiàn)問(wèn)題排查手冊(cè)


一  線上常見(jiàn)問(wèn)題定位

常見(jiàn)問(wèn)題 1:CPU 利用率高

CPU 使用率是衡量系統(tǒng)繁忙程度的重要指標(biāo),一般情況下單純的 CPU 高并沒(méi)有問(wèn)題,它代表系統(tǒng)正在不斷的處理我們的任務(wù),但是如果 CPU 過(guò)高,導(dǎo)致任務(wù)處理不過(guò)來(lái),從而引起 load 高,這個(gè)是非常危險(xiǎn)需要關(guān)注的。 CPU 使用率的安全值沒(méi)有一個(gè)標(biāo)準(zhǔn)值,取決于你的系統(tǒng)是計(jì)算密集型還是 IO 密集型,一般計(jì)算密集型應(yīng)用 CPU 使用率偏高 load 偏低,IO 密集型相反。

問(wèn)題原因及定位:

1  頻繁 FullGC/YongGC

  • 查看 gc 日志

  • jstat -gcutil pid  查看內(nèi)存使用和 gc 情況


2  代碼消耗,如死循環(huán),md5 等內(nèi)存態(tài)操作

1)arthas (已開(kāi)源:https://github.com/alibaba/arthas)

  • thread -n 5  查看 CPU 使用率最高的前 5 個(gè)線程(包含堆棧,第二部分有詳解)

2)jstack 查找

  • ps -ef | grep java  找到 Java 進(jìn)程 id

  • top -Hp pid  找到使用 CPU 最高的線程

  • printf ‘0x%x’  tid  線程 id 轉(zhuǎn)化 16 進(jìn)制

  • jstack pid | grep tid  找到線程堆棧

                   


ps:輸入“1”可查看每個(gè) CPU 的情況,之前有團(tuán)隊(duì)遇到單個(gè) CPU 被中間件綁定導(dǎo)致 CPU 飚高的 case。

常見(jiàn)問(wèn)題 2:load 高

load 指單位時(shí)間內(nèi)活躍進(jìn)程數(shù),包含運(yùn)行態(tài)(runnable 和 running)和不可中斷態(tài)( IO、內(nèi)核態(tài)鎖)。關(guān)鍵字是運(yùn)行態(tài)和不可中斷態(tài),運(yùn)行態(tài)可以聯(lián)想到 Java 線程的 6 種狀態(tài),如下,線程 new 之后處于 NEW 狀態(tài),執(zhí)行 start 進(jìn)入 runnable 等待 CPU 調(diào)度,因此如果 CPU 很忙會(huì)導(dǎo)致 runnable 進(jìn)程數(shù)增加;不可中斷態(tài)主要包含網(wǎng)絡(luò) IO、磁盤(pán) IO 以及內(nèi)核態(tài)的鎖,如 synchronized 等。


問(wèn)題原因及定位:

1  CPU 利用率高,可運(yùn)行態(tài)進(jìn)程數(shù)多

  • 排查方法見(jiàn)常見(jiàn)問(wèn)題一

2  iowait,等待 IO

  • vmstat  查看 blocked 進(jìn)程狀況

  • jstack -l pid | grep BLOCKED  查看阻塞態(tài)線程堆棧


3  等待內(nèi)核態(tài)鎖,如 synchronized

  • jstack -l pid | grep BLOCKED  查看阻塞態(tài)線程堆棧


  • profiler  dump 線程棧,分析線程持鎖情況


常見(jiàn)問(wèn)題 3:持續(xù) FullGC

在了解 FullGC 原因之前,先花一點(diǎn)時(shí)間回顧下 jvm 的內(nèi)存相關(guān)知識(shí):

內(nèi)存模型

新 new 的對(duì)象放在 Eden 區(qū),當(dāng) Eden 區(qū)滿之后進(jìn)行一次 MinorGC,并將存活的對(duì)象放入 S0;


當(dāng)下一次 Eden 區(qū)滿的時(shí)候,再次進(jìn)行 MinorGC,并將存活的對(duì)象和 S0 的對(duì)象放入S1(S0 和 S1 始終有一個(gè)是空的);


依次循環(huán)直到 S0 或者 S1 快滿的時(shí)候?qū)?duì)象放入 old 區(qū),依次,直到 old 區(qū)滿進(jìn)行 FullGC。


jdk1.7 之前 Java 類(lèi)信息、常量池、靜態(tài)變量存儲(chǔ)在 Perm 永久代,類(lèi)的原數(shù)據(jù)和靜態(tài)變量在類(lèi)加載的時(shí)候放入 Perm 區(qū),類(lèi)卸載的時(shí)候清理;在 1.8 中,MetaSpace 代替 Perm 區(qū),使用本地內(nèi)存,常量池和靜態(tài)變量放入堆區(qū),一定程度上解決了在運(yùn)行時(shí)生成或加載大量類(lèi)造成的 FullGC,如反射、代理、groovy 等。


回收器

年輕代常用 ParNew,復(fù)制算法,多線程并行;

老年代常用 CMS,標(biāo)記清除算法(會(huì)產(chǎn)生內(nèi)存碎片),并發(fā)收集(收集過(guò)程中有用戶線程產(chǎn)生對(duì)象)。

關(guān)鍵常用參數(shù)

  • CMSInitiatingOccupancyFraction 表示老年代使用率達(dá)到多少時(shí)進(jìn)行 FullGC;


  • UseCMSCompactAtFullCollection 表示在進(jìn)行 FullGC 之后進(jìn)行老年代內(nèi)存整理,避免產(chǎn)生內(nèi)存碎片。


問(wèn)題原因及定位:

1  prommotion failed

從S區(qū)晉升的對(duì)象在老年代也放不下導(dǎo)致 FullGC(fgc 回收無(wú)效則拋 OOM)。

1)survivor 區(qū)太小,對(duì)象過(guò)早進(jìn)入老年代。

  • jstat -gcutil pid 1000  觀察內(nèi)存運(yùn)行情況;


  • jinfo pid  查看 SurvivorRatio 參數(shù);


2)大對(duì)象分配,沒(méi)有足夠的內(nèi)存。

  • 日志查找關(guān)鍵字 “allocating large”;


  • profiler  查看內(nèi)存概況大對(duì)象分布;


3)old 區(qū)存在大量對(duì)象。

  • 實(shí)例數(shù)量前十的類(lèi):jmap -histo pid | sort -n -r -k 2 | head -10


  • 實(shí)例容量前十的類(lèi):jmap -histo pid | sort -n -r -k 3 | head -10


  • dump 堆,profiler 分析對(duì)象占用情況

2  concurrent mode failed

在 CMS GC 過(guò)程中業(yè)務(wù)線程將對(duì)象放入老年代(并發(fā)收集的特點(diǎn))內(nèi)存不足。詳細(xì)原因:

1)fgc 觸發(fā)比例過(guò)大,導(dǎo)致老年代占用過(guò)多,并發(fā)收集時(shí)用戶線程持續(xù)產(chǎn)生對(duì)象導(dǎo)致達(dá)到觸發(fā) FGC 比例。

  • jinfo  查看 CMSInitiatingOccupancyFraction 參數(shù),一般 70~80 即可


2)老年代存在內(nèi)存碎片。


  • jinfo  查看 UseCMSCompactAtFullCollection 參數(shù),在 FullGC 后整理內(nèi)存


常見(jiàn)問(wèn)題 4:線程池滿

Java 線程池以有界隊(duì)列的線程池為例,當(dāng)新任務(wù)提交時(shí),如果運(yùn)行的線程少于 corePoolSize,則創(chuàng)建新線程來(lái)處理請(qǐng)求。如果正在運(yùn)行的線程數(shù)等于 corePoolSize 時(shí),則新任務(wù)被添加到隊(duì)列中,直到隊(duì)列滿。當(dāng)隊(duì)列滿了后,會(huì)繼續(xù)開(kāi)辟新線程來(lái)處理任務(wù),但不超過(guò) maximumPoolSize。當(dāng)任務(wù)隊(duì)列滿了并且已開(kāi)辟了最大線程數(shù),此時(shí)又來(lái)了新任務(wù),ThreadPoolExecutor 會(huì)拒絕服務(wù)。

問(wèn)題原因及定位:

1  下游 RT 高,超時(shí)時(shí)間不合理

  • 業(yè)務(wù)監(jiān)控

  • sunfire

  • eagleeye


2  數(shù)據(jù)庫(kù)慢 sql 或者數(shù)據(jù)庫(kù)死鎖

  • 日志關(guān)鍵字 “Deadlock found when trying to get lock”


  • Jstack 或 zprofiler 查看阻塞態(tài)線程


3  Java 代碼死鎖

  • jstack –l pid | grep -i –E 'BLOCKED | deadlock'


  • dump thread 通過(guò) zprofiler 分析阻塞線程和持鎖情況


常見(jiàn)問(wèn)題 5:NoSuchMethodException

問(wèn)題原因及定位:

1  jar 包沖突

 java 在裝載一個(gè)目錄下所有 jar 包時(shí),它加載的順序完全取決于操作系統(tǒng)。

  • mvn dependency:tree  分析報(bào)錯(cuò)方法所在的 jar 包版本,留下新的


  • arthas:sc -d ClassName


  • XX:+TraceClassLoading


2  同類(lèi)問(wèn)題

  • ClassNotFoundException

  • NoClassDefFoundError

  • ClassCastException


二  常用工具介紹

常用命令

1  tail

  • -f   跟蹤文件


2  grep

  • -i   忽略大小寫(xiě)


  • -v  反轉(zhuǎn)查找


  • -E  擴(kuò)展正則表達(dá)式 :grep -E 'pattern1|pattern2' filename


3  pgm

  • -b  開(kāi)啟并發(fā)


  • -p  指定并發(fā)數(shù)


  • -A  開(kāi)啟 askpass


4  awk

  • -F  指定分隔符:awk -F “|”  '{print $1}‘ | sort -r | uniq -c


5  sed

  • 時(shí)間段匹配:sed '/2020-03-02 10:00:00/,/2020-03-02 11:00:00/p' filename


arthas

阿里巴巴開(kāi)源 Java 診斷工具(開(kāi)源地址:https://github.com/alibaba/arthas),基于 javaAgent 方式,使用 Instrumentation 方式修改字節(jié)碼方式進(jìn)行 Java 應(yīng)用診斷。

基礎(chǔ)功能介紹

  • dashboard:系統(tǒng)實(shí)時(shí)數(shù)據(jù)面板, 可查看線程,內(nèi)存,gc 等信息


  • thread:jvm 線程堆棧信息,如查看最繁忙的前 n 線程


  • getstatic:獲取靜態(tài)屬性值,如 getstatic className attrName 可用于查看線上開(kāi)關(guān)真實(shí)值


  • sc:查看 jvm 已加載類(lèi)信息,可用于排查 jar 包沖突


  • sm:查看 jvm 已加載類(lèi)的方法信息


  • jad:反編譯 jvm 加載類(lèi)信息,排查代碼邏輯沒(méi)執(zhí)行原因


  • watch:觀測(cè)方法執(zhí)行數(shù)據(jù),包含出入?yún)?,異常等?/p>


watch xxxClass xxxMethod ' {params, throwExp} '  -e -x 2

watch xxxClass xxxMethod '{params,returnObj}' 'params[0].sellerId.equals('189')' -x 2

watch xxxClass xxxMethod sendMsg '@com.taobao.eagleeye.EagleEye@getTraceId()'

  • trace:方法內(nèi)部調(diào)用時(shí)長(zhǎng),并輸出每個(gè)節(jié)點(diǎn)的耗時(shí),用于性能分析


  • tt:用于記錄方法,并做回放


三  常見(jiàn)問(wèn)題恢復(fù)

1  線程池滿


  • rpc 框架線程池滿


高 RT 接口進(jìn)行線程數(shù)限流


  • 應(yīng)用內(nèi)線程池滿


重啟可短暫緩解,具體還得看問(wèn)題原因


2  CPU 高,load 高

  • 單機(jī)置換或重啟,可短暫緩解,恢復(fù)看具體原因


  • 集群高且流量大幅增加,擴(kuò)容,恢復(fù)看具體原因


3  下游 RT 高

  • 限流


  • 降級(jí)


4  數(shù)據(jù)庫(kù)

  • 死鎖


kill 進(jìn)程


  • 慢 sql


sql 限流


線上問(wèn)題的排查是一個(gè)積累的過(guò)程,只有了解問(wèn)題背后的原理才能更快速的定位和恢復(fù),除此之外更需要有一些趁手的工具來(lái)輔助排查,從而降低整個(gè)團(tuán)隊(duì)問(wèn)題定位和快恢的門(mén)檻。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JAVA 線上故障排查全套路
Linux系統(tǒng)監(jiān)控命令及如何定位到Java線程
Java性能問(wèn)題定位---CPU過(guò)高
jstack分析cpu占用100%(轉(zhuǎn))
史上最全最詳細(xì)的JVM優(yōu)化方案---建議收藏
記一次springboot 故障:接口無(wú)響應(yīng)--》CPU 100%---》log無(wú)法寫(xiě)入---》磁盤(pán)滿了
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服