linux系統(tǒng)優(yōu)化

系統(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í)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容