這部技術(shù)葵花寶典真的很硬核

【這是一猿小講的第?35?篇原創(chuàng)分享】

你有沒有經(jīng)歷過:一大早就被瘋狂的報警炸醒,由于線上應(yīng)用 CPU 占用率過高 ......

你有沒有經(jīng)歷過:剛到公司,板凳還沒有捂熱,收件箱里卻一堆的客服投訴郵件,需要你排查日志定位問題?......?

你有沒有經(jīng)歷過:下班的鐘聲即將敲響,但是你還要加班,進行統(tǒng)計應(yīng)用每秒、每分鐘的峰值等各個指標(biāo) ,由于 BOSS 要拿這些指標(biāo),在明天的技術(shù)大會上對外吹牛?......

你有沒有經(jīng)歷過:深夜正在酣眠,值班的運維瘋狂給你打 CALL,由于線上應(yīng)用內(nèi)存出現(xiàn)了問題?......

我敢保證上面的場景,大概率你都經(jīng)歷過。講真,其實無論你是否經(jīng)歷過,今天你都算來著啦。因為我將要結(jié)合以往的經(jīng)歷總結(jié),在猿門開壇設(shè)法,掏出葵花寶典施展一二。

水滴石穿非一日之功,冰凍三尺非一日之寒,羅馬并非一日建成的,經(jīng)驗也并非一坑而促成的,防狼有術(shù),我們先從全局,看一看這部技術(shù)寶典(看不清沒關(guān)系,感覺到很牛掰就行)。


這部技術(shù)寶典真的很硬核,主要分四大招,見招拆招,讓我們一一進行拆解。

第?1?招:線上應(yīng)用占用 CPU 過高。


拆~招:

采用 top 命令,找出 CPU 占用最高的進程 PID;

通過 ps -ef | grep PID 查看對應(yīng)的應(yīng)用,看看是誰在作祟;

采用 jstack -l? PID >> PID.log 獲取進程的堆棧信息;

采用 ps -mp PID -o THREAD,tid,time 拿到占用 CPU 最高的線程 tid;

采用 printf "%x\n" tid 獲取 16 進制的線程 TID;

采用 grep TID -A20 PID.log 確定是線程哪兒出了問題。

最~后:腿疼醫(yī)腿,辨癥施治,對癥下藥。找準(zhǔn)代碼位置,進行調(diào)整代碼。

第?2?招:線上應(yīng)用內(nèi)存溢出。


拆~招:

采用 top 命令,找出應(yīng)用對應(yīng)的 PID;

采用 jmap -heap PID 確認(rèn)一下分配的內(nèi)存少不少;

采用 jmap -histo:live PID | more 找出分析最耗內(nèi)存的對象【留意占用多少G的對象】;

采用 ps -efL | grep PID | wc -l 查看進程創(chuàng)建的線程數(shù);

采用 ll /proc/PID/task | wc -l 也可以查看進程創(chuàng)建的線程數(shù);

采用?netstat?-apn?|?grep?PID?|?wc -l 查看進程網(wǎng)絡(luò)連接數(shù)。

最~后:腿疼醫(yī)腿,辨癥施治,對癥下藥。

a. 如果內(nèi)存分配確實小,適當(dāng)調(diào)整內(nèi)存;

b. 對象被頻繁創(chuàng)建,且不釋放,優(yōu)化代碼;

c. 不斷創(chuàng)建線程或者不斷進行網(wǎng)絡(luò)連接,優(yōu)化代碼。

第?3?招:排查業(yè)務(wù)問題。


拆~招:

采用 tail -fn 200 log_file 實時查詢線上日志;

找準(zhǔn)日志搜所關(guān)鍵字keyWord,例如 orderId、mobileId、reqId 等;

采用 grep keyWord log_file 查詢關(guān)鍵字所在的行的日志;

采用 grep -C n keyWord log_file 匹配關(guān)鍵字所在行的上下 n 行;

采用 grep keyWord log_file | wc -l 匹配關(guān)鍵字的的行數(shù)有多少。

最~后:根據(jù)實際排查日志場景進行日志搜索 tail 、grep 用的最多。

第?4?招:BOSS 的統(tǒng)計問題。


拆~招:

采用 cat log_file 讀取日志文件;

采用 cut 命令截取出日志的時間戳;

若按照秒統(tǒng)計截取到秒;若按照分鐘統(tǒng)計截取到分鐘;

采用 uniq -c 進行去重統(tǒng)計;

采用 sort -nr 按照第一列的數(shù)值大小進行倒序;

采用 head -1 只顯示第一行內(nèi)容。

最~后:統(tǒng)計問題迎刃而解,那么統(tǒng)計每秒峰值的命令該如何寫呢?

例如日志:?

1118?115856?066?-?REQID0000000000188?...?...

命令組合:

SecondPeak=`cat log_file|cut -d, -f1| cut -c 1-11|sort|uniq -c |sort -nr|head -1`

好了,今天的分享接近尾聲,不知道你 get 到多少,懂與不懂,都建議你收藏,以備不時之需;如果想讓更多人進步,那不妨發(fā)揚一下分享的精神,動動你的手指放肆的轉(zhuǎn)發(fā)一下。

歡迎關(guān)注微信公眾號“一猿小講”了解更多精彩分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 系統(tǒng)巡檢腳本:Version 2016.08.09 ############################ 系統(tǒng)...
    NamasAmitabha閱讀 1,466評論 0 0
  • 如果你想知道你的服務(wù)器正在做干什么,你就需要了解一些基本的命令,一旦你精通了這些命令,那你就是一個專業(yè)的 Linu...
    七寸知架構(gòu)閱讀 11,390評論 1 71
  • 一、架構(gòu)設(shè)計及環(huán)境規(guī)劃: 架構(gòu)設(shè)計圖: 架構(gòu)設(shè)計說明: 1. 基礎(chǔ)架構(gòu)為LAMP環(huán)境,采用keepalived實現(xiàn)...
    Bogon閱讀 10,830評論 1 10
  • 第1章 小試牛刀 $ 是普通用戶,# 表示管理員用戶 root。 shebang:#!。sharp / hash ...
    巴喬書摘閱讀 6,670評論 1 4
  • 親愛的,昨天跟兒子講了一個我們學(xué)校的故事。就是吳振忠打了一個學(xué)生六巴掌,然后他,父母鬧到學(xué)校來,前天晚上10點多都...
    駿駿媽阿靜閱讀 133評論 0 0

友情鏈接更多精彩內(nèi)容