關(guān)注微信公眾號“小姐姐味道” 虐秋,獲取最新文章。
xin片之爭垃沦,已經(jīng)暴露了中國xin的問題客给,我等碼農(nóng)束手無策;而在操作系統(tǒng)方面肢簿,成果也是乏善可陳靶剑;現(xiàn)如今酷炫的Web監(jiān)控工具,讓很多研發(fā)喪失了真正處理問題的能力池充。
越接近底層桩引,就越接近真相,在計算機(jī)的世界收夸,同樣適用坑匠。
我們的目的,就像是《荒島余生》一樣:找到一個信念卧惜,在最殘酷的環(huán)境中厘灼,生存下去。說的比較隱晦咽瓷,其實就是:你換公司了设凹,而你的新公司比較推崇devops,你要自己面對問題忱详。
吹的那么高大上围来,一副拯救世界的感覺,但本系列的文章知識并不深匈睁,很多已經(jīng)在大學(xué)里的操作系統(tǒng)見過了监透,雖然照讀課本的叫獸并不能讓你勾起絲毫興趣。
如果本系列能夠勾起你的些許興趣航唆,就算目的達(dá)到了胀蛮。本來是想要聊仔細(xì)點,但由于時間有限,又不是寫書,原理性的東西就不多說了进泼。
內(nèi)容
文章將會嘗試單純的Cpu、Mem再榄、Net、Disk享潜、IO問題排查困鸥,然后組合各種元素,解決一些棘手問題剑按,就是一些常用命令的組合疾就。當(dāng)然我們是java系的澜术,所以會多一些java方面的討論。如果你不了解行文風(fēng)格猬腰,可以先讀讀:《Java堆外內(nèi)存排查小結(jié)--小姐姐味道》
為什么Linux系統(tǒng)會出現(xiàn)這樣那樣的問題呢鸟废?主要的原因就是計算機(jī)的各個部件的速度不均衡。Cpu在等cache line姑荷,cache 在等內(nèi)存盒延,內(nèi)存在等設(shè)備。就像在連續(xù)17公里高速下坡路口設(shè)個收費站一樣厢拭,一不小心就車毀人亡兰英。
設(shè)備五花八門撇叁,通常我們接觸的設(shè)備供鸠,就是硬盤和網(wǎng)卡。整個業(yè)務(wù)系統(tǒng)和操作系統(tǒng)充斥著各種各樣的緩沖區(qū)陨闹,CPU要通過中斷負(fù)責(zé)他們之間的協(xié)調(diào)楞捂。這樣,會有很多地方會發(fā)生bottleneck趋厉。
監(jiān)控值
排查問題也是有過程的寨闹。通常,關(guān)注一個硬件資源君账,比如CPU繁堡,我們關(guān)注以下基本要素:
1) 利用率 一般是瞬時值,屬于采樣范圍乡数,用來判斷有沒有峰值椭蹄。比如cpu utilization
2) 飽和度 一般指資源已完全使用,新請求在特定queue里排隊净赴。比如cpu load過高
3) 錯誤信息 硬件或者驅(qū)動錯誤绳矩,比如dmesg
命令顯示的OOM
4) 聯(lián)想信息 對引起的原因進(jìn)行猜測,并用更多的工具驗證猜想玖翅。比如系統(tǒng)響應(yīng)慢猜測大量用到了swap
原因
監(jiān)控值只是一種表象翼馆,具體引起的原因才是重點。我們通常希望純粹的資源限制所引起的故障金度,這種問題都比較好定位应媚。大多數(shù)情況下都沒那么幸運(yùn),所以廣度上的信息共享能幫助很多猜极。過程如下:
1) 信息收集 問題起始時間中姜,上下文
2) 改動集合 問題發(fā)生前所有變更列表
3) 問題抽象 將描述抽象成具體的資源問題
4) 問題排查 將信息整理完畢,就可以進(jìn)行真正的荒野之旅了
測試
本測試用來決定你是不是本文目標(biāo)受眾魔吐,如果無法回答以下問題扎筒,建議先看一點基本的Linux知識莱找,這將會節(jié)省你的時間,因為文章不會對此提太多嗜桌。
io wait 是什么意思?
swap是什么分區(qū)奥溺,怎么關(guān)閉?
/tmp目錄有什么特殊性?
管道是什么東東?
Linux發(fā)行版
接下來熱熱身,瞧瞧Linux有什么發(fā)行版骨宠。
我這里挑選了6個代表性的版本浮定,版本聚焦的功能向?qū)I(yè)化和個性化發(fā)展。其中层亿,Centos作為最常見的服務(wù)器版本桦卒,占據(jù)了大量的市場份額;Ubuntu在GUI和易用性上贏得了桌面用戶匿又;Kali代表了向?qū)I(yè)化發(fā)展的一個分支方灾。
個人使用時間最長的是archlinux,尤其喜歡它的滾動升級功能碌更。但由于Centos在服務(wù)器端的市場份額實在太大裕偿,我們以下的討論都基于Centos。
據(jù)不完全統(tǒng)計痛单,已經(jīng)有上千個linux版本嘿棘,見下圖(高清大圖見 https://distrowatch.com/images/other/distro-family-tree.png )。你來告訴我旭绒,紅旗鸟妙、麒麟的位置在哪里。
將常用腳本加入到PATH中
有些命令組合不好記挥吵,頻繁輸入也覺得煩重父,可以將這些過程整理成腳本,扔到path中蔫劣。
還記得第一次安裝jdk坪郭,添加的環(huán)境變量么?Linux和它類似脉幢,不過它有多種shell
歪沃。
通常我們用的叫bash
,平常說的shell腳本就是bash腳本嫌松。但也有很多其他好用的shell沪曙,比如csh、ksh萎羔、zsh等液走。
查看/etc/shells文件看一下你安裝過的shell
[root@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/bin/zsh
/sbin/nologin
/bin/dash
在個人領(lǐng)域,zsh配合oh-my-zsh(推薦)達(dá)到最佳,但服務(wù)器一般不會去改你的shell缘眶,通過一個環(huán)境變量嘱根,能夠看到你當(dāng)前所使用的shell終端。
[root@localhost ~]$ echo $SHELL
/bin/bash
針對于bash巷懈,我們的配置就在用戶目錄下的.bashrc
文件中该抒。
在用戶目錄下創(chuàng)建.bin
目錄
mkdir ~/.bin
將目錄加入到環(huán)境變量PATH中
echo "export PATH=\$PATH:~/.bin/" >> ~/.bashrc
在.bin創(chuàng)建一個文件xjj,內(nèi)容為
echo "pleasant taste"
cat > ~/.bin/xjj <<EOF
echo "pleasant taste"
EOF
給xjj增加可執(zhí)行權(quán)限
chmod a+x ~/.bin/xjj
這樣顶燕,使用你的用戶凑保,在任何地方,都可以執(zhí)行xjj了
[root@localhost ~]$ xjj
pleasant taste
真是令人愉悅的味道~