前言
通常互聯網的項目都是部署在linux服務器上的,若是linux服務器出了問題,那麼我們平時學習的高併發,穩定性之類的是沒有任何意義的,因此對linux性能的把握就顯得很是重要,固然不少同窗可能以爲這些是運維同窗的事情,可是我不這麼認爲,無論你是架構師,仍是crud boy,對項目有個全局的掌控是一項很是重要的基本素質,因此總結了這篇文章,但願對您有用,若是您以爲我寫的還不錯,看完記得點個贊,點個再看哦。我們廢話不用多說,直接進入正題。linux
影響linux服務器性能的因素
cpu
CPU是操做系統穩定運行的根本,CPU的速度與性能在很大程度上決定了系統總體的性能,所以,CPU數量越多、主頻越高,服務器性能也就相對越好。ios
內存
內存的大小也是影響Linux性能的一個重要的因素,內存過小,系統進程將被阻塞,應用也將變得緩慢,甚至失去響應;內存太大,致使資源浪費。nginx
磁盤IO
磁盤的I/O性能直接影響應用程序的性能,在一個有頻繁讀寫的應用中,若是磁盤I/O性能得不到知足,就會致使應用停滯。好在現今的磁盤都採用了不少方法來提升I/O性能,好比常見的磁盤RAID技術。算法
網絡
Linux下的各類應用,通常都是基於網絡的,所以網絡帶寬也是影響性能的一個重要因素,低速的、不穩定的網絡將致使網絡應用程序的訪問阻塞,而穩定、高速的網絡帶寬,能夠保證應用程序在網絡上暢通無阻地運行。幸運的是,如今的網絡通常都是千兆帶寬或光纖網絡,帶寬問題對應用程序性能形成的影響也在逐步下降。服務器
經常使用的linux系統性能監控的命令
uptime(系統總體性能評估)
這裏須要注意的是:load average這個輸出值,這三個值的大小通常不能大於系統CPU的個數網絡
那麼如何查看cpu的個數呢?架構
查看系統cpu的信息併發
cat /proc/cpuinfo中的信息運維
其中cpu cores即爲cpu的核數tcp
也能夠用cat /proc/cpuinfo |grep "cores"|uniq直接查看
[root@test ~]# cat /proc/cpuinfo |grep "cores"|uniq cpu cores : 2
cpu的性能評估
利用vmstat命令監控cpu
vmstat 2 10 (每2秒監控一次 監控10次)
procs
r表示運行和等待cpu時間片的進程數,這個值若是長期大於cpu的個數,則須要增長系統cpu
b表示等待資源的進程數
CPU
us列顯示了用戶進程消耗CPU時間百分比,us比較高的時候,說明用戶進程消耗cpu的時間多,若是長期大於50%,就須要優化程序和算法
sy列顯示了內核進程消耗的cpu時間百分比,sy值較高的時候,說明內核消耗的cpu資源不少
根據經驗,us+sy的參考值爲80%,若是us+sy大於 80%說明可能存在CPU資源不足。
利用sar命令監控系統cpu
sar命令會增長系統開銷 可是影響不大
yum install sysstat安裝sar命令
sar -u 3 5(u顯示系統全部cpu在採樣時間內的負載狀態) %user:用戶進程消耗cpu的時間百分比
%nice:運行正常進程所消耗cpu的百分比
%system:系統消耗cpu時間百分比
%iowait:IO等待所佔用cpu時間百分比
%steal:內存在相對緊張的環境下pagein強制對不一樣頁面進行的steal操做
%idle:cpu處在空閒時間的百分比
內存性能評估
利用free指令監控內存
free -m #查看以M爲單位的內存使用狀況 通常有這樣一個經驗公式:
應用程序可用內存/系統物理內存>70%時,表示系統內存資源很是充足,不影響系統性能。
應用程序可用內存/系統物理內存<20%時,表示系統內存資源緊缺,須要增長系統內存。
20%<應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能知足應用需求,暫時不影響系統性能。
利用vmstat監控內存
swpd表示切換到內存交換去的內存數量(k),若是swpd的值不爲0,或者比較大,可是si,so的值長期爲0,這種狀況不用擔憂,不會影響性能
free表示空閒的物理內存數量
buffer表示buffers cache的內存數量,通常對設備的讀寫才須要緩衝
cache表示page cached的內存數量。通常做爲文件系統cached,頻繁訪問的文件都會被cached,若是cache值較大,說明cached的文件較多,若是此時IO中的bi比較小,說明文件系統效率比較好
si表示由磁盤調入內存,也就是內存進入內存交換區的數量
so表示由內存調入磁盤,也就是內存交換區進入內存的數量 通常狀況下,so si的值都爲0。若是si so的值長期不爲0,則表示系統內存不足,須要增長內存
磁盤IO性能評估
iostat
iostat -d 2 10
Blk_reads/s 每秒讀取的數據塊數 Blk_wrtn/s 每秒寫入的數據塊數 Blk_read 讀取的全部塊數 Blk_wrtn 寫入的全部塊數
這幾個值沒有標準 若是長期都很大 確定是不正常的
利用sar評估磁盤性能
sar -d 2 5 await 平均每次設備I/O操做的等待時間(毫秒)
svctm 平均每次設備I/O操做的服務時間(毫秒)
%util 一秒中有百分之幾的時間用於I/O操做
評判標準
正常狀況下svctm應該是小於await的,svctm的值和磁盤性能,cpu內存等都有關係
若是svctm的值和await的值相近表示幾乎沒有I/O等待,磁盤性能很好,若是await的值遠高於svctm,表示I/O隊列等待時間太長,系統上的應用程序將變慢,此時能夠經過更換更快的硬盤來解決問題
%util越小越好,若是%util接近100%表示磁盤產生的I/O請求太多,I/O系統已經滿負載在工做,此時能夠經過優化程序或者更換更快的磁盤來解決問題
網絡性能評估
經過ping命令檢測網絡的連通性。
經過netstat -i 組合檢測網絡接口情況。
經過netstat -r 組合檢測系統路由表信息。
經過sar -n 組合顯示系統的網絡運行狀態(sar -n DEV 5 3)。
經常使用分析:
查看tcp鏈接數最多的ip:
sudo netstat -pant | grep ":22" | awk '{print $5}' | awk -F":" '{print $4}' |sort|uniq -c|sort -nr
解釋:
awk -F":" '{print $4}' 表示把結果的第4列用:號分割
sort -nr 排序,-n以數值大小排序,-r倒序,從大到小。
uniq -c 刪除重複的行,-c表示加上每行出現的次數。
netstat命令是一個監控TCP/IP網絡的很是有用的工具, 它能夠顯示路由表、實際的網絡鏈接以及每個網絡接口設備的狀態信息。
netstat -pant
參數-p :顯示正在使用Socket的程序識別碼和程序名稱;
參數-a :顯示全部連線中的Socket;
參數-n :直接使用ip地址,而不經過域名服務器;
參數-t :顯示TCP傳輸協議的連線情況。
提取訪問nginx服務器最多的10個ip。
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n10