服務器IO高問題定位和優(you)化
這(zhe)次(ci)分享主要(yao)是針對大家經常面(mian)試中遇到的(de)性能相(xiang)關問題的(de)可能猜測和定位、解決的(de)方法,我在(zai)面(mian)試的(de)過程中發(fa)現好多同學并沒有一個清晰的(de)思路
本課程的主旨及目標
?導致服(fu)務器IO高的常見原因
?常見定位問題的方法
==導致服務器IO高的常見(jian)原因(yin)=========================================================================
簡介:磁盤通常是(shi)計算機最(zui)(zui)慢的(de)子系統(tong),也是(shi)最(zui)(zui)容易出現性能瓶頸的(de)地方(fang),因為(wei)磁盤離(li)CPU 距(ju)離(li)最(zui)(zui)遠而且CPU 訪問磁盤要涉及到機械操作(zuo),比(bi)如轉(zhuan)軸、尋軌等。
占用IO過高,可以(yi)做如下考(kao)慮:
1)首(shou)先考(kao)慮寫(xie)日志內容過多(duo)(或者(zhe)訪問量較大)
1】日志打印的內容是(shi)否(fou)合理
前端應用服務器,要(yao)避免程序(xu)頻繁打本地日志、或(huo)者異常(chang)日志
2】日志級別是否合(he)理
3】考(kao)慮異(yi)步寫日(ri)(ri)志(zhi)(一般可以解(jie)決CPU鋸(ju)齒(chi)波(bo)動),為(wei)減(jian)少磁 盤IO操作,將(jiang)日(ri)(ri)志(zhi)寫如內存分區;但日(ri)(ri)志(zhi)量太大(da),很容(rong)易將(jiang)內存 寫滿,再(zai)考(kao)慮將(jiang)日(ri)(ri)志(zhi)進行壓縮。
2)磁盤(pan)滿(壓測過(guo)程中現象:TPS降低,響應(ying)時(shi)間增加(jia))
1】找到導致(zhi)磁盤滿的大文件,合(he)理的刪除(chu),最好有(you)定(ding)期清理腳(jiao) 本,可以定(ding)期清理
2】對磁(ci)盤空(kong)間進行擴大磁(ci)盤容量
3】不好清理(li)的,在主硬盤上進行讀寫(xie)操作,基礎數據定時移(yi)動 到掛(gua)載硬盤上。
3)數據庫連(lian)接數超限制(zhi),導致sleep比(bi)較多,sleep任務(wu)太多的處理:
1】程序里每次連接(jie)數據(ju)庫后,記得關閉數據(ju)庫。
2】或者,在mysql配(pei)置文件中(zhong),設置mysql超時(shi)時(shi)間wait_timout, 默(mo)認是八(ba)小時(shi),設置低一點
4)數據庫(ku)IO過高,查詢量大,可以(yi)進行讀寫分離(增加讀庫(ku))或者分庫(ku)操作,減(jian)小磁盤壓力,調優(you)一些buffer參數以(yi)降低IO寫的頻率
5)磁盤IO過高是由(you)于讀(du)寫文(wen)件(jian)導致的
1】可以(yi)利用raid來減輕壓力(li)
6)磁盤(pan)本身性能不足(zu)
1】考慮更換新磁盤(性(xing)能強勁的)
==常見定位(wei)問題的方法(fa)==================================================================
Linux系(xi)統出現了性能問題,一般我們可以(yi)通過top、iostat、iotop、free、vmstat等命(ming)令(ling)來查看初步定(ding)位(wei)問題。
今天我們講解就是(shi)iostat和iotop,定位問題的一(yi)般步驟:
Step-1】 iostat這個命令可以(yi)給我們提(ti)供(gong)豐富的IO狀態數據,一般(ban)我們先(xian)通(tong)過該命令來查(cha)看是否(fou)存在性能瓶頸
Step-2】用(yong)iotop找出(chu)io高(gao)的(de)進程
1、iostat常見用法(fa):
iostat -d -k 1 10 #查看(kan)TPS和吞吐量信息
參數 -d 表示,顯示設備(磁盤(pan))使(shi)用狀態;
-k某些使(shi)用block為(wei)單(dan)位的列強制使(shi)用Kilobytes為(wei)單(dan)位;
1 10表示,數據顯(xian)(xian)示每隔1秒刷新一(yi)次,共顯(xian)(xian)示10次

iostat -d -x -k 1 10 #查看設備(bei)使用率(lv)(%util)、響應時間(await)
使用-x參數我們可以獲得更多統計信息。
注意】一(yi)般%util大于(yu)70%,I/O壓力就(jiu)比(bi)較大,說明產生的(de)I/O請求(qiu)太(tai)多(duo),I/O系統已(yi)經滿(man)負(fu)荷,該磁盤可能存在(zai)瓶(ping)頸。磁盤可能存在(zai)瓶(ping)頸。

iostat還可(ke)以用來獲取cpu部(bu)分狀態值(zhi):
iostat -c 1 10 #查(cha)看cpu狀態(tai)
注意】idle小于70% IO壓力就較大了,一般讀(du)取速(su)度有較多的wait。

2、我們通過上面iostat的常用命令基本可以判斷IO是否存在瓶頸了,然后我們通過iotop命令來抓出罪魁禍首的進程,這里比較簡單直接輸入命令,然后執行(一般抓到的是java進程、mysqld,干的越多問題越多)

————————————————
版權聲明:本文為CSDN博主「yw804909465」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接(jie)://blog.csdn.net/yw804909465/article/details/90544023