目錄php
系統調優概述html
1. 系統的運行情況: CPU-> MEM ->DISK*-> NETWORK -> 應用程序調優node
性能優化的4個子系統:linux
CPUios
Memoryc++
IOapache
Networkcentos
2. 分析是否有瓶頸(依據當前應用需求)性能優化
出現如下問題,怎麼解決?服務器
1、找出系統中使用CPU最多的進程?
2、找出系統中使用內存最多的進程?
3、找出系統中對磁盤讀寫最多的進程?
4、找出系統中使用網絡最多的進程?
1、查看CPU負載相關工具
uptime命令:
[root@localhost ~]# uptime
13:22:30 up 8 min, 4 users, load average: 0.14, 0.38, 0.25
其內容以下:
12:38:33 |
當前時間 |
up 50days |
系統運行時間 ,說明此服務器連續運行50天了 |
1 user |
當前登陸用戶數 |
load average: 0.06, 0.60, 0.48 |
系統負載,即任務隊列的平均長度。 三個數值分別爲 1分鐘、5分鐘、15分鐘前到如今的平均值。 |
例1:找出前當系統中,CPU存在瓶頸的服務器?
服務器1: load average: 0.15, 0.08, 0.01 1核
服務器2: load average: 4.15, 6.08, 6.01 1核
服務器3: load average: 10.15, 10.08, 10.01 4核
答案:2
若是服務器的CPU爲1核心,則load average中的數字 >=3 負載太高,若是服務器的CPU爲4核心,則load average中的數字 >=12 負載太高。
隊列數爲3時,如圖:
理論上:單核心,1分鐘的系統平均負載不要超過3,這個經驗值。
實戰1:找出系統中使用CPU最多的進程?
方法1:使用top命令
運行top , 而後數字鍵1
找出使用CPU最多的進程 ,按大寫的P,能夠按CPU使用率來排序顯示
實戰2:按照實際使用CPU,從大到小排序顯示全部進程列表
[root@localhost ~]# ps -aux --sort -pcpu | more #按cpu降序排序
查看 -pcpu 幫助:
[root@localhost ~]# man ps #而後搜索 pcpu ,找到下面內容
pcpu cpu utilization # cpu利用率
注: -pcpu 和-cpu 相比, -pcpu 能夠顯示出進程絕對路徑,方便找出木馬程序運行的路徑。
實戰2:找出系統中使用內存最多的進程?
方法1:使用top命令
運行top , 而後按下大寫的M 能夠按內存使用率來排序顯示,大寫的P,按照內存的大小,進行排序。
方法2:
實戰:按照實際使用內存,從大到小排序顯示全部進程列表
[root@localhost ~]#ps -aux --sort -pcpu | more #降序排序
[root@localhost ~]#man ps #而後搜索pcpu,找到姓名內容。
pcpu cpu utilization #cpu利用率
注 : -pcpu和-cpu相比 ,-pcpu能夠顯示出進程絕對路徑,方便找出木馬程序運行的路徑。
[root@localhost ~]# ps -aux --sort -rss | more 內存降序排序(去掉減號就是升序)
或:
[root@localhost ~]# ps -aux --sort -rss > a.log
rss resident set size 常駐集大小
實例 :
降序排序,CPU從大到小。
3、找出系統中對磁盤讀寫最多的進程
I/O調優相關查看工具
實戰1:查看哪一個磁盤或分區最繁忙?
經過iostat命令查看IO是否存在瓶頸
iostat 能夠顯示CPU和I/O系統的負載狀況及每一個磁盤分區的讀寫狀態信息.
從而知道咱們系統IO 是否存在問題。
安裝iostat:
[root@localhost ~]# rpm -ivh /mnt/Packages/sysstat-9.0.4-18.el6.x86_64.rpm
經常使用參數:
-d 僅顯示磁盤統計信息
-k 以K爲單位顯示每秒的磁盤請求數,默認單位塊.
-p device | ALL 用於顯示塊設備及系統分區的統計信息
例:顯示每一個分區讀寫速度
[root@localhost ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x86_64 (xuegod63.cn) 08/04/2015 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 7.25 252.33 12.99 206953 10657
sda1 0.63 2.43 0.01 1996 9
sda2 5.99 247.27 12.98 202805 10648
sda3 0.43 1.77 0.00 1452 0
注:
每列含意:
kB_read/s 每秒從驅動器讀入的數據量,單位爲K.
kB_wrtn/s 每秒向驅動器寫入的數據量,單位爲K.
kB_read 讀入的數據總量,單位爲K.
kB_wrtn 寫入的數據總量,單位爲K.
方法2:
實戰:按照實際使用內存,從大到小排序顯示全部進程列表
[root@localhost ~]# ps -aux --sort -rss | more 內存降序排序(去掉減號就是升序)
或:
[root@localhost ~]# ps -aux --sort -rss > a.log
3、找出系統中對磁盤讀寫最多的進程
I/O調優相關查看工具
實戰1:查看哪一個磁盤或分區最繁忙?
經過iostat命令查看IO是否存在瓶頸
iostat 能夠顯示CPU和I/O系統的負載狀況及每一個磁盤分區的讀寫狀態信息.
從而知道咱們系統IO 是否存在問題。
安裝iostat:
[root@localhost ~]# rpm -ivh /mnt/Packages/sysstat-9.0.4-18.el6.x86_64.rpm
經常使用參數:
-d 僅顯示磁盤統計信息
-k 以K爲單位顯示每秒的磁盤請求數,默認單位塊.
-p device | ALL 用於顯示塊設備及系統分區的統計信息
例:顯示每一個分區讀寫速度
[root@localhost ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x86_64 (xuegod63.cn) 08/04/2015 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 7.25 252.33 12.99 206953 10657
sda1 0.63 2.43 0.01 1996 9
sda2 5.99 247.27 12.98 202805 10648
sda3 0.43 1.77 0.00 1452 0
注:
每列含意:
kB_read/s 每秒從驅動器讀入的數據量,單位爲K.
kB_wrtn/s 每秒向驅動器寫入的數據量,單位爲K.
kB_read 讀入的數據總量,單位爲K.
kB_wrtn 寫入的數據總量,單位爲K.
實戰2:查看哪一個進程使用磁盤讀寫最多?
iotop命令,查看哪一個進程使用磁盤讀寫最多
實例:查看系統中使用io最多的進程
參數:
-o, -only 只顯示在讀寫硬盤的程序
-d SEC, –delay=SEC 設定顯示時間間隔
退出,按q或ctrl+C
例1:
安裝:
[root@localhost ~]# rpm -ivh /mnt/Packages/iotop-0.3.2-3.el6.noarch.rpm
[root@localhost ~]# iotop -o -d 1 #顯示正在使用磁盤的進程
Total DISK READ: 1458.61 K/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
2654 be/4 root 1458.61 K/s 0.00 B/s 0.00 % 60.62 % find /
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
-o #在讀取的進程 -d #時間間隔,多長時間刷新一次。
在另外一個終端執行:
[root@localhost ~]# find /
查看結果:
4、找出系統中使用網絡最多的進程?
單擊後,能夠查到每一個進程使用的流量。
實戰1:使用nload監控整體帶寬使用狀況
rz 上傳nload.rpm到RHEL上
[root@localhost ~]# rpm -ivh nload-0.7.4-1.el6.x86_64.rpm
或wget http://www.roland-riegel.de/nload/nload-0.7.2.tar.gz
tar -zxvf nload-0.7.2.tar.gz
./configure (編譯)
常見編譯報錯
沒有c++軟件包
yum install -y gcc* #安裝全部跟gcc有關的 軟件包
再次編譯,而後使用echo $?命令 ,查看編譯是否出錯,返回0,說明沒問題。
[root@localhost ~]# yum install nload -y (在centos上,配置好epel源)
yum -y install ncurses* #nload依賴的軟件包
[root@localhost ~]# nload #開始監控
而後另外一個終端上運行:
[root@localhost ~]# ab -n 10000 -c 2 http://www.baidu.com/index.html #產生一些測試數據
-n # 訪問10000次數 -c #時間爲2秒
若是沒有ab命令 ,安裝 : #yum install -y httpd (ab在httpd自帶的命令)
查看結果:
Incoming : 下載 Outgoing :上傳
[root@localhost ~]# rpm -ivh /mnt/Packages/iptraf-3.0.1-13.el6.x86_64.rpm
iptraf是一款交互式、色彩鮮豔的IP局域網監控工具。它能夠顯示每一個鏈接以及主機之間傳輸的數據量。
實戰2:使用iptraf查看每一個連接與主機之間的數據,找出惡意消耗帶寬最多的IP
[root@localhost ~]# yum install -y iptraf
[root@localhost ~]# iptraf
顯示下面頁面,直接回車,
選擇第一個,直接回車。
選擇eth0網卡
實戰3:分析服務器上某個端口上產生的流量。
實戰背景: 晚上下載了一個黑客工具,想知道這個軟件有沒有留後門,怎麼辦?
在運行軟件以前,先監控一下流量 。
Statistical breakdowns. 統計分析。
選擇統計端口上的流量:
#/etc/initd./httpd restart #重啓apache服務,查看是否實時檢測到80 端口
nethogs是一款小巧的"net top"工具,能夠顯示每一個進程所使用的帶寬,並對列表排序,將耗用帶寬最多的進程排在最上面。萬一出現帶寬使用忽然激增的狀況,用戶迅速打開nethogs,就能夠找到致使帶寬使用激增的進程。nethogs能夠報告程序的進程編號(PID)、用戶和路徑。
實戰3: 使用nethogs找出使用帶寬最多的進程
nload + nethogs =
[root@localhost ~]#rpm -ivh nethogs-.8.5-1.el6.x86_64.rpm #配好eple源
下載nethogs
解壓nethogs : tar -xvf nethogs-0.8.0.tar.gz
cd nethogs
yum install -y ncurses-devel
下載依賴包:
libpcap-devel
rpm -ivh --nodeps libpcap-devel-1.3.0-2.4.1.x86_64.rpm
#make && make install #編譯 、安裝
#echo $? #上一步驟,沒問題
0
#nethogs
打開另外一個終端。
使用wget下載東西,查看
總結:
實戰4:找出系統中使用網絡最多的進程 nload , iptraf ,nethogs