您好,登錄后才能下訂單哦!
如何進(jìn)行Linux性能分析和優(yōu)化,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
一般互聯(lián)網(wǎng)的項(xiàng)目都是部署在linux服務(wù)器上的,如果linux服務(wù)器出了問題,那么咱們平時(shí)學(xué)習(xí)的高并發(fā),穩(wěn)定性之類的是沒有任何意義的,所以對(duì)linux性能的把握就顯得非常重要,當(dāng)然很多同學(xué)可能覺得這些是運(yùn)維同學(xué)的事情,但是我不這么認(rèn)為,不管你是架構(gòu)師,還是crud boy,對(duì)項(xiàng)目有個(gè)全局的掌控是一項(xiàng)非常重要的基本素質(zhì),所以總結(jié)了這篇文章,希望對(duì)您有用,如果您覺得我寫的還不錯(cuò),看完記得點(diǎn)個(gè)贊,點(diǎn)個(gè)再看哦。咱們廢話不用多說,直接進(jìn)入正題。
cpu
CPU是操作系統(tǒng)穩(wěn)定運(yùn)行的根本,CPU的速度與性能在很大程度上決定了系統(tǒng)整體的性能,因此,CPU數(shù)量越多、主頻越高,服務(wù)器性能也就相對(duì)越好。
內(nèi)存
內(nèi)存的大小也是影響Linux性能的一個(gè)重要的因素,內(nèi)存太小,系統(tǒng)進(jìn)程將被阻塞,應(yīng)用也將變得緩慢,甚至失去響應(yīng);內(nèi)存太大,導(dǎo)致資源浪費(fèi)。
磁盤IO
磁盤的I/O性能直接影響應(yīng)用程序的性能,在一個(gè)有頻繁讀寫的應(yīng)用中,如果磁盤I/O性能得不到滿足,就會(huì)導(dǎo)致應(yīng)用停滯。好在現(xiàn)今的磁盤都采用了很多方法來(lái)提高I/O性能,比如常見的磁盤RAID技術(shù)。
網(wǎng)絡(luò)
Linux下的各種應(yīng)用,一般都是基于網(wǎng)絡(luò)的,因此網(wǎng)絡(luò)帶寬也是影響性能的一個(gè)重要因素,低速的、不穩(wěn)定的網(wǎng)絡(luò)將導(dǎo)致網(wǎng)絡(luò)應(yīng)用程序的訪問阻塞,而穩(wěn)定、高速的網(wǎng)絡(luò)帶寬,可以保證應(yīng)用程序在網(wǎng)絡(luò)上暢通無(wú)阻地運(yùn)行。幸運(yùn)的是,現(xiàn)在的網(wǎng)絡(luò)一般都是千兆帶寬或光纖網(wǎng)絡(luò),帶寬問題對(duì)應(yīng)用程序性能造成的影響也在逐步降低。
uptime(系統(tǒng)整體性能評(píng)估)
這里需要注意的是:load average這個(gè)輸出值,這三個(gè)值的大小一般不能大于系統(tǒng)CPU的個(gè)數(shù)
那么如何查看cpu的個(gè)數(shù)呢?
查看系統(tǒng)cpu的信息
cat /proc/cpuinfo中的信息
其中cpu cores即為cpu的核數(shù)
也可以用cat /proc/cpuinfo |grep "cores"|uniq直接查看
[root@test ~]# cat /proc/cpuinfo |grep "cores"|uniq cpu cores : 2
vmstat 2 10 (每2秒監(jiān)控一次 監(jiān)控10次)
procs
r表示運(yùn)行和等待cpu時(shí)間片的進(jìn)程數(shù),這個(gè)值如果長(zhǎng)期大于cpu的個(gè)數(shù),則需要增加系統(tǒng)cpu
b表示等待資源的進(jìn)程數(shù)
CPU
us列顯示了用戶進(jìn)程消耗CPU時(shí)間百分比,us比較高的時(shí)候,說明用戶進(jìn)程消耗cpu的時(shí)間多,如果長(zhǎng)期大于50%,就需要優(yōu)化程序和算法
sy列顯示了內(nèi)核進(jìn)程消耗的cpu時(shí)間百分比,sy值較高的時(shí)候,說明內(nèi)核消耗的cpu資源很多
根據(jù)經(jīng)驗(yàn),us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。
sar命令會(huì)增加系統(tǒng)開銷 但是影響不大
yum install sysstat安裝sar命令
sar -u 3 5(u顯示系統(tǒng)所有cpu在采樣時(shí)間內(nèi)的負(fù)載狀態(tài))圖片%user:用戶進(jìn)程消耗cpu的時(shí)間百分比
%nice:運(yùn)行正常進(jìn)程所消耗cpu的百分比
%system:系統(tǒng)消耗cpu時(shí)間百分比
%iowait:IO等待所占用cpu時(shí)間百分比
%steal:內(nèi)存在相對(duì)緊張的環(huán)境下pagein強(qiáng)制對(duì)不同頁(yè)面進(jìn)行的steal操作
%idle:cpu處在空閑時(shí)間的百分比
內(nèi)存性能評(píng)估
free -m #查看以M為單位的內(nèi)存使用情況
一般有這樣一個(gè)經(jīng)驗(yàn)公式:
應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%時(shí),表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能。
應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%時(shí),表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存。
20%<應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%時(shí),表示系統(tǒng)內(nèi)存資源基本能滿足應(yīng)用需求,暫時(shí)不影響系統(tǒng)性能。
swpd表示切換到內(nèi)存交換去的內(nèi)存數(shù)量(k),如果swpd的值不為0,或者比較大,但是si,so的值長(zhǎng)期為0,這種情況不用擔(dān)心,不會(huì)影響性能
free表示空閑的物理內(nèi)存數(shù)量
buffer表示buffers cache的內(nèi)存數(shù)量,一般對(duì)設(shè)備的讀寫才需要緩沖
cache表示page cached的內(nèi)存數(shù)量。一般作為文件系統(tǒng)cached,頻繁訪問的文件都會(huì)被cached,如果cache值較大,說明cached的文件較多,如果此時(shí)IO中的bi比較小,說明文件系統(tǒng)效率比較好
si表示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的數(shù)量
so表示由內(nèi)存調(diào)入磁盤,也就是內(nèi)存交換區(qū)進(jìn)入內(nèi)存的數(shù)量 一般情況下,so si的值都為0。如果si so的值長(zhǎng)期不為0,則表示系統(tǒng)內(nèi)存不足,需要增加內(nèi)存
磁盤IO性能評(píng)估
iostat -d 2 10
Blk_reads/s 每秒讀取的數(shù)據(jù)塊數(shù) Blk_wrtn/s 每秒寫入的數(shù)據(jù)塊數(shù) Blk_read 讀取的所有塊數(shù) Blk_wrtn 寫入的所有塊數(shù)
這幾個(gè)值沒有標(biāo)準(zhǔn) 如果長(zhǎng)期都很大 肯定是不正常的
sar -d 2 5
await 平均每次設(shè)備I/O操作的等待時(shí)間(毫秒)
svctm 平均每次設(shè)備I/O操作的服務(wù)時(shí)間(毫秒)
%util 一秒中有百分之幾的時(shí)間用于I/O操作
正常情況下svctm應(yīng)該是小于await的,svctm的值和磁盤性能,cpu內(nèi)存等都有關(guān)系
如果svctm的值和await的值相近表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm,表示I/O隊(duì)列等待時(shí)間太長(zhǎng),系統(tǒng)上的應(yīng)用程序?qū)⒆兟藭r(shí)可以通過更換更快的硬盤來(lái)解決問題
%util越小越好,如果%util接近100%表示磁盤產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)載在工作,此時(shí)可以通過優(yōu)化程序或者更換更快的磁盤來(lái)解決問題
網(wǎng)絡(luò)性能評(píng)估
通過ping命令檢測(cè)網(wǎng)絡(luò)的連通性。
通過netstat -i 組合檢測(cè)網(wǎng)絡(luò)接口狀況。
通過netstat -r 組合檢測(cè)系統(tǒng)路由表信息。
通過sar -n 組合顯示系統(tǒng)的網(wǎng)絡(luò)運(yùn)行狀態(tài)(sar -n DEV 5 3)。
常用分析:
查看tcp連接數(shù)最多的ip:
sudo netstat -pant | grep ":22" | awk '{print $5}' | awk -F":" '{print $4}' |sort|uniq -c|sort -nr
解釋:
awk -F":" '{print $4}' 表示把結(jié)果的第4列用:號(hào)分割
sort -nr 排序,-n以數(shù)值大小排序,-r倒序,從大到小。
uniq -c 刪除重復(fù)的行,-c表示加上每行出現(xiàn)的次數(shù)。
netstat命令是一個(gè)監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具, 它可以顯示路由表、實(shí)際的網(wǎng)絡(luò)連接以及每一個(gè)網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息。
netstat -pant
參數(shù)-p :顯示正在使用Socket的程序識(shí)別碼和程序名稱;
參數(shù)-a :顯示所有連線中的Socket;
參數(shù)-n :直接使用ip地址,而不通過域名服務(wù)器;
參數(shù)-t :顯示TCP傳輸協(xié)議的連線狀況。
提取訪問nginx服務(wù)器最多的10個(gè)ip。
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n10
關(guān)于如何進(jìn)行Linux性能分析和優(yōu)化問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。