這次分享主要是針對大家經常面試中遇到的性能相關問題的可能猜測和定位、解決的方法,我在面試的過程中發現好多同學並沒有一個清晰的思路
本課程的主旨及目標
•導致服務器IO高的常見原因
•常見定位問題的方法
==導致服務器IO高的常見原因=========================================================================
簡介:磁盤通常是計算機最慢的子系統,也是最容易出現性能瓶頸的地方,因為磁盤離CPU 距離最遠而且CPU 訪問磁盤要涉及到機械操作,比如轉軸、尋軌等。
占用IO過高,可以做如下考慮:
1)首先考慮寫日志內容過多(或者訪問量較大)
1】日志打印的內容是否合理
前端應用服務器,要避免程序頻繁打本地日志、或者異常日志
2】日志級別是否合理
3】考慮異步寫日志(一般可以解決CPU鋸齒波動),為減少磁 盤IO操作,將日志寫如內存分區;但日志量太大,很容易將內存 寫滿,再考慮將日志進行壓縮。
2)磁盤滿(壓測過程中現象:TPS降低,響應時間增加)
1】找到導致磁盤滿的大文件,合理的刪除,最好有定期清理腳 本,可以定期清理
2】對磁盤空間進行擴大磁盤容量
3】不好清理的,在主硬盤上進行讀寫操作,基礎數據定時移動 到掛載硬盤上。
3)數據庫連接數超限制,導致sleep比較多,sleep任務太多的處理:
1】程序里每次連接數據庫后,記得關閉數據庫。
2】或者,在mysql配置文件中,設置mysql超時時間wait_timout, 默認是八小時,設置低一點
4)數據庫IO過高,查詢量大,可以進行讀寫分離(增加讀庫)或者分庫操作,減小磁盤壓力,調優一些buffer參數以降低IO寫的頻率
5)磁盤IO過高是由於讀寫文件導致的
1】可以利用raid來減輕壓力
6)磁盤本身性能不足
1】考慮更換新磁盤(性能強勁的)
==常見定位問題的方法==================================================================
Linux系統出現了性能問題,一般我們可以通過top、iostat、iotop、free、vmstat等命令來查看初步定位問題。
今天我們講解就是iostat和iotop,定位問題的一般步驟:
Step-1】 iostat這個命令可以給我們提供豐富的IO狀態數據,一般我們先通過該命令來查看是否存在性能瓶頸
Step-2】用iotop找出io高的進程
1、iostat常見用法:
iostat -d -k 1 10 #查看TPS和吞吐量信息
參數 -d 表示,顯示設備(磁盤)使用狀態;
-k某些使用block為單位的列強制使用Kilobytes為單位;
1 10表示,數據顯示每隔1秒刷新一次,共顯示10次
iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(await)
使用-x參數我們可以獲得更多統計信息。
注意】一般%util大於70%,I/O壓力就比較大,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。磁盤可能存在瓶頸。
iostat還可以用來獲取cpu部分狀態值:
iostat -c 1 10 #查看cpu狀態
注意】idle小於70% IO壓力就較大了,一般讀取速度有較多的wait。
2、我們通過上面iostat的常用命令基本可以判斷IO是否存在瓶頸了,然后我們通過iotop命令來抓出罪魁禍首的進程,這里比較簡單直接輸入命令,然后執行(一般抓到的是java進程、mysqld,干的越多問題越多)
————————————————
版權聲明:本文為CSDN博主「yw804909465」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yw804909465/article/details/90544023