一 linux伺服器性能檢視
1.1 cpu性能檢視
1、檢視實體cpu個數:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2、檢視每個實體cpu中的core個數:
cat /proc/cpuinfo |grep "cpu cores"|wc -l
3、邏輯cpu的個數:
cat /proc/cpuinfo |grep "processor"|wc -l
實體cpu個數*核數=邏輯cpu個數(不支援超線程技術的情況下)
1.2 記憶體檢視
1、檢視記憶體使用情況:
#free -m
total used free shared buffers cached
Mem: 3949 2519 1430 0 189 1619
-/+ buffers/cache: 710 3239
Swap: 3576 0 3576
total:記憶體總數
used:已經使用的記憶體數
free:空閑記憶體數
shared:多個程序共享的記憶體總額
- buffers/cache:(已用)的記憶體數,即used-buffers-cached
+ buffers/cache:(可用)的記憶體數,即free+buffers+cached
Buffer Cache用于針對磁盤塊的讀寫;
Page Cache用于針對檔案inode的讀寫,這些Cache能有效地縮短I/O系統調用的時間。
對作業系統來說free/used是系統可用/占用的記憶體;
對應用程式來說-/+ buffers/cache是可用/占用記憶體,因為buffers/cache很快就會被使用。
我們工作時候應該從應用角度來看。
1.3 硬碟檢視
1、檢視硬碟及分區資訊:
fdisk -l
2、檢視檔案系統的磁盤空間占用情況:
df -h
3、檢視硬碟的I/O性能(每隔一秒顯示一次,顯示5次):
iostat -x 1 5
iostat是含在套裝systat中的,可以用yum -y install systat來安裝。
常關注的參數:
如%util接近100%,說明産生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。
如idle小于70%,I/O的壓力就比較大了,說明讀取程序中有較多的wait。
4、檢視linux系統中某目錄的大小:
du -sh /root
如發現某個分區空間接近用完,可以進入該分區的挂載點,用以下指令找出占用空間最多的檔案或目錄,然後按照從大到小的順序,找出系統中占用最多空間的前10個檔案或目錄:
du -cksh *|sort -rn|head -n 10
1.4 檢視平均負載
有時候系統響應很慢,但又找不到原因,這時就要檢視平均負載了,看它是否有大量的程序在排隊等待。
最簡單的指令:
uptime--檢視過去的1分鐘、5分鐘和15分鐘内程序隊列中的平均程序數量。
還有動态指令top
我們隻關心以下部分:
top - 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05
如果每個邏輯cpu目前的活動程序不大于3,則系統性能良好;
如果每個邏輯cpu目前的活動程序不大于4,表示可以接受;
如果每個邏輯cpu目前的活動程序大于5,則系統性能問題嚴重。
一般計算方法:負載值/邏輯cpu個數
還可以結合vmstat指令來判斷系統是否繁忙,其中:
procs
r:等待運作的程序數。
b:處在非中斷睡眠狀态的程序數。
w:被交換出去的可運作的程序數。
memeory
swpd:虛拟記憶體使用情況,機關為KB。
free:空閑的記憶體,機關為KB。
buff:被用來作為緩存的記憶體數,機關為KB。
swap
si:從磁盤交換到記憶體的交換頁數量,機關為KB。
so:從記憶體交換到磁盤的交換頁數量,機關為KB。
io
bi:發送到塊裝置的塊數,機關為KB。
bo:從塊裝置接受的塊數,機關為KB。
system
in:每秒的中斷數,包括時鐘中斷。
cs:每秒的環境切換次數。
cpu
按cpu的總使用百分比來顯示。
us:cpu使用時間。
sy:cpu系統使用時間。
id:閑置時間。
1.5 其他參數
檢視核心版本号:
uname -a
簡化指令:uname -r
檢視系統是32位還是64位的:
file /sbin/init
檢視發行版:
cat /etc/issue
或lsb_release -a
檢視系統已載入的相關子產品:
lsmod
檢視pci設定:
lspci
二 Linux伺服器性能評估
2.1.1 影響Linux伺服器性能的因素
1. 作業系統級
CPU
記憶體
磁盤I/O帶寬
網絡I/O帶寬
2. 程式應用級
2.1.2 系統性能評估标準
影響性能因素 | 好 | 壞 | 糟糕 |
---|---|---|---|
CPU | user% + sys%< 70% | user% + sys%= 85% | user% + sys% >=90% |
記憶體 | Swap In(si)=0 Swap Out(so)=0 | Per CPU with 10 page/s | More Swap In & Swap Out |
磁盤 | iowait % < 20% | iowait % =35% | iowait % >= 50% |
其中:
%user:表示CPU處在使用者模式下的時間百分比。
%sys:表示CPU處在系統模式下的時間百分比。
%iowait:表示CPU等待輸入輸出完成時間的百分比。
swap in:即si,表示虛拟記憶體的頁導入,即從SWAP DISK交換到RAM
swap out:即so,表示虛拟記憶體的頁導出,即從RAM交換到SWAP DISK
2.1.3 系統性能分析工具
1.常用系統指令
Vmstat、sar、iostat、netstat、free、ps、top等
2.常用組合方式
1 vmstat、sar、iostat檢測是否是CPU瓶頸
2 free、vmstat檢測是否是記憶體瓶頸
3 iostat檢測是否是磁盤I/O瓶頸
4 netstat檢測是否是網絡帶寬瓶頸
2.1.4 Linux性能評估與優化
系統整體性能評估(uptime指令)
uptime
16:38:00 up 118 days, 3:01, 5 users,load average: 1.22, 1.02, 0.91
注意:
- load average三值大小一般不能大于系統CPU的個數。
系統有8個CPU,如load average三值長期大于8,說明CPU很繁忙,負載很高,可能會影響系統性能。
- 但偶爾大于8,一般不會影響系統性能。
- 如load average輸出值小于CPU個數,則表示CPU有空閑時間片,比如本例中的輸出,CPU是非常空閑的
2.2.1 CPU性能評估
1.利用vmstat指令監控系統CPU
顯示系統各種資源之間相關性能簡要資訊,主要看CPU負載情況。
下面是vmstat指令在某個系統的輸出結果:
[root@node1 ~]#vmstat 2 3
procs
———–memory———- —swap– —–io—- –system– —–cpu——
r b swpd freebuff cache si so bi bo incs us sy idwa st
0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0
0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0
0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
Procs
r--運作和等待cpu時間片的程序數,這個值如果長期大于系統CPU的個數,說明CPU不足,需要增加CPU
b--在等待資源的程序數,比如正在等待I/O、或者記憶體交換等。
CPU
us
使用者程序消耗的CPU 時間百分比。
us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期大于50%,就需要考慮優化程式或算法。
sy
核心程序消耗的CPU時間百分比。Sy的值較高時,說明核心消耗的CPU資源很多。
根據經驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。
2.利用sar指令監控系統CPU
sar對系統每方面進行單獨統計,但會增加系統開銷,不過開銷可以評估,對系統的統計結果不會有很大影響。
下面是sar指令對某個系統的CPU統計輸出:
[root@webserver ~]# sar -u 3 5
Linux
2.6.9-42.ELsmp (webserver) 11/28/2008_i686_
(8 CPU)
11:41:24
AM CPU %user %nice%system
%iowait %steal %idle
11:41:27
AM all 0.88 0.00 0.29 0.00 0.00 98.83
11:41:30
AM all 0.13 0.00 0.17 0.21 0.00 99.50
11:41:33
AM all 0.04 0.00 0.04 0.00 0.00 99.92
11:41:36
AM all 90.08 0.00 0.13 0.16 0.00 9.63
11:41:39
AM all 0.38 0.00 0.17 0.04 0.00 99.41
Average:
all 0.34 0.00 0.16 0.05 0.00 99.45
輸出解釋如下:
%user列顯示了使用者程序消耗的CPU 時間百分比。
%nice列顯示了運作正常程序所消耗的CPU 時間百分比。
%system列顯示了系統程序消耗的CPU時間百分比。
%iowait列顯示了IO等待所占用的CPU時間百分比
%steal列顯示了在記憶體相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。
%idle列顯示了CPU處在空閑狀态的時間百分比。
問題
你是否遇到過系統CPU整體使用率不高,而應用緩慢的現象?
在一個多CPU的系統中,如果程式使用了單線程,會出現這麼一個現象,CPU的整體使用率不高,但是系統應用卻響應緩慢,
這可能是由于程式使用單線程的原因,單線程隻使用一個CPU,
導緻這個CPU占用率為100%,無法處理其它請求,而其它的CPU卻閑置,這就導緻了整體CPU使用率不高,而應用緩慢現象的發生。
2.3.1 記憶體性能評估
1.利用free指令監控記憶體
free是監控Linux記憶體使用狀況最常用的指令,看下面的一個輸出:
[root@webserver ~]# free -m
total
used freeshared
buffers cached
Mem:
8111 7185 926 0 243 6299
-/+
buffers/cache:
643 7468
Swap:
8189 0 8189
經驗公式:
應用程式可用記憶體/系統實體記憶體>70%,表示系統記憶體資源非常充足,不影響系統性能;
應用程式可用記憶體/系統實體記憶體<20%,表示系統記憶體資源緊缺,需要增加系統記憶體;
20%<應用程式可用記憶體/系統實體記憶體<70%,表示系統記憶體資源基本能滿足應用需求,暫時不影響系統性能
2.利用vmstat指令監控記憶體
[root@node1
~]#
vmstat 2 3
procs
———–memory———- —swap– —–io—- –system– —–cpu——
r b swpd freebuff cache si so bi bo incs us sy idwa st
0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0
0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0
0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
memory
swpd--切換到記憶體交換區的記憶體數量(k為機關)。如swpd值偶爾非0,不影響系統性能
free--目前空閑的實體記憶體數量(k為機關)
buff--buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖
cache--page cached的記憶體數量
一般作為檔案系統cached,頻繁通路的檔案都會被cached,如cache值較大,說明cached的檔案數較多,如果此時IO中bi比較小,說明檔案系統效率比較好。
swap
si--由磁盤調入記憶體,也就是記憶體進入記憶體交換區的數量。
so--由記憶體調入磁盤,也就是記憶體交換區進入記憶體的數量。
si、so的值長期不為0,表示系統記憶體不足。需增加系統記憶體。
2.4.1磁盤I/O性能評估
1.磁盤存儲基礎
頻繁通路的檔案或資料盡可能用記憶體讀寫代替直接磁盤I/O,效率高千倍。
将經常進行讀寫的檔案與長期不變的檔案獨立出來,分别放置到不同的磁盤裝置上。
對于寫操作頻繁的資料,可以考慮使用裸裝置代替檔案系統。
裸裝置優點:
資料可直接讀寫,不需經過作業系統級緩存,節省記憶體資源,避免記憶體資源争用;
避免檔案系統級維護開銷,如檔案系統需維護超級塊、I-node等;
避免了作業系統cache預讀功能,減少了I/O請求
使用裸裝置的缺點是:
資料管理、空間管理不靈活,需要很專業的人來操作。
2.利用iostat評估磁盤性能
[root@webserver ~]# iostat -d 2 3
Linux
2.6.9-42.ELsmp (webserver) 12/01/2008_i686_
(8 CPU)
Device:
tps Blk_read/sBlk_wrtn/sBlk_read
Blk_wrtn
sda 1.87 2.58 114.12 6479462 286537372
Device:
tps Blk_read/sBlk_wrtn/sBlk_read
Blk_wrtn
sda
0.00 0.00 0.00 0 0
Device:
tps Blk_read/sBlk_wrtn/sBlk_read
Blk_wrtn
sda
1.00 0.00 12.00 0 24
解釋如下:
Blk_read/s--每秒讀取資料塊數
Blk_wrtn/s--每秒寫入資料塊數
Blk_read--讀取的所有塊數
Blk_wrtn--寫入的所有塊數
可通過Blk_read/s和Blk_wrtn/s值對磁盤的讀寫性能有一個基本的了解.
如Blk_wrtn/s值很大,表示磁盤寫操作頻繁,考慮優化磁盤或程式,
如Blk_read/s值很大,表示磁盤直接讀操作很多,可将讀取的資料放入記憶體
規則遵循:
長期的、超大的資料讀寫,肯定是不正常的,這種情況一定會影響系統性能。
3.利用sar評估磁盤性能
通過“sar –d”組合,可以對系統的磁盤IO做一個基本的統計,請看下面的一個輸出:
[root@webserver ~]# sar -d 2 3
Linux
2.6.9-42.ELsmp (webserver) 11/30/2008_i686_
(8 CPU)
11:09:33
PM DEV tps rd_sec/swr_sec/savgrq-sz
avgqu-sz await svctm %util
11:09:35
PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:09:35
PM DEV tps rd_sec/swr_sec/savgrq-sz
avgqu-sz await svctm %util
11:09:37
PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00
11:09:37
PM DEV tps rd_sec/swr_sec/savgrq-sz
avgqu-sz await svctm %util
11:09:39
PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05
Average:
DEV tps rd_sec/swr_sec/savgrq-sz
avgqu-sz await svctm %util
Average:
dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02
參數含義:
await--平均每次裝置I/O操作等待時間(毫秒)
svctm--平均每次裝置I/O操作的服務時間(毫秒)
%util--一秒中有百分之幾的時間用于I/O操作
對磁盤IO性能評判标準:
正常svctm應小于await值,而svctm和磁盤性能有關,CPU、記憶體負荷也會對svctm值造成影響,過多的請求也會間接的導緻svctm值的增加。
await值取決svctm和I/O隊列長度以及I/O請求模式,
如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,
如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統上運作的應用程式将變慢,
此時可以通過更換更快的硬碟來解決問題。
%util--衡量磁盤I/O重要名額,
如%util接近100%,表示磁盤産生的I/O請求太多,I/O系統已經滿負荷工作,該磁盤可能存在瓶頸。
可優化程式或者 通過更換 更高、更快的磁盤。
2.5.1. 網絡性能評估
(1)通過ping指令檢測網絡的連通性
(2)通過netstat –i組合檢測網絡接口狀況
(3)通過netstat –r組合檢測系統的路由表資訊
(4)通過sar –n組合顯示系統的網絡運作狀态
三 Linux伺服器性能調優
1.為磁盤I/O調整Linux核心電梯算法
選擇檔案系統後,該算法可以平衡低延遲需求,收集足夠資料,有效組織對磁盤讀寫請求。
2.禁用不必要的守護程序,節省記憶體和CPU資源
許多守護程序或服務通常非必需,消耗寶貴記憶體和CPU時間。将伺服器置于險地。
禁用可加快啟動時間,釋放記憶體。
減少CPU要處理的程序數
一些應被禁用的Linux守護程序,預設自動運作:
序号 守護程序 描述
1 Apmd 進階電源管理守護程序
2 Nfslock 用于NFS檔案鎖定
3 Isdn ISDN Moderm支援
4 Autofs 在背景自動挂載檔案系統(如自動挂載CD-ROM)
5 Sendmail 郵件傳輸代理
6 Xfs X Window的字型伺服器
3.關掉GUI
4、清理不需要的子產品或功能
伺服器軟體包中太多被啟動的功能或子產品實際上是不需要的(如Apache中的許多功能子產品),禁用掉有助于提高系統記憶體可用量,騰出資源給那些真正需要的軟體,讓它們運作得更快。
5、禁用控制台
在Linux中,有許多流行的控制台,如Cpanel,Plesk,Webmin和phpMyAdmin等,禁用釋放出大約120MB記憶體,記憶體使用量大約下降30-40%。
6、改善Linux Exim伺服器性能
使用DNS緩存守護程序,可降低解析DNS記錄需要的帶寬和CPU時間,DNS緩存通過消除每次都從根節點開始查找DNS記錄的需求,進而改善網絡性能。
Djbdns是一個非常強大的DNS伺服器,它具有DNS緩存功能,Djbdns比BIND DNS伺服器更安全,性能更好,可以直接通過http://cr.yp.to/下載下傳,或通過Red Hat提供的軟體包獲得。
7、使用AES256增強gpg檔案加密安全
為提高備份檔案或敏感資訊安全,許多Linux系統管理者都使用gpg進行加密,在使用gpg時,最好指定gpg使用AES256加密算法,AES256使用256位密鑰,它是一個開放的加密算法,美國國家安全局(NSA)使用它保護絕密資訊。
8、遠端備份服務安全
安全是選擇遠端備份服務最重要的因素,大多數系統管理者都害怕兩件事:(黑客)可以删除備份檔案,不能從備份恢複系統。
為了保證備份檔案100%的安全,備份服務公司提供遠端備份伺服器,使用scp腳本或RSYNC通過SSH傳輸資料,這樣,沒有人可以直接進入和通路遠端系統,是以,也沒有人可以從備份服務删除資料。在選擇遠端備份服務提供商時,最好從多個方面了解其服務強壯性,如果可以,可以親自測試一下。
9、更新預設核心參數設定
為了順利和成功運作企業應用程式,如資料庫伺服器,可能需要更新一些預設的核心參數設定,例如,2.4.x系列核心消息隊列參數msgmni有一個預設值(例如,共享記憶體,或shmmax在Red Hat系統上預設隻有33554432位元組),它隻允許有限的資料庫并發連接配接,下面為資料庫伺服器更好地運作提供了一些建議值(來自IBM DB2支援網站):
kernel.shmmax=268435456 (32位)
kernel.shmmax=1073741824 (64位)
kernel.msgmni=1024
fs.file-max=8192
kernel.sem=”250 32000 32 1024″
10、優化TCP
優化TCP協定有助于提高網絡吞吐量,跨廣域網的通信使用的帶寬越大,延遲時間越長時,建議使用越大的TCP Linux大小,以提高資料傳輸速率,TCP Linux大小決定了發送主機在沒有收到資料傳輸确認時,可以向接收主機發送多少資料。
11、選擇正确的檔案系統
使用ext4檔案系統取代ext3
● Ext4是ext3檔案系統的增強版,擴充了存儲限制
●具有日志功能,保證高水準的資料完整性(在非正常關閉事件中)
●非正常關閉和重新開機時,它不需要檢查磁盤(這是一個非常耗時的動作)
●更快的寫入速度,ext4日志優化了硬碟磁頭動作
12、使用noatime檔案系統挂載選項
在檔案系統啟動配置檔案fstab中使用noatime選項,如果使用了外部存儲,這個挂載選項可以有效改善性能。
13、調整Linux檔案描述符限制
Linux限制了任何程序可以打開的檔案描述符數量,預設限制是每程序1024,這些限制可能會阻礙基準測試用戶端(如httperf和apachebench)和Web伺服器本身獲得最佳性能,Apache每個連接配接使用一個程序,是以不會受到影響,但單程序Web伺服器,如Zeus是每連接配接使用一個檔案描述符,是以很容易受預設限制的影響。
打開檔案限制是一個可以用ulimit指令調整的限制,ulimit -aS指令顯示目前的限制,ulimit -aH指令顯示硬限制(在未調整/proc中的核心參數前,你不能增加限制)。
Linux第三方應用程式性能技巧
對于運作在Linux上的第三方應用程式,一樣有許多性能優化技巧,這些技巧可以幫助你提高Linux伺服器的性能,降低運作成本。
14、正确配置MySQL
為了給MySQL配置設定更多的記憶體,可設定MySQL緩存大小,要是MySQL伺服器執行個體使用了更多記憶體,就減少緩存大小,如果MySQL在請求增多時停滞不動,就增加MySQL緩存。
15、正确配置Apache
檢查Apache使用了多少記憶體,再調整StartServers和MinSpareServers參數,以釋放更多的記憶體,将有助于你節省30-40%的記憶體。
16、分析Linux伺服器性能
提高系統效率最好的辦法是找出導緻整體速度下降的瓶頸并解決掉,下面是找出系統關鍵瓶頸的一些基本技巧:
● 當大型應用程式,如OpenOffice和Firefox同時運作時,計算機可能會開始變慢,記憶體不足的出現幾率更高。
● 如果啟動時真的很慢,可能是應用程式初次啟動需要較長的加載時間,一旦啟動好後運作就正常了,否則很可能是硬碟太慢了。
●CPU負載持續很高,記憶體也夠用,但CPU使用率很低,可以使用CPU負載分析工具監控負載時間。
17、學習5個Linux性能指令
使用幾個指令就可以管理Linux系統的性能了,下面列出了5個最常用的Linux性能指令,包括
top、vmstat、iostat、free和sar,它們有助于系統管理者快速解決性能問題。
(1)top
目前核心服務的任務,還顯示許多主機狀态的統計資料,預設情況下,它每隔5秒自動更新一次。
如:目前正常運作時間,系統負載,程序數量和記憶體使用率,
此外,這個指令也顯示了那些使用最多CPU時間的程序(包括每個程序的各種資訊,如運作使用者,執行的指令等)。
(2)vmstat
Vmstat指令提供目前CPU、IO、程序和記憶體使用率的快照,它和top指令類似,自動更新資料,如:
$ vmstat 10
(3)iostat
Iostat提供三個報告:CPU使用率、裝置使用率和網絡檔案系統使用率,使用-c,-d和-h參數可以分别獨立顯示這三個報告。
(4)free
顯示主記憶體和交換空間記憶體統計資料,指定-t參數顯示總記憶體,指定-b參數按位元組為機關,使用-m則以兆為機關,預設情況下千位元組為機關。
Free指令也可以使用-s參數加一個延遲時間(機關:秒)連續運作,如:
$ free -s 5
(5)sar
收集,檢視和記錄性能資料,這個指令比前面幾個指令曆史更悠久,它可以收集和顯示較長周期的資料。
其它
下面是一些歸類為其它的性能技巧:
18、将日志檔案轉移到記憶體中
當一台機器處于運作中時,最好是将系統日志放在記憶體中,當系統關閉時再将其複制到硬碟,當你運作一台開啟了syslog功能的筆記本電腦或移動裝置時,ramlog可以幫助你提高系統電池或移動裝置閃存驅動器的壽命,使用ramlog的一個好處是,不用再擔心某個守護程序每隔30秒向syslog發送一條消息,放在以前,硬碟必須随時保持運轉,這樣對硬碟和電池都不好。
19、先打包,後寫入
在記憶體中劃分出固定大小的空間儲存日志檔案,這意味着筆記本電腦硬碟不用一直保持運轉,隻有當某個守護程序需要寫入日志時才運轉,注意ramlog使用的記憶體空間大小是固定的,否則系統記憶體會很快被用光,如果筆記本使用固态硬碟,可以配置設定50-80MB記憶體給ramlog使用,ramlog可以減少許多寫入周期,極大地提高固态硬碟的使用壽命。
20、一般調優技巧
盡可能使用靜态内容替代動态内容,如果你在生成天氣預告,或其它每隔1小時就必須更新的資料,最好是寫一個程式,每隔1小時生成一個靜态的檔案,而不是讓使用者運作一個CGI動态地生成報告。
為動态應用程式選擇最快最合适的API,CGI可能最容易程式設計,但它會為每個請求産生一個程序,通常,這是一個成本很高,且不必要的過程,FastCGI是更好的選擇,和Apache的mod_perl一樣,都可以極大地提高應用程式的性能。
種一棵樹,最好的時間是十年前,其次是現在。
本文轉載自:https://www.cnblogs.com/ace-lee/p/6628079.html