簡介:系統(tǒng)優(yōu)化其本質(zhì)是系統(tǒng)在提供服務(wù)的同時惶室,承受壓力過大需進(jìn)行參數(shù)調(diào)優(yōu)
1、查看平均負(fù)載
系統(tǒng)負(fù)載System Load:系統(tǒng)CPU繁忙程度的度量玄货,即有多少進(jìn)程在等待被CPU調(diào)度,平均負(fù)載(Load Average):一段時間內(nèi)系統(tǒng)的平均負(fù)載皇钞,這個一段時間一般取1分鐘、5分鐘松捉、15分鐘
[root@linux_server ~]# uptime
10:48:38 up 5 min, 2 users, load average: 0.05, 0.08, 0.05
1分鐘平均負(fù)載夹界,5分鐘平均負(fù)載,15分鐘平均負(fù)載分別是0.05,0.08,0.05
[root@linux_server ~]# w #查看都有哪些用戶連接服務(wù)器
10:49:59 up 7 min, 2 users, load average: 0.01, 0.06, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:43 6:07 0.01s 0.01s -bash
root pts/0 192.168.94.1 10:48 7.00s 0.02s 0.01s w
2隘世、查看CPU每隔10min的使用情況
[root@linux_server ~]# yum -y install sysstat #裝完成之后需要等待一會
[root@linux_server ~]# sar
Linux 3.10.0-693.el7.x86_64 (linux-server) 11/16/2019 _x86_64_ (1 CPU)
08:50:01 PM CPU %user %nice %system %iowait %steal %idle
09:00:01 PM all 0.25 0.00 0.44 0.78 0.00 98.52
09:10:02 PM all 0.55 0.00 0.32 0.16 0.00 98.98
Average: all 0.40 0.00 0.38 0.47 0.00 98.75
-A:所有報告的總和
-u:輸出CPU使用情況的統(tǒng)計信息
-v:輸出inode可柿、文件和其他內(nèi)核表的統(tǒng)計信息
-d:輸出每一個塊設(shè)備的活動信息
-r:輸出內(nèi)存和交換空間的統(tǒng)計信息
-b:顯示I/O和傳送速率的統(tǒng)計信息
-a:文件讀寫情況
-c:輸出進(jìn)程統(tǒng)計信息鸠踪,每秒創(chuàng)建的進(jìn)程數(shù)
-R:輸出內(nèi)存頁面的統(tǒng)計信息
-y:終端設(shè)備活動情況
-w:輸出系統(tǒng)交換活動信息
例如,每2秒采樣一次复斥,連續(xù)采樣3次营密,觀察CPU 的使用情況
[root@linux_server ~]# sar -u 2 3
Linux 3.10.0-693.el7.x86_64 (linux-server) 11/16/2019 _x86_64_ (1 CPU)
09:19:21 PM CPU %user %nice %system %iowait %steal %idle
09:19:23 PM all 0.00 0.00 0.50 0.00 0.00 99.50
09:19:25 PM all 0.00 0.00 0.00 0.00 0.00 100.00
09:19:27 PM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.17 0.00 0.00 99.83
參數(shù)詳解:
CPU:all 表示統(tǒng)計信息為所有 CPU 的平均值。
%user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比永票。
%nice:顯示在用戶級別卵贱,用于nice操作,所占用 CPU 總時間的百分比侣集。
%system:在核心級別(kernel)運行所使用 CPU 總時間的百分比键俱。
%iowait:顯示用于等待I/O操作占用 CPU 總時間的百分比。
%steal:管理程序(hypervisor)為另一個虛擬進(jìn)程提供服務(wù)而等待虛擬 CPU 的百分比世分。
%idle:顯示 CPU 空閑時間占用 CPU 總時間的百分比编振。
1. 若 %iowait 的值過高,表示硬盤存在I/O瓶頸臭埋。
2. 若 %idle 的值高但系統(tǒng)響應(yīng)慢時踪央,有可能是 CPU 等待分配內(nèi)存,此時應(yīng)加大內(nèi)存容量瓢阴。
3. 若 %idle 的值持續(xù)低于1畅蹂,則系統(tǒng)的 CPU 處理能力相對較低,表明系統(tǒng)中最需要解決的資源是 CPU荣恐。
===================================================================================
例如液斜,每3秒采樣一次,連續(xù)采樣3次叠穆,觀察內(nèi)存和交換空間狀態(tài)
[root@linux_server ~]# sar -r 3 3
Linux 3.10.0-693.el7.x86_64 (linux-server) 11/16/2019 _x86_64_ (1 CPU)
09:20:55 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
09:20:58 PM 676148 323548 32.36 0 169548 293372 9.47 136672 91728 0
09:21:01 PM 676148 323548 32.36 0 169548 293372 9.47 136672 91728 0
09:21:04 PM 676148 323548 32.36 0 169548 293372 9.47 136676 91728 0
Average: 676148 323548 32.36 0 169548 293372 9.47 136673 91728 0
參數(shù)詳解:
輸出項說明:
kbmemfree:這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間.
kbmemused:這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間.
%memused:這個值是kbmemused和內(nèi)存總量(不包括swap)的一個百分比.
kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache
kbcommit:保證當(dāng)前系統(tǒng)所需要的內(nèi)存,即為了確保不溢出而需要的內(nèi)存(RAM+swap).
%commit:這個值是kbcommit與內(nèi)存總量(包括swap)的一個百分比.
=============================================================================
3.查看進(jìn)程io使用情況
[root@linux_server ~]# yum -y install iotop
[root@linux_server ~]# iotop
[root@linux_server ~]# iotop -b -n 3 -d 5
--version #顯示版本號
-h, --help #顯示幫助信息
-o, --only #顯示進(jìn)程或者線程實際上正在做的I/O少漆,而不是全部的,可以隨時切換按o
-b, --batch #運行在非交互式的模式
-n NUM, --iter=NUM #在非交互式模式下硼被,設(shè)置顯示的次數(shù)示损,
-d SEC, --delay=SEC #設(shè)置顯示的間隔秒數(shù),支持非整數(shù)值
-p PID, --pid=PID #只顯示指定PID的信息
-u USER, --user=USER #顯示指定的用戶的進(jìn)程的信息
-P, --processes #只顯示進(jìn)程嚷硫,一般為顯示所有的線程
-a, --accumulated #顯示從iotop啟動后每個線程完成了的IO總數(shù)
-k, --kilobytes #以千字節(jié)顯示
-t, --time #在每一行前添加一個當(dāng)前的時間
IO #IO利用率
4.查看內(nèi)存使用情況
[root@linux_server ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 648128 2108 251128 0 0 334 30 122 186 0 1 99 0 0
r: 表示運行和等待CPU時間片的進(jìn)程數(shù)(就是說多少個進(jìn)程真的分配到CPU)检访,這個值如果長期大于系統(tǒng)CPU個數(shù),說明CPU 不足仔掸,需要增加CPU
b:表示在等待資源的進(jìn)程數(shù)脆贵。
2、memory
swpd:表示切換到內(nèi)存交換區(qū)的內(nèi)存大小嘉汰,即虛擬內(nèi)存已使用的大小(單位KB)状勤,如果大于0鞋怀,表示你的機(jī)器物理內(nèi)存不足 了双泪,如果不是程序內(nèi)存泄露的原因,那么你該升級內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器密似。
free:表示當(dāng)前空閑的物理內(nèi)存
buff:表示baffers cached內(nèi)存大小焙矛,也就是緩沖大小,一般對塊設(shè)備的讀寫才需要緩沖
Cache:表示page cached的內(nèi)存大小残腌,也就是緩存大小村斟,一般作為文件系統(tǒng)進(jìn)行緩沖,頻繁訪問的文件都會被緩存抛猫,如果 cache值非常大說明緩存文件比較多蟆盹,如果此時io中的bi比較小,說明文件系統(tǒng)效率比較好
3闺金、swap
si:表示有磁盤調(diào)入內(nèi)存逾滥,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的內(nèi)存大小败匹;通俗的講就是 每秒從磁盤讀入虛擬內(nèi)存的大小寨昙,如果這 個值大于0,表示物理內(nèi)存不夠用或者內(nèi)存泄露了掀亩,要查找耗內(nèi)存進(jìn)程解決掉舔哪。
so:表示由內(nèi)存進(jìn)入磁盤,也就是由內(nèi)存交換區(qū)進(jìn)入內(nèi)存的內(nèi)存大小槽棍。 注意:一般情況下si捉蚤、so的值都為0,如果si刹泄、so的值長期不為0外里,則說明系統(tǒng)內(nèi)存不足,需要增加系統(tǒng)內(nèi)存
4特石、io
bi:表示由塊設(shè)備讀入數(shù)據(jù)的總量盅蝗,即讀磁盤,單位kb/s
bo:表示寫到塊設(shè)備數(shù)據(jù)的總量姆蘸,即寫磁盤墩莫,單位kb/s
注意:如果bi+bo的值過大,且wa值較大逞敷,則表示系統(tǒng)磁盤IO瓶頸
5.釋放buffffer和cache
[root@linux_server ~]# echo 3 > /proc/sys/vm/drop_caches
6.帶寬使用情況
[root@linux_server ~]# yum install -y epel*
[root@linux_server ~]# yum install -y iftop.x86_64
[root@linux_server ~]# iftop
image.png
第一行:界面上面顯示的是類似刻度尺的刻度范圍狂秦,為顯示流量圖形的長條作標(biāo)尺用的。
中間部分:中間的<= =>這兩個左右箭頭推捐,表示的是流量的方向裂问。=>代表發(fā)送,<=代表接收。
TX:發(fā)送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峰值
rates:分別表示過去 2s 10s 40s 的平均流量
7.動態(tài)查看進(jìn)程
[root@linux_server ~]# yum -y install htop
[root@linux_server ~]# htop
image.png
各項從上至下分別說明如下:
左邊部分從上至下堪簿,分別為痊乾,cpu、內(nèi)存椭更、交換分區(qū)的使用情況哪审,右邊部分為:Tasks為進(jìn)程總數(shù),當(dāng)前運行的進(jìn)程數(shù)虑瀑、Load average為系統(tǒng)1分鐘湿滓,5分鐘,10分鐘的平均負(fù)載情況舌狗、Uptime為系統(tǒng)運行的時間叽奥。
以上各項分別為:
PID:進(jìn)行的標(biāo)識號
USER:運行此進(jìn)程的用戶
PRI:進(jìn)程的優(yōu)先級
NI:進(jìn)程的優(yōu)先級別值,默認(rèn)的為0把夸,可以進(jìn)行調(diào)整
VIRT:進(jìn)程占用的虛擬內(nèi)存值
RES:進(jìn)程占用的物理內(nèi)存值
SHR:進(jìn)程占用的共享內(nèi)存值
S:進(jìn)程的運行狀況而线,R表示正在運行、S表示休眠恋日,等待喚醒膀篮、Z表示僵死狀態(tài)
%CPU:該進(jìn)程占用的CPU使用率
%MEM:該進(jìn)程占用的物理內(nèi)存和總內(nèi)存的百分比
TIME+:該進(jìn)程啟動后占用的總的CPU時間
COMMAND:進(jìn)程啟動的啟動命令名稱
#Linux htop工具使用詳解 -----了解
h, ? F1 查看htop使用說明
S F2 htop 設(shè)定
/ F3 搜索進(jìn)程
\ F4 增量進(jìn)程過濾器
t F5 顯示樹形結(jié)構(gòu)
<, > F6 選擇排序方式
[ F7 可減少nice值可以提高對應(yīng)進(jìn)程的優(yōu)先級
] F8 可增加nice值,降低對應(yīng)進(jìn)程的優(yōu)先級
k F9 可對進(jìn)程傳遞信號
q F10 結(jié)束htop
u 只顯示一個給定的用戶的過程
U 取消標(biāo)記所有的進(jìn)程
H 顯示或隱藏用戶線程
K 顯示或隱藏內(nèi)核線程
F 跟蹤進(jìn)程
P 按CPU 使用排序
M 按內(nèi)存使用排序
T 按Time+ 使用排序
l 顯示進(jìn)程打開的文件
I 倒轉(zhuǎn)排序順序
s 選擇某進(jìn)程岂膳,按s:用strace追蹤進(jìn)程的系統(tǒng)調(diào)用
8.監(jiān)控網(wǎng)速
[root@linux_server ~]# yum -y install nload
[root@linux_server ~]# nload
image.png
上半部分是:Incoming也就是進(jìn)入網(wǎng)卡的流量
下半部分是:Outgoing誓竿,也就是從這塊網(wǎng)卡出去的流量,
每部分都有當(dāng)前流量(Curr)谈截,
平均流量(Avg)筷屡,
最小流量(Min),
最大流量(Max)簸喂,
總和流量(Ttl).
9.網(wǎng)絡(luò)接口統(tǒng)計報告
[root@linux_server ~]# yum -y install nethogs
[root@linux_server ~]# nethogs
image.png
實例1:設(shè)置5秒鐘刷新一次毙死,通過-d來指定刷新頻率
# nethogs -d 5
實例2:監(jiān)視ens33網(wǎng)絡(luò)帶寬
# nethogs ens33
實例3:同時監(jiān)視eth0和eth1接口
# nethogs ens33 ens34
10.文件句柄
在linux/unix操作系統(tǒng)中一切皆文件,我們的設(shè)備是文件喻鳄,文件是文件扼倘,文件夾也是文件。當(dāng)我們用戶每發(fā)起一次請求除呵,就會產(chǎn)生一個文件句柄再菊。文件句柄可以簡單的理解為
文件句柄就是一個索引
。文件句柄就會隨著請求量的增多,進(jìn)程調(diào)用頻繁增加颜曾,那么產(chǎn)生的文件句柄也就會越多纠拔。
系統(tǒng)默認(rèn)對文件句柄是有限制的,不可能會讓一個進(jìn)程無限制的調(diào)用句柄泛豪。因為系統(tǒng)資源是有限的稠诲,所以我們需要限制每一個服務(wù)能夠使用多大的文件句柄侦鹏。操作系統(tǒng)默認(rèn)使用的文件句柄是1024個句柄。
10-1.設(shè)置方式
- 系統(tǒng)全局性修改
[root@nginx_server ~]# vim /etc/security/limits.conf
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
#root只是針對root這個用戶來限制臀叙,soft只是發(fā)提醒种柑,操作系統(tǒng)不會強(qiáng)制限制,一般的站點設(shè)置為一萬左右就ok了
root soft nofile 65535
root hard nofile 65535
# *代表通配符 所有的用戶
* soft nofile 25535
* hard nofile 25535 #hard硬控制,到達(dá)設(shè)定值后匹耕,操作系統(tǒng)會采取機(jī)制對當(dāng)前進(jìn)程進(jìn)行限制,這個時候請求就會受到影響
可以看到
root
和*
荠雕,root代表是root用戶稳其,*代表的是所有用戶,后面的數(shù)字就是文件句柄大小炸卑。
大家可以根據(jù)個人業(yè)務(wù)來進(jìn)行設(shè)置既鞠。
ulimit 命令
# -a 顯示目前資源限制的設(shè)定。
? -c <core文件上限> 設(shè)定core文件的最大值盖文,單位為區(qū)塊嘱蛋。
? -d <數(shù)據(jù)節(jié)區(qū)大小> 程序數(shù)據(jù)節(jié)區(qū)的最大值,單位為KB五续。
? -f <文件大小> shell所能建立的最大文件洒敏,單位為區(qū)塊。
? -H 設(shè)定資源的硬性限制疙驾,也就是管理員所設(shè)下的限制凶伙。
? -m <內(nèi)存大小> 指定可使用內(nèi)存的上限,單位為KB它碎。
# -n <文件數(shù)目> 指定同一時間最多可開啟的文件數(shù)函荣。
? -p <緩沖區(qū)大小> 指定管道緩沖區(qū)的大小,單位512字節(jié)扳肛。
? -s <堆疊大小> 指定堆疊的上限傻挂,單位為KB。
? -S 設(shè)定資源的彈性限制挖息。
? -t <CPU時間> 指定CPU使用時間的上限金拒,單位為秒。
? -u <程序數(shù)目> 用戶最多可開啟的程序數(shù)目旋讹。
? -v <虛擬內(nèi)存大小> 指定可使用的虛擬內(nèi)存上限殖蚕,單位為KB
1、ulimit -a 顯示系統(tǒng)資源的設(shè)置
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63154
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 63154
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
2沉迹、ulimit -n 65535 #修改打開句柄數(shù) ---臨時