一势篡、性能優(yōu)化需求的提出
提出性能優(yōu)化的現(xiàn)象:
- 前臺(tái)訪問很慢
- 用戶對(duì)性能很不滿意
- 數(shù)據(jù)庫(kù)負(fù)載很重
- xxx功能打開需要1分鐘
系統(tǒng)性的問題褒傅?CPU利用率登失,SWAP利用率或者IO過高導(dǎo)致的整體性能下降静尼?
功能性的問題可霎?整體性良好魄鸦,個(gè)別功能時(shí)延很長(zhǎng)
新出現(xiàn)問題?什么時(shí)候開始的癣朗,之前的系統(tǒng)有哪些變動(dòng)拾因?(升級(jí)或者管理的資源大量增加)
不規(guī)律問題?有時(shí)候快,有時(shí)候慢
二绢记、linux性能分析的目的
1扁达、找出系統(tǒng)性能瓶頸(包括硬件瓶頸和軟件瓶頸);
2蠢熄、提供性能優(yōu)化的方案(升級(jí)硬件跪解?改進(jìn)系統(tǒng)結(jié)構(gòu)?)
3签孔、達(dá)到合理的硬件和軟件配置
4叉讥、使系統(tǒng)資源使用達(dá)到最大的平衡
比如CPU過度使用會(huì)造成大量進(jìn)程等待CPU資源,系統(tǒng)響應(yīng)速度變慢饥追,等待會(huì)造成進(jìn)程數(shù)增加图仓,進(jìn)程增加又會(huì)造成內(nèi)存使用增加,內(nèi)存耗盡又會(huì)造成虛擬內(nèi)存使用但绕,使用虛擬內(nèi)存又會(huì)造成磁盤IO增加和CPU開銷增加)
三救崔、性能分析的步驟
1、需要系統(tǒng)監(jiān)控工具和性能分析工具
對(duì)資源的使用狀況進(jìn)行長(zhǎng)期的監(jiān)控和數(shù)據(jù)采集(nagios捏顺、cacti六孵、ganglia、zabbix)
使用常見的性能分析工具(vmstat幅骄、top劫窒、htop、iotop拆座、free烛亦、iostat)
實(shí)戰(zhàn)技能和經(jīng)驗(yàn)積累
2、出現(xiàn)性能問題的可能原因
- 應(yīng)用程序的設(shè)計(jì)缺陷懂拾、數(shù)據(jù)庫(kù)查詢?yōu)E用
- 性能瓶頸,可能是程序差/內(nèi)存不足/磁盤瓶頸铐达,最終表現(xiàn)結(jié)果就是CPU耗盡岖赋,系統(tǒng)負(fù)載極高,響應(yīng)遲緩
- 物理內(nèi)存不夠時(shí)會(huì)使用交換內(nèi)存瓮孙,使用swap會(huì)帶來(lái)磁盤IO和cpu的開銷
- 可能造成cpu瓶頸的問題:頻繁執(zhí)Perl唐断,php,java程序生成動(dòng)態(tài)web杭抠;數(shù)據(jù)庫(kù)查詢大量的where子句脸甘、order by/group by 排序......
- 可能造成內(nèi)存瓶頸問題:高并發(fā)用戶訪問、系統(tǒng)進(jìn)程多偏灿,java內(nèi)存泄露......
- 可能造成磁盤IO瓶頸問題:生成cache文件丹诀,數(shù)據(jù)庫(kù)頻繁更新,或者查詢大表......
四、影響linux性能的因素
1铆遭、系統(tǒng)硬件資源:
-
CPU
- 大部分cpu在同一時(shí)間內(nèi)只能運(yùn)行一個(gè)線程硝桩,一些廠商的cpu可以啟用超線程,同一時(shí)間運(yùn)行多線程
- Linux內(nèi)核會(huì)把多核的處理器當(dāng)做單獨(dú)的CPU來(lái)識(shí)別枚荣,例如兩個(gè)4核的CPU碗脊,在linux系統(tǒng)下會(huì)被當(dāng)做8個(gè)單核CPU
- 可能出現(xiàn)CPU瓶頸的應(yīng)用:郵件服務(wù)器、動(dòng)態(tài)web服務(wù)器等
-
內(nèi)存:
- 內(nèi)存太小橄妆,系統(tǒng)進(jìn)程將被阻塞衙伶,應(yīng)用也將變得緩慢
- linux采用物理內(nèi)存和虛擬內(nèi)存兩種方式,虛擬內(nèi)存雖然可以緩解物理內(nèi)存的不足害碾,但是占用過多的虛擬內(nèi)存矢劲,應(yīng)用程序的性能將明顯下降
- 可能出現(xiàn)內(nèi)存性能瓶頸的應(yīng)用有:redis內(nèi)存數(shù)據(jù)庫(kù)服務(wù)器、cache服務(wù)器蛮原、靜態(tài)web服務(wù)器等
-
磁盤I/O性能:
- 現(xiàn)今的磁盤都采用了很多的方法來(lái)提高I/O性能卧须,比如常見的磁盤RAID技術(shù)。常見的RAID級(jí)別有RAID0儒陨、RAID1花嘶、RAID5、RAID0+1
- RAID0:這種方式成本低蹦漠,沒有容錯(cuò)和數(shù)據(jù)修復(fù)功能椭员,因而只能用在對(duì)數(shù)據(jù)安全性要求不高的環(huán)境中
- RAID1:也就是磁盤鏡像,通過把一個(gè)磁盤的數(shù)據(jù)鏡像到另一個(gè)磁盤上笛园,最大限度地保證磁盤數(shù)據(jù)的可靠性和可修復(fù)性隘击,具有很高的數(shù)據(jù)冗余能力,但磁盤利用率只有50%研铆,因而埋同,成本最高,多用在保存重要數(shù)據(jù)的場(chǎng)合
- RAID5:采用了磁盤分段加奇偶校驗(yàn)技術(shù)棵红,從而提高了系統(tǒng)可靠性凶赁,RAID5讀出效率很高,寫入效率一般逆甜,至少需要3塊盤虱肄。允許一塊磁盤故障,而不影響數(shù)據(jù)的可用性交煞。
- RAID0+1:把RAID0和RAID1的技術(shù)結(jié)合起來(lái)就成了RAID0+1咏窿,至少需要4塊盤 。此種方式的數(shù)據(jù)除分布在多個(gè)盤上外素征,每個(gè)盤都有其鏡像盤集嵌,提供全冗余能力萝挤,同時(shí)允許一個(gè)磁盤故障,而不影響數(shù)據(jù)可用性纸淮,并具有快速讀/寫能力
- 目前常用磁盤類型有STAT平斩、SAS、SSD磁盤咽块。STAT绘面、SAS是普通機(jī)械硬盤,讀寫效率一般侈沪。如要保證較高的性能的讀寫操作揭璃,可選用SSD固態(tài)硬盤
-
網(wǎng)絡(luò)帶寬
- 低速的、不穩(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)行应役。
- 組建網(wǎng)絡(luò)時(shí)情组,如果局域網(wǎng)有大量數(shù)據(jù)傳輸需求(hadoop大數(shù)據(jù)業(yè)務(wù)、數(shù)據(jù)庫(kù)業(yè)務(wù))箩祥,可采用千兆院崇、萬(wàn)兆網(wǎng)絡(luò)接口,針對(duì)每個(gè)服務(wù)器袍祖,如果單網(wǎng)卡效率不夠底瓣,可采用雙網(wǎng)卡綁定技術(shù),提高網(wǎng)卡數(shù)據(jù)傳輸帶寬和性能蕉陋。
2捐凭、操作系統(tǒng)相關(guān)資源
- 系統(tǒng)安裝優(yōu)化
- 磁盤的劃分、SWAP內(nèi)存的分配都直接影響以后系統(tǒng)的運(yùn)行性能
- 內(nèi)核參數(shù)優(yōu)化
- 如果部署的是Oracle數(shù)據(jù)庫(kù)應(yīng)用凳鬓,就需要對(duì)系統(tǒng)共享內(nèi)存段茁肠、系統(tǒng)信號(hào)量、文件句柄等參數(shù)進(jìn)行優(yōu)化設(shè)置
- 如果部署的是web應(yīng)用缩举,就需要根據(jù)web應(yīng)用特性進(jìn)行網(wǎng)絡(luò)參數(shù)的優(yōu)化官套,例如net.ipv4,ip_local_port_range、net.ipv4.tcp_tw_reuse等網(wǎng)絡(luò)內(nèi)核參數(shù)
- 文件系統(tǒng)優(yōu)化
- 在linux下可選的文件系統(tǒng)有ext3蚁孔、ext4、xfs惋嚎,根據(jù)不同的應(yīng)用杠氢,選擇不同的文件系統(tǒng)
五、系統(tǒng)性能分析工具
1另伍、vmstat命令
語(yǔ)法:
vmstat [-V] [-n] [delay [count]]
參數(shù):
-V 表示打印出版本信息鼻百,是可選參數(shù)
-n 表示在周期性循環(huán)輸出時(shí)绞旅,輸出的頭部信息僅顯示一次
delay 表示兩次輸出之間的間隔時(shí)間
count 表示按照delay指定的時(shí)間間隔統(tǒng)計(jì)的次數(shù)。默認(rèn)為1
案例:
vastat 3 # 每3秒鐘更新一次輸出信息温艇,循環(huán)輸出
vastat 3 5 # 每3秒輸出一次因悲,共輸出5次
2、iostat
功能:對(duì)系統(tǒng)的磁盤I/O操作進(jìn)行監(jiān)視勺爱,同時(shí)也會(huì)給出CPU的使用情況
語(yǔ)法:
iostat [-c|-d] [-k] [-t] [-x[device]] [interval [count]]
參數(shù):
-c 顯示cpu的使用情況
-d 顯示磁盤的使用情況
-k 每秒以k bytes為單位顯示數(shù)據(jù)
-t 打印出統(tǒng)計(jì)信息開始執(zhí)行的時(shí)間
-x device:指定要統(tǒng)計(jì)的磁盤設(shè)備名稱晃琳,默認(rèn)為所有的磁盤設(shè)備
interval:指定兩次統(tǒng)計(jì)間隔的時(shí)間
count:按照interval指定的時(shí)間間隔統(tǒng)計(jì)的次數(shù)
3、sar命令
很強(qiáng)大琐鲁,是分析系統(tǒng)性能的重要工具之一卫旱,通過sar命令,可以全面的獲取系統(tǒng)的CPU围段、運(yùn)行隊(duì)列顾翼、磁盤I/O、分頁(yè)(交換區(qū))奈泪、內(nèi)存适贸、CPU中斷、網(wǎng)絡(luò)等性能數(shù)據(jù)
語(yǔ)法:
sar [option] [-o filename] [interval [count]]
參數(shù):
option為命令行選項(xiàng)涝桅,sar命令的選項(xiàng)很多拜姿,下面是常用選項(xiàng):
-A 顯示系統(tǒng)所有資源設(shè)備(CPU、內(nèi)存苹支、磁盤)的運(yùn)行情況
-u 顯示系統(tǒng)出所有CPU在采樣時(shí)間內(nèi)的負(fù)載狀態(tài)
-P 顯示當(dāng)前系統(tǒng)中指定CPU的使用情況
-d 顯示系統(tǒng)所有硬盤設(shè)備在采樣時(shí)間內(nèi)的使用狀況
-r 顯示系統(tǒng)內(nèi)存在采樣時(shí)間內(nèi)的使用狀況
-b 顯示緩沖區(qū)在采樣時(shí)間內(nèi)的使用情況
-v 顯示進(jìn)程砾隅、文件、I節(jié)點(diǎn)和鎖表狀態(tài)
-n 顯示網(wǎng)絡(luò)運(yùn)行狀態(tài)债蜜。參數(shù)后面可跟DEV晴埂、EDEV、SOCK和FULL寻定。DEV顯示網(wǎng)絡(luò)接口信息儒洛,EDEV顯示網(wǎng)絡(luò)錯(cuò)誤的統(tǒng)計(jì)數(shù)據(jù),SOCK顯示套接字信息狼速,F(xiàn)ULL顯示三個(gè)所有的信息琅锻。可以單獨(dú)或者一起使用
interval 表示采樣間隔時(shí)間向胡,必填
count 采樣次數(shù)恼蓬,可選,默認(rèn)值為1
測(cè)試題:
1僵芹、操作系統(tǒng)如何管理塊設(shè)備(磁盤)处硬,如何讀寫塊設(shè)備。
block概念
- 操作系統(tǒng)無(wú)法對(duì)數(shù)目眾多的扇區(qū)進(jìn)行尋址拇派,因此操作系統(tǒng)將相鄰的扇區(qū)組合在一起荷辕,形成了塊block凿跳,(8個(gè)扇區(qū),80.5 kb 4kb大写健)*
- 在linux文件系統(tǒng)重多個(gè)連續(xù)的扇區(qū)控嗜,被稱之為block,塊的概念骡显,也是在系統(tǒng)中被認(rèn)為是最小的存儲(chǔ)單位
- 操作系統(tǒng)規(guī)定疆栏,一個(gè)block只能存放一個(gè)文件的內(nèi)容,因此文件占用的空間大小蟆盐,只能是block的整數(shù)倍
讀取文件步驟:
1承边、打開文件
2、找到文件的inode號(hào)
3石挂、通過inode號(hào)博助,找到文件數(shù)據(jù)在磁盤上的位置,也就是block的位置
管理:
- 分區(qū)
- 格式化
- 掛載
2痹愚、什么命令可以查看磁盤io情況富岳,命令有哪些附加參數(shù)可選。
答:iostat命令
語(yǔ)法:
iostat [-c|-d] [-k] [-t] [-x[device]] [interval [count]]
參數(shù):
-c 顯示cpu的使用情況
-d 顯示磁盤的使用情況
-k 每秒以k bytes為單位顯示數(shù)據(jù)
-t 打印出統(tǒng)計(jì)信息開始執(zhí)行的時(shí)間
-x device:指定要統(tǒng)計(jì)的磁盤設(shè)備名稱拯腮,默認(rèn)為所有的磁盤設(shè)備
interval:指定兩次統(tǒng)計(jì)間隔的時(shí)間
count:按照interval指定的時(shí)間間隔統(tǒng)計(jì)的次數(shù)
3窖式、對(duì)一塊磁盤進(jìn)行分區(qū)格式化掛載,并使用fio工具測(cè)試磁盤性能动壤。
分區(qū):
①磁盤大小在2T以內(nèi)萝喘,使用fdisk對(duì)磁盤進(jìn)行分區(qū):
fdisk /dev/sdb m進(jìn)入選項(xiàng): n: 新建分區(qū) d: 刪除分區(qū) p: 打印分區(qū)表 q: 退出不保存 w: 寫入并且退出
②磁盤大小超過2T,使用parted命令分區(qū)琼懊,切要將分區(qū)轉(zhuǎn)換成GPT分區(qū)
parted /dev/sdc
進(jìn)入parted
mklabel gpt # 更改分區(qū)表類型為gpt阁簸,危險(xiǎn)磁盤數(shù)據(jù)都將丟失
p:打印分區(qū)表
mkpart primary 0 500 # 創(chuàng)建主分區(qū),name為primary哼丈,大小為500M
mkpart logical 501 10000 # 創(chuàng)建邏輯分區(qū)
p:打印分區(qū)表
q:退出
格式化:
針對(duì)磁盤分區(qū)進(jìn)行格式化文件系統(tǒng)
mkfs.ext4 /dev/sdc1 # 將sdc1分區(qū)格式化為ext4文件系統(tǒng)
mksfs.xfs /dev/sdc2
掛載
待學(xué)習(xí)启妹。。醉旦。