文章目錄
- Linux 系統調性能調優詳解
- 1.影響服務器性能因素
- 2.系統性能評估標準
- 3.系統性能分析工具
- 4.linux 性能評估與優化
- 4.1 系統整體性能評估
- 4.2 CPU性能評估
- 4.3 記憶體性能評估
- 4.4 磁盤I/O性能評估
- 4.5 網路性能評估
- 5.系統優化實戰
- 5.1找出系統中使用CPU最多的行程
- 5.2 找出系統中使用記憶體最多的行程
- 5.3 找出系統中對磁盤讀寫最多的行程
- 5.4 找出系統中使用網路最多的行程
- 5.5 優化linux檔案打開最大數
- 6.內核引數優化
- 總結
Linux 系統調性能調優詳解

作為運維工程師來講,最主要的作業保障:企業門戶網站、業務系統、應用程式、軟體高效穩定的運行,密切關注業務系統、作業系統性能,對業務系統、作業系統實施性能優化,使其發揮最大的性能;
影響Linux服務器、業務網站等性能因素有哪些層面呢?下面我們就一起看看如何調優吧
1.影響服務器性能因素
-
1.作業系統方面
1.記憶體 2.CPU 3.磁盤I/O 4.網路I/O帶寬 -
2.程式應用方面
1.Nginx 2.Mysql 3.Tomcat 4.PHP 5.應用程式代碼

2.系統性能評估標準
- %user:表示CPU處在用戶模式下的時間百分比,
- %sys:表示CPU處在系統模式下的時間百分比,
- %iowait:表示CPU等待輸入輸出完成時間的百分比,
- swap in:即si,表示虛擬記憶體的頁匯入,即從SWAP DISK交換到RAM
- swap out:即so,表示虛擬記憶體的頁匯出,即從RAM交換到SWAP DISK,
- 如圖:


3.系統性能分析工具
-
3.1常用命令
vmstat、sar、iostat、netstat、free、ps、top、iftop -
3.2常用系統性能組合分析命令
top、uptime 檢查系統整體的負載、承受能力; vmstat、sar、iostat 、top 檢測是否是CPU瓶頸; free、vmstat 檢測是否是記憶體瓶頸; iostat、iotop 檢測是否是磁盤I/O瓶頸; netstat、iftop 檢測是否是網路帶寬瓶頸,
4.linux 性能評估與優化
4.1 系統整體性能評估
-
uptime 命令(查看系統負載)
[root@localhost ~]# uptime 04:15:24 up 2 days, 13:05, 1 user, load average: 0.01, 0.02, 0.05 [root@localhost ~]# 現在時間、系統已經運行了多長時間、目前有多少登錄用戶、load average:系統在過去的1分鐘、5分鐘和15分鐘內的平均負載, load average:這三個值的大小一般不能大于系統CPU的個數,例如,本輸出中系統有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負載很高,可能會影響系統性能,但是偶爾大于8時,倒不用擔心,一般不會影響系統性能, [root@localhost ~]# uptime -p #以漂亮的格式顯示機器正常運行的時間 up 2 days, 13 hours, 9 minutes [root@localhost ~]# uptime -s #系統自開始運行時間 年-月-日 小時-分鐘-秒 2021-06-08 15:09:34 [root@localhost ~]# uptime -h #顯示幫助資訊 服務器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 負載過高, 經驗:單核心,1分鐘的系統平均負載不要超過3,就可以,這是個經驗值
4.2 CPU性能評估
-
1.vmstat 命令(監控系統CPU)
[root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 3059368 2104 230268 0 0 0 0 28 26 0 0 100 0 0 r串列示運行和等待cpu時間片的行程數,這個值如果長期大于系統CPU的個數,說明CPU不足,需要增加CPU, b串列示在等待資源的行程數,比如正在等待I/O、或者記憶體交換等, us列顯示了用戶行程消耗的CPU 時間百分比,us的值比較高時,說明用戶行程消耗的cpu時間多,但是如果長期大于50%,就需要考慮優化程式或演算法, sy列顯示了內核行程消耗的CPU時間百分比,Sy的值較高時,說明內核消耗的CPU資源很多, 根據經驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足, -
2.top命令(實時監控系統CPU)
[root@localhost ~]# top top - 04:50:43 up 2 days, 13:41, 1 user, load average: 0.10, 0.06, 0.06 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3865308 total, 2912528 free, 573852 used, 378928 buff/cache KiB Swap: 524284 total, 524284 free, 0 used. 3028580 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 38151 root 20 0 0 0 0 S 0.3 0.0 0:01.93 kworker/0:0 1 root 20 0 125332 3828 2496 S 0.0 0.1 0:04.48 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.33 kthreadd top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個行程的資源占用狀況,常用于服務端性能分析, 第一行資料相當于uptime命令輸出,11:00:54是當前時間,up 54 days,23:55 是系統已經運行的時間,6 users表示當前有6個用戶在登錄,load average:16.32,18.75,21.04分別表示系統一分鐘平均負載,5分鐘平均負載,15分鐘平均負載, 平均負載 平均負載表示的平均活躍行程數,包括正在running的行程數,準備running(就緒態)的行程數,和處于不可中斷睡眠狀態的行程數,如果平均負載數剛好等于CPU核數,那證明每個核都能得到很好的利用,如果平均負載數大于核數證明系統處于過載的狀態,通常認為是超過核數的70%認為是嚴重過載,需要關注,還需結合1分鐘平均負載,5分鐘平均負載,15分鐘平均負載看負載的趨勢,如果1分鐘負載比較高,5分鐘和15分鐘的平均負載都比較低,則說明是瞬間升高,需要觀察,如果三個值都很高則需要關注下是否某個行程在瘋狂消耗CPU或者有頻繁的IO操作,也有可能是系統運行的行程太多,頻繁的行程切換導致,比如說上面的演示環境是一臺8核的centos機器,證明系統是長期處于過載狀態在運行, 第二行的Tasks資訊展示的系統運行的整體行程數量和狀態資訊,102 total 表示系統現在一共有102個用戶行程,1 running 1個行程正在處于running狀態,101 sleeping 表示101 個行程正處于sleeping狀態,0 stopped 表示 0 個行程正處于stopped狀態,0 zombie表示 有0個僵尸行程, 第3行的%Cpu(s)表示的是總體CPU使用情況, us user 表示用戶態的CPU時間比例 sy system 表示內核態的CPU時間比例 ni nice 表示運行低優先級行程的CPU時間比例 id idle 表示空閑CPU時間比例 wa iowait 表示處于IO等待的CPU時間比例 hi hard interrupt 表示處理硬中斷的CPU時間比例 si soft interrupt 表示處理軟中斷的CPU時間比例 st steal 表示當前系統運行在虛擬機中的時候,被其他虛擬機占用的CPU時間比例, 第4,5行顯示的是系統記憶體使用情況,單位是KiB,totol 表示總記憶體,free 表示沒使用過的內容,used是已經使用的記憶體,buff表示用于讀寫磁盤快取的記憶體,cache表示用于讀寫檔案快取的記憶體,avail表示可用的應用記憶體, 第6行開始往后表示的是具體的每個行程狀態: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND PID 行程ID USER 行程所有者的用戶名,例如root PR 行程調度優先級 NI 行程nice值(優先級),越小的值代表越高的優先級 VIRT 行程使用的虛擬記憶體 RES 行程使用的物理記憶體(不包括共享記憶體) SHR 行程使用的共享記憶體 CPU 行程使用的CPU占比 MEM 行程使用的記憶體占比 TIME 行程啟動后到現在所用的全部CPU時間 COMMAND 行程的啟動命令(默認只顯示二進制,top -c能夠顯示命令列和啟動引數)
4.3 記憶體性能評估
-
free指令監控記憶體
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 3774 560 2844 8 370 2957 Swap: 511 0 511 [root@localhost ~]# 一般有這樣一個經驗公式:應用程式可用記憶體/系統物理記憶體>70%時,表示系統記憶體資源非常充足,不影響系統性能,應用程式可用記憶體/系統物理記憶體<20%時,表示系統記憶體資源緊缺,需要增加系統記憶體 20%<應用程式可用記憶體/系統物理記憶體<70%時,表示系統記憶體資源基本能滿足應用需求,暫時不影響系統性能,
4.4 磁盤I/O性能評估
-
iostat命令
iostat被用于監視系統輸入輸出設備和CPU的使用情況,它的特點是匯報磁盤活動統計情況,同時也會匯報出CPU使用情況, [root@localhost ~]# iostat -bash: iostat: command not found [root@localhost ~]# yum -y install sysstat [root@localhost ~]# iostat -d 1 10 #沒隔1秒,持續10次 Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 06/11/2021 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.36 0.66 304530 146757 scd0 0.00 0.00 0.00 1028 0 dm-0 0.00 0.01 0.00 2228 0 對上面每項的輸出解釋如下: kB_read/s表示每秒讀取的資料塊數, kB_wrtn/s表示每秒寫入的資料塊數, kB_read表示讀取的所有塊數, kB_wrtn表示寫入的所有塊數, 可以通過kB_read/s和kB_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果kB_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程式,如果kB_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的資料放入記憶體中進行操作, -
sar 命令系統運行狀態統計
通過sar -d組合,可以對系統的磁盤IO做一個基本的統計,請看下面的一個輸出 [root@localhost ~]# sar -d 2 6 Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 06/11/2021 _x86_64_ (2 CPU) 05:46:58 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 05:47:00 AM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 05:47:00 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 05:47:00 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 需要關注的幾個引數含義: 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系統已經滿負荷的在作業,該磁盤可能存在瓶頸,長期下去,勢必影響系統的性能,可以通過優化程式或者通過更換更高、更快的磁盤來解決此問題,
4.5 網路性能評估
-
常用命令
通過ping命令 檢測網路的連通性;
通過netstat –i 組合檢測網路介面狀況;
通過netstat –r組合 檢測系統的路由表資訊;
通過sar -n組合 顯示系統的網路運行狀態;
通過iftop -i eth0 查看網卡流量;fping 檢測主機是否存在
-
iftop 命令
iftop是一款實時流量監控工具,監控TCP/IP連接等,缺點就是無報表功能,必須以root身份才能運行 [root@localhost ~]# yum -y install iftop [root@localhost ~]# iftop #默認監控第一塊網卡的流量 [root@localhost ~]# iftop -i ens33 #指定監控ens33網卡流量 [root@localhost ~]# iftop -n #直接顯示IP, 不進行DNS反決議 -
fping 命令
檢測192.168.1.1到192.168.1.10之間的主機是否存在: [root@localhost ~]# fping -a -g 192.168.1.1 192.168.1.10 檢測192.168.1.1/24的主機是否存在: [root@localhost ~]# fping -a -g 192.168.1.1/24 將IP串列放在一個檔案里面,通過讀取檔案來檢測串列里的主機是否存在: [root@localhost ~]# fping -a -f ip.txt 檢測www.baidu.com是否存在: [root@localhost ~]# fping www.baidu.com

5.系統優化實戰
5.1找出系統中使用CPU最多的行程
-
方法1
運行top , 找出使用CPU最多的行程 ,按大寫的P,可以按CPU使用率來排序顯示 -
方法2
按照實際使用CPU,從大到小排序顯示所有行程串列 [root@localhost ~]# ps -aux --sort -pcpu | more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 647 0.1 0.1 305032 6196 ? Ssl Jun08 4:11 /usr/bin/vmtoolsd root 1 0.0 0.0 125332 3844 ? Ss Jun08 0:04 /usr/lib/systemd/system d --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S Jun08 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jun08 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< Jun08 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S Jun08 0:02 [kworker/u256:0] root 7 0.0 0.0 0 0 ? S Jun08 0:01 [migration/0] root 8 0.0 0.0 0 0 ? S Jun08 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S Jun08 0:20 [rcu_sched] root 10 0.0 0.0 0 0 ? S Jun08 0:02 [watchdog/0] root 11 0.0 0.0 0 0 ? S Jun08 0:02 [watchdog/1] root 12 0.0 0.0 0 0 ? S Jun08 0:01 [migration/1] root 13 0.0 0.0 0 0 ? S Jun08 0:00 [ksoftirqd/1] root 15 0.0 0.0 0 0 ? S< Jun08 0:00 [kworker/1:0H] 注: -pcpu 可以顯示出行程絕對路徑,方便找出木馬程式運行的路徑

5.2 找出系統中使用記憶體最多的行程
-
方法1
使用top命令 運行top , 然后按下大寫的M 可以按記憶體使用率來排序顯示 -
方法2
按照實際使用記憶體,從大到小排序顯示所有行程串列 [root@localhost ~]# ps -aux --sort -rss | more 降序 [root@localhost ~]# ps -aux --sort rss | more 升序 [root@localhost ~]# ps -aux --sort -rss | more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 31977 0.0 11.8 1183068 456476 ? Sl Jun10 0:16 /usr/local/mysql55/bin/ mysqld --basedir=/usr/local/mysql55 --datadir=/data/mysql --plugin-dir=/usr/local/mysql55 /lib/plugin --user=mysql --log-error=/data/mysql/localhost.localdomain.err --pid-file=/da ta/mysql/localhost.localdomain.pid root 901 0.0 0.4 562428 16576 ? Ssl Jun08 0:32 /usr/bin/python -Es /us r/sbin/tuned -l -P root 911 0.0 0.3 610356 13988 ? Ssl Jun08 0:00 /usr/sbin/libvirtd polkitd 661 0.0 0.2 534264 10184 ? Ssl Jun08 0:00 /usr/lib/polkit-1/polki td --no-debug root 663 0.0 0.2 695264 9332 ? Ssl Jun08 0:21 /usr/sbin/NetworkManage r --no-daemon root 645 0.0 0.2 212120 8588 ? Ssl Jun08 0:17 /usr/sbin/rsyslogd -n root 464 0.0 0.1 36828 6548 ? Ss Jun08 0:09 /usr/lib/systemd/system d-journald
5.3 找出系統中對磁盤讀寫最多的行程
-
查看系統中哪個磁盤或磁區最繁忙?
對于這個服務器,8塊磁盤中,哪個硬碟最繁忙?哪個磁區最繁忙? 通過iostat命令查看IO是否存在瓶頸 [root@localhost ~]# iostat -d -k -p /dev/sda Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 06/11/2021 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.35 0.67 305166 151035 sda1 0.02 0.13 0.01 29849 2088 sda2 0.00 0.01 0.00 2500 0 sda3 0.06 1.20 0.66 270744 148946 測驗: 給磁盤寫入一些內容, 寫入時盡可能不讀磁盤 讀入的資料用/dev/zero ,/dev/zero不會讀磁盤的, sync #把記憶體中的資料快速寫到磁盤上, 只做dd不執行sync,不容易看不出寫入效果 [root@localhost ~]# dd if=/dev/zero of=h.txt bs=10M count=1000;sync ^C79+0 records in 79+0 records out 828375040 bytes (828 MB) copied, 32.059 s, 25.8 MB/s 再次查看 [root@localhost ~]# iostat -p sda -dk Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 06/11/2021 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.09 1.35 2.87 305242 650691 sda1 0.02 0.13 0.01 29849 2088 sda2 0.00 0.01 0.00 2500 0 sda3 0.07 1.20 2.86 270820 648602 [root@localhost ~]# -
iotop命令,查看哪個行程使用磁盤讀寫最多
[root@localhost ~]# yum -y install iotop [root@localhost ~]# iotop -o -d 1 o 只顯示有io操作的行程 -b 批量顯示,無互動,主要用作記錄到檔案 -n NUM 顯示NUM次,主要用于非互動式模式 -d SEC 間隔SEC秒顯示一次 -p PID 監控的行程pid -u USER 監控的行程用戶

5.4 找出系統中使用網路最多的行程
-
nload 監控總體帶寬使用情況
[root@localhost ~]# yum install nload -y #安裝nload工具 [root@localhost ~]# nload #開啟監控 另外重新打開一個終端,然后產生一些測驗資料 [root@localhost ~]# ab -n 1000 -c 2 http://www.baidu.com/index.html 測驗結果 [root@localhost ~]# nload Device ens33 [192.168.10.10] (1/2): ========================================================================================= Incoming: # # # # Curr: 28.07 MBit/s # Avg: 28.07 MBit/s # Min: 28.07 MBit/s # Max: 28.07 MBit/s # Ttl: 145.24 MByte Outgoing: Curr: 350.62 kBit/s Avg: 350.62 kBit/s Min: 350.62 kBit/s Max: 350.62 kBit/s . Ttl: 4.76 MByte Device ens33 [192.168.10.10] (1/2): ========================================================================================= Incoming: ## ## ## ## Curr: 28.48 MBit/s ## Avg: 28.48 MBit/s ## Min: 28.07 MBit/s ## Max: 28.48 MBit/s ## Ttl: 147.06 MByte Outgoing: Curr: 353.68 kBit/s Avg: 353.68 kBit/s Min: 350.62 kBit/s Max: 353.68 kBit/s .. Ttl: 4.79 MByte -
nethogs 使用帶寬最多的行程
[root@localhost ~]# yum -y install nethogs #安裝nethogs工具 [root@localhost ~]# nethogs #開啟監控 在另外開一個終端下載 wget東西 [root@localhost ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz 監控測驗顯示結果 [root@localhost ~]# nethogs Ethernet link detected Waiting for first packet to arrive (see sourceforge.net bug 1019381) NetHogs version 0.8.5 PID USER PROGRAM DEV SENT RECEIVED 39738 root wget ens33 21.877 4158.442 KB/sec 38492 root sshd: root@pts/0 ens33 0.870 0.211 KB/sec ? root unknown TCP 0.000 0.000 KB/sec TOTAL 22.747 4158.653 KB/sec
5.5 優化linux檔案打開最大數
在生產環境中,由于某些軟體、應用程式發揮最大的性能,使用Linux內核默認資源顯然不夠的,要對Linux內核資源進行重新修改和調整,對Linux內核資源進行優化
默認Linux內核對每個用戶設定了打開檔案最大數為1024,對于高并發網站,是遠遠不夠的,需要將默認值調整到更大
inux每個用戶打開檔案最大數永久設定方法,將如下代碼加入內核限制檔案/etc/security/limits.conf的末尾:
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
如上設定為對每個用戶分別設定nofile、noproc最大數,如果需要對Linux整個系統設定檔案最大數限制,需要修改/proc/sys/fs/file-max中的值,該值為Linux總檔案打開數,
例如設定為:echo 3865161233 >/proc/sys/fs/file-max,

6.內核引數優化
vi /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 6000
timewait的數量,默認是180000,
net.ipv4.ip_local_port_range = 1024 65000
允許系統打開的埠范圍,
net.ipv4.tcp_tw_recycle = 1
啟用timewait快速回收,
net.ipv4.tcp_tw_reuse = 1
開啟重用,允許將TIME-WAIT sockets重新用于新的TCP連接,
net.ipv4.tcp_syncookies = 1
開啟SYN Cookies,當出現SYN等待佇列溢位時,啟用cookies來處理,
net.core.somaxconn = 262144
web應用中listen函式的backlog默認會給我們內核引數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調整這個值,
net.core.netdev_max_backlog = 262144
每個網路介面接收資料包的速率比內核處理這些包的速率快時,允許送到佇列的資料包的最大數目,
net.ipv4.tcp_max_orphans = 262144
系統中最多有多少個TCP套接字不被關聯到任何一個用戶檔案句柄上,如果超過這個數字,孤兒連接將即刻被復位并列印出警告資訊,這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了記憶體之后),
net.ipv4.tcp_max_syn_backlog = 262144
記錄的那些尚未收到客戶端確認資訊的連接請求的最大值,對于有128M記憶體的系統而言,預設值是1024,小記憶體的系統則是128,
net.ipv4.tcp_timestamps = 0
時間戳可以避免序列號的卷繞,一個1Gbps的鏈路肯定會遇到以前用過的序列號,時間戳能夠讓內核接受這種“例外”的資料包,這里需要將其關掉,
net.ipv4.tcp_synack_retries = 1
為了打開對端的連接,內核需要發送一個SYN并附帶一個回應前面一個SYN的ACK,也就是所謂三次握手中的第二次握手,這個設定決定了內核放棄連接之前發送SYN+ACK包的數量,
net.ipv4.tcp_syn_retries = 1
在內核放棄建立連接之前發送SYN包的數量,
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間,對端可以出錯并永遠不關閉連接,甚至意外當機,預設值是60秒,2.2 內核的通常值是180秒,你可以按這個設定,但要記住的是,即使你的機器是一個輕載的WEB服務器,也有因為大量的死套接字而記憶體溢位的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因為它最多只能吃掉1.5K記憶體,但是它們的生存期長些,
net.ipv4.tcp_keepalive_time = 30
當keepalive起用的時候,TCP發送keepalive訊息的頻度,預設是2小時,
總結
如果你閱讀到這里,我相信你一定和我一樣,正在努力的變成一個優秀的運維工程師,朝著心中的那一方凈土出發,
關于linux系統內核優化,總體從系統和應用程式出發,但如果在具體點,我們還是從以下方面去考慮:
硬體層面
CPU、記憶體、硬碟容量、硬碟I/O讀寫、網卡自身帶寬容量等,通常對硬體層面因素的優化主要是考慮增加其配置;軟體層面
Linux系統下各個應用程式:Nginx、Tomcat、MYSQL、Redis、程式代碼、網站代碼等,對其網站代碼、軟體的組態檔引數優化、優化軟體架構、是否增加集群、分布式結構以擴展軟體的本身的性能;系統層面
選擇比較穩定的Linux作業系統發行版、減少不必要的服務、埠、修改Linux內核自身的限制、對Linux內核實施優化(打開埠數、行程數、檔案數等);網路層面
引入性能比較強硬體網路設備、交換機、路由器、防火墻,增加網路設備的背板帶寬、帶寬容量、吞吐率、運營商購買帶寬容量等;
寫作不易,點個贊,收藏下哦,方便以后查找,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287029.html
標籤:其他
