系統(tǒng)優(yōu)化
知識(shí)點(diǎn)
(簡(jiǎn)介:系統(tǒng)優(yōu)化其本質(zhì)是系統(tǒng)在提供服務(wù)的同時(shí),承受壓力過(guò)大需進(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):一段時(shí)間內(nèi)系統(tǒng)的平均負(fù)載,這個(gè)一段時(shí)間一般取1分鐘、5分鐘、15分鐘
[root@linux-server ~]# uptime
20:42:26 up 6:12, 2 users, load average: 0.00, 0.01, 0.05
1分鐘平均負(fù)載,5分鐘平均負(fù)載,15分鐘平均負(fù)載分別是0.00,0.01,0.05
[root@linux-server ~]# w #查看都有哪些用戶連接服務(wù)器
20:43:46 up 6:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.246.1 20:41 2.00s 0.00s 0.00s w
[root@cuichengjie ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@cuichengjie ~]# uname -a
Linux cuichengjie.edu.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@cuichengjie ~]# uname -r
3.10.0-693.el7.x86_64
**2、查看CPU每隔10min的使用情況 **
[root@linux-server ~]# yum -y install sysstat ---安裝完成之后需要等待一會(huì)
[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:所有報(bào)告的總和
-u:輸出CPU使用情況的統(tǒng)計(jì)信息
-v:輸出inode、文件和其他內(nèi)核表的統(tǒng)計(jì)信息
-d:輸出每一個(gè)塊設(shè)備的活動(dòng)信息
-r:輸出內(nèi)存和交換空間的統(tǒng)計(jì)信息
-b:顯示I/O和傳送速率的統(tǒng)計(jì)信息
-a:文件讀寫情況
-c:輸出進(jìn)程統(tǒng)計(jì)信息,每秒創(chuàng)建的進(jìn)程數(shù)
-R:輸出內(nèi)存頁(yè)面的統(tǒng)計(jì)信息
-y:終端設(shè)備活動(dòng)情況
-w:輸出系統(tǒng)交換活動(dò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)計(jì)信息為所有 CPU 的平均值。
%user:顯示在用戶級(jí)別(application)運(yùn)行使用 CPU 總時(shí)間的百分比。
%nice:顯示在用戶級(jí)別,用于nice操作,所占用 CPU 總時(shí)間的百分比。
%system:在核心級(jí)別(kernel)運(yùn)行所使用 CPU 總時(shí)間的百分比。
%iowait:顯示用于等待I/O操作占用 CPU 總時(shí)間的百分比。
%steal:管理程序(hypervisor)為另一個(gè)虛擬進(jìn)程提供服務(wù)而等待虛擬 CPU 的百分比。
%idle:顯示 CPU 空閑時(shí)間占用 CPU 總時(shí)間的百分比。
1. 若 %iowait 的值過(guò)高,表示硬盤存在I/O瓶頸
2. 若 %idle 的值高但系統(tǒng)響應(yīng)慢時(shí),有可能是 CPU 等待分配內(nèi)存,此時(shí)應(yīng)加大內(nèi)存容量
3. 若 %idle 的值持續(xù)低于1,則系統(tǒng)的 CPU 處理能力相對(duì)較低,表明系統(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ù)詳解:
輸出項(xiàng)說(shuō)明:
kbmemfree:這個(gè)值和free命令中的free值基本一致,所以它不包括buffer和cache的空間.
kbmemused:這個(gè)值和free命令中的used值基本一致,所以它包括buffer和cache的空間.
%memused:這個(gè)值是kbmemused和內(nèi)存總量(不包括swap)的一個(gè)百分比.
kbbuffers和kbcached:這兩個(gè)值就是free命令中的buffer和cache
kbcommit:保證當(dāng)前系統(tǒng)所需要的內(nèi)存,即為了確保不溢出而需要的內(nèi)存(RAM+swap).
%commit:這個(gè)值是kbcommit與內(nèi)存總量(包括swap)的一個(gè)百分比.
=============================================================================
3.查看進(jìn)程io使用情況
[root@linux-server ~]# iotop
iotop的快捷鍵
r:反向排序,占用讀寫百分比
o:切換至選項(xiàng)--only,
p:切換至--processes選項(xiàng),
a:切換至--accumulated選項(xiàng)
q:退出
i:改變線程的優(yōu)先級(jí)
[root@linux-server ~]# iotop -b -n 3 -d 5
--version #顯示版本號(hào)
-h, --help #顯示幫助信息
-o, --only #顯示進(jìn)程或者線程實(shí)際上正在做的I/O,而不是全部的,可以隨時(shí)切換按o
-b, --batch #運(yùn)行在非交互式的模式
-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啟動(dòng)后每個(gè)線程完成了的IO總數(shù)
-k, --kilobytes #以千字節(jié)顯示
-t, --time #在每一行前添加一個(gè)當(dāng)前的時(shí)間
定義:SWAPIN
進(jìn)程或者線程花費(fèi)在交換內(nèi)存時(shí)間的百分比
[root@localhost ~]# iotop -bn 2 -d 2 -p 627 //指定顯示某個(gè)進(jìn)程的狀態(tài)
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 4 311168 1124 570008 0 0 9 28 59 58 0 0 100 0 0
r: 表示運(yùn)行和等待CPU時(shí)間片的進(jìn)程數(shù)(就是說(shuō)多少個(gè)進(jìn)程真的分配到CPU),這個(gè)值如果長(zhǎng)期大于系統(tǒng)CPU個(gè)數(shù),說(shuō)明CPU 不足,需要增加CPU
b:表示在等待資源的進(jìn)程數(shù)。
2、memory
swpd:表示切換到內(nèi)存交換區(qū)的內(nèi)存大小,即虛擬內(nèi)存已使用的大小(單位KB),如果大于0,表示你的機(jī)器物理內(nèi)存不足 了,如果不是程序內(nèi)存泄露的原因,那么你該升級(jí)內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器。
free:表示當(dāng)前空閑的物理內(nèi)存
buff:表示baffers cached內(nèi)存大小,也就是緩沖大小,一般對(duì)塊設(shè)備的讀寫才需要緩沖
Cache:表示page cached的內(nèi)存大小,也就是緩存大小,一般作為文件系統(tǒng)進(jìn)行緩沖,頻繁訪問(wèn)的文件都會(huì)被緩存,如果 cache值非常大說(shuō)明緩存文件比較多,如果此時(shí)io中的bi比較小,說(shuō)明文件系統(tǒng)效率比較好
3、swap
si:表示有磁盤調(diào)入內(nèi)存,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的內(nèi)存大小;通俗的講就是 每秒從磁盤讀入虛擬內(nèi)存的大小,如果這 個(gè)值大于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的值長(zhǎng)期不為0,則說(shuō)明系統(tǒng)內(nèi)存不足,需要增加系統(tǒng)內(nèi)存
4、io
bi:表示由塊設(shè)備讀入數(shù)據(jù)的總量,即讀磁盤,單位kb/s
bo:表示寫到塊設(shè)備數(shù)據(jù)的總量,即寫磁盤,單位kb/s
注意:如果bi+bo的值過(guò)大,且wa值較大,則表示系統(tǒng)磁盤IO瓶頸
緩存和緩沖,兩者都是將數(shù)據(jù)暫存在一個(gè)容器中。那兩者怎么區(qū)分呢?下面我已生活例子打一個(gè)舉例。
緩沖:我們倒垃圾的時(shí)候,不可能一有垃圾就直接跑去垃圾站倒垃圾吧。而是先把垃圾倒到垃圾桶,垃圾桶滿了再一起倒到垃圾站。其中垃圾桶就是這個(gè)緩沖容器。得到緩沖池滿了,再一起處理。其實(shí)這和我們的緩沖流一樣,都有一個(gè)buffer。很多中間件都有這個(gè)有。其實(shí)就是為了減少io操作次數(shù),提高效率。
緩存: 我們生活中看視頻就是個(gè)最好的例子, 比如我要看《神雕俠侶》,如果我沒(méi)有下載。則需要我先從遠(yuǎn)程服務(wù)器下載好到本地。那么我以后需要看《神雕俠侶》的時(shí)候,之間本地看就行了。本地的《神雕俠侶》就相當(dāng)于一個(gè)緩存容器。
6、釋放buffffer和cache
[root@linux-server ~]# echo 3 > /proc/sys/vm/drop_caches
7、帶寬使用情況
[root@linux-server ~]# yum install -y epel*
[root@linux-server ~]# yum install -y iftop.x86_64
第一行:界面上面顯示的是類似刻度尺的刻度范圍,為顯示流量圖形的長(zhǎng)條作標(biāo)尺用的。
中間部分:中間的<= =>這兩個(gè)左右箭頭,表示的是流量的方向。=>代表發(fā)送,<=代表接收。
TX:發(fā)送流量
RX:接收流量
TOTAL:總流量
Cumm:運(yùn)行iftop到目前時(shí)間的總流量
peak:流量峰值
rates:分別表示過(guò)去 2s 10s 40s 的平均流量
8.動(dòng)態(tài)查看進(jìn)程
[root@linux-server ~]# yum install -y htop.x86_64
各項(xiàng)從上至下分別說(shuō)明如下:
左邊部分從上至下,分別為,cpu、內(nèi)存、交換分區(qū)的使用情況,右邊部分為:Tasks為進(jìn)程總數(shù),當(dāng)前運(yùn)行的進(jìn)程數(shù)、Load average為系統(tǒng)1分鐘,5分鐘,10分鐘的平均負(fù)載情況、Uptime為系統(tǒng)運(yùn)行的時(shí)間。
以上各項(xiàng)分別為:
PID:進(jìn)行的標(biāo)識(shí)號(hào)
USER:運(yùn)行此進(jìn)程的用戶
PRI:進(jìn)程的優(yōu)先級(jí)
NI:進(jìn)程的優(yōu)先級(jí)別值,默認(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)程的運(yùn)行狀況,R表示正在運(yùn)行、S表示休眠,等待喚醒、Z表示僵死狀態(tài)
%CPU:該進(jìn)程占用的CPU使用率
%MEM:該進(jìn)程占用的物理內(nèi)存和總內(nèi)存的百分比
TIME+:該進(jìn)程啟動(dòng)后占用的總的CPU時(shí)間
COMMAND:進(jìn)程啟動(dòng)的啟動(dòng)命令名稱
#Linux htop工具使用詳解 -----了解
h, ? F1 查看htop使用說(shuō)明
S F2 htop 設(shè)定
/ F3 搜索進(jìn)程
\ F4 增量進(jìn)程過(guò)濾器
t F5 顯示樹(shù)形結(jié)構(gòu)
<, > F6 選擇排序方式
[ F7 可減少nice值可以提高對(duì)應(yīng)進(jìn)程的優(yōu)先級(jí)
] F8 可增加nice值,降低對(duì)應(yīng)進(jìn)程的優(yōu)先級(jí)
k F9 可對(duì)進(jìn)程傳遞信號(hào)
q F10 結(jié)束htop
u 只顯示一個(gè)給定的用戶的過(guò)程
U 取消標(biāo)記所有的進(jìn)程
H 顯示或隱藏用戶線程
K 顯示或隱藏內(nèi)核線程
F 跟蹤進(jìn)程
P 按CPU 使用排序
M 按內(nèi)存使用排序
T 按Time+ 使用排序
l 顯示進(jìn)程打開(kāi)的文件
I 倒轉(zhuǎn)排序順序
s 選擇某進(jìn)程,按s:用strace追蹤進(jìn)程的系統(tǒng)調(diào)用
9.監(jiān)控網(wǎng)速
[root@linux-server ~]# yum install -y nload.x86_64
[root@linux-server ~]# nload
上半部分是:Incoming也就是進(jìn)入網(wǎng)卡的流量
下半部分是:Outgoing,也就是從這塊網(wǎng)卡出去的流量,
每部分都有當(dāng)前流量(Curr),
平均流量(Avg),
最小流量(Min),
最大流量(Max),
總和流量(Ttl).
10、網(wǎng)絡(luò)接口統(tǒng)計(jì)報(bào)告
[root@linux-server ~]# yum install -y nethogs.x86_64
[root@linux-server ~]# nethogs
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-2G6JTLAm-1585052863550)(assets/image-20191116210702235.png)]
實(shí)例1:設(shè)置5秒鐘刷新一次,通過(guò)-d來(lái)指定刷新頻率
# nethogs -d 5
實(shí)例2:監(jiān)視ens33網(wǎng)絡(luò)帶寬
# nethogs ens33
實(shí)例3:同時(shí)監(jiān)視eth0和eth1接口
# nethogs ens33 ens34
11、文件句柄
在linux/unix操作系統(tǒng)中一切皆文件,我們的設(shè)備是文件,文件是文件,文件夾也是文件。當(dāng)我們用戶每發(fā)起一次請(qǐng)求,就會(huì)產(chǎn)生一個(gè)文件句柄。文件句柄可以簡(jiǎn)單的理解為`文件句柄就是一個(gè)索引`。文件句柄就會(huì)隨著請(qǐng)求量的增多,進(jìn)程調(diào)用頻繁增加,那么產(chǎn)生的文件句柄也就會(huì)越多。
系統(tǒng)默認(rèn)對(duì)文件句柄是有限制的,不可能會(huì)讓一個(gè)進(jìn)程無(wú)限制的調(diào)用句柄。因?yàn)橄到y(tǒng)資源是有限的,所以我們需要限制每一個(gè)服務(wù)能夠使用多大的文件句柄。操作系統(tǒng)默認(rèn)使用的文件句柄是1024個(gè)句柄。
11-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只是針對(duì)root這個(gè)用戶來(lái)限制,soft只是發(fā)提醒,操作系統(tǒng)不會(huì)強(qiáng)制限制,一般的站點(diǎn)設(shè)置為一萬(wàn)左右就ok了
root soft nofile 65535
root hard nofile 65535
# *代表通配符 所有的用戶
* soft nofile 25535
* hard nofile 25535 #hard硬控制,到達(dá)設(shè)定值后,操作系統(tǒng)會(huì)采取機(jī)制對(duì)當(dāng)前進(jìn)程進(jìn)行限制,這個(gè)時(shí)候請(qǐng)求就會(huì)受到影響
可以看到`root`和`*`,root代表是root用戶,*代表的是所有用戶,后面的數(shù)字就是文件句柄大小。大家可以根據(jù)個(gè)人業(yè)務(wù)來(lái)進(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í)間最多可開(kāi)啟的文件數(shù)。
? -p <緩沖區(qū)大小> 指定管道緩沖區(qū)的大小,單位512字節(jié)。
? -s <堆疊大小> 指定堆疊的上限,單位為KB。
? -S 設(shè)定資源的彈性限制。
? -t <CPU時(shí)間> 指定CPU使用時(shí)間的上限,單位為秒。
? -u <程序數(shù)目> 用戶最多可開(kāi)啟的程序數(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 #修改打開(kāi)句柄數(shù) ---臨時(shí)