十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
作為高性能WEB服務(wù)器,只調(diào)整Nginx本身的參數(shù)是不行的,因?yàn)镹ginx服務(wù)依賴于高性能的操作系統(tǒng)。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的安國(guó)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
以下為常見的幾個(gè)Linux內(nèi)核參數(shù)優(yōu)化方法。
net.ipv4.tcp_max_tw_buckets
對(duì)于tcp連接,服務(wù)端和客戶端通信完后狀態(tài)變?yōu)閠imewait,假如某臺(tái)服務(wù)器非常忙,連接數(shù)特別多的話,那么這個(gè)timewait數(shù)量就會(huì)越來越大。
畢竟它也是會(huì)占用一定的資源,所以應(yīng)該有一個(gè)最大值,當(dāng)超過這個(gè)值,系統(tǒng)就會(huì)刪除最早的連接,這樣始終保持在一個(gè)數(shù)量級(jí)。
這個(gè)數(shù)值就是由net.ipv4.tcp_max_tw_buckets這個(gè)參數(shù)來決定的。
CentOS7系統(tǒng),你可以使用sysctl -a |grep tw_buckets來查看它的值,默認(rèn)為32768,
你可以適當(dāng)把它調(diào)低,比如調(diào)整到8000,畢竟這個(gè)狀態(tài)的連接太多也是會(huì)消耗資源的。
但你不要把它調(diào)到幾十、幾百這樣,因?yàn)檫@種狀態(tài)的tcp連接也是有用的,
如果同樣的客戶端再次和服務(wù)端通信,就不用再次建立新的連接了,用這個(gè)舊的通道,省時(shí)省力。
net.ipv4.tcp_tw_recycle = 1
該參數(shù)的作用是快速回收timewait狀態(tài)的連接。上面雖然提到系統(tǒng)會(huì)自動(dòng)刪除掉timewait狀態(tài)的連接,但如果把這樣的連接重新利用起來豈不是更好。
所以該參數(shù)設(shè)置為1就可以讓timewait狀態(tài)的連接快速回收,它需要和下面的參數(shù)配合一起使用。
net.ipv4.tcp_tw_reuse = 1
該參數(shù)設(shè)置為1,將timewait狀態(tài)的連接重新用于新的TCP連接,要結(jié)合上面的參數(shù)一起使用。
net.ipv4.tcp_syncookies = 1
tcp三次握手中,客戶端向服務(wù)端發(fā)起syn請(qǐng)求,服務(wù)端收到后,也會(huì)向客戶端發(fā)起syn請(qǐng)求同時(shí)連帶ack確認(rèn),
假如客戶端發(fā)送請(qǐng)求后直接斷開和服務(wù)端的連接,不接收服務(wù)端發(fā)起的這個(gè)請(qǐng)求,服務(wù)端會(huì)重試多次,
這個(gè)重試的過程會(huì)持續(xù)一段時(shí)間(通常高于30s),當(dāng)這種狀態(tài)的連接數(shù)量非常大時(shí),服務(wù)器會(huì)消耗很大的資源,從而造成癱瘓,
正常的連接進(jìn)不來,這種惡意的半連接行為其實(shí)叫做syn flood攻擊。
設(shè)置為1,是開啟SYN Cookies,開啟后可以避免發(fā)生上述的syn flood攻擊。
開啟該參數(shù)后,服務(wù)端接收客戶端的ack后,再向客戶端發(fā)送ack+syn之前會(huì)要求client在短時(shí)間內(nèi)回應(yīng)一個(gè)序號(hào),
如果客戶端不能提供序號(hào)或者提供的序號(hào)不對(duì)則認(rèn)為該客戶端不合法,于是不會(huì)發(fā)ack+syn給客戶端,更涉及不到重試。
net.ipv4.tcp_max_syn_backlog
該參數(shù)定義系統(tǒng)能接受的最大半連接狀態(tài)的tcp連接數(shù)??蛻舳讼蚍?wù)端發(fā)送了syn包,服務(wù)端收到后,會(huì)記錄一下,
該參數(shù)決定最多能記錄幾個(gè)這樣的連接。在CentOS7,默認(rèn)是256,當(dāng)有syn flood攻擊時(shí),這個(gè)數(shù)值太小則很容易導(dǎo)致服務(wù)器癱瘓,
實(shí)際上此時(shí)服務(wù)器并沒有消耗太多資源(cpu、內(nèi)存等),所以可以適當(dāng)調(diào)大它,比如調(diào)整到30000。
net.ipv4.tcp_syn_retries
該參數(shù)適用于客戶端,它定義發(fā)起syn的最大重試次數(shù),默認(rèn)為6,建議改為2。
net.ipv4.tcp_synack_retries
該參數(shù)適用于服務(wù)端,它定義發(fā)起syn+ack的最大重試次數(shù),默認(rèn)為5,建議改為2,可以適當(dāng)預(yù)防syn flood攻擊。
net.ipv4.ip_local_port_range
該參數(shù)定義端口范圍,系統(tǒng)默認(rèn)保留端口為1024及以下,以上部分為自定義端口。這個(gè)參數(shù)適用于客戶端,
當(dāng)客戶端和服務(wù)端建立連接時(shí),比如說訪問服務(wù)端的80端口,客戶端隨機(jī)開啟了一個(gè)端口和服務(wù)端發(fā)起連接,
這個(gè)參數(shù)定義隨機(jī)端口的范圍。默認(rèn)為32768 61000,建議調(diào)整為1025 61000。
net.ipv4.tcp_fin_timeout
tcp連接的狀態(tài)中,客戶端上有一個(gè)是FIN-WAIT-2狀態(tài),它是狀態(tài)變遷為timewait前一個(gè)狀態(tài)。
該參數(shù)定義不屬于任何進(jìn)程的該連接狀態(tài)的超時(shí)時(shí)間,默認(rèn)值為60,建議調(diào)整為6。
net.ipv4.tcp_keepalive_time
tcp連接狀態(tài)里,有一個(gè)是established狀態(tài),只有在這個(gè)狀態(tài)下,客戶端和服務(wù)端才能通信。正常情況下,當(dāng)通信完畢,
客戶端或服務(wù)端會(huì)告訴對(duì)方要關(guān)閉連接,此時(shí)狀態(tài)就會(huì)變?yōu)閠imewait,如果客戶端沒有告訴服務(wù)端,
并且服務(wù)端也沒有告訴客戶端關(guān)閉的話(例如,客戶端那邊斷網(wǎng)了),此時(shí)需要該參數(shù)來判定。
比如客戶端已經(jīng)斷網(wǎng)了,但服務(wù)端上本次連接的狀態(tài)依然是established,服務(wù)端為了確認(rèn)客戶端是否斷網(wǎng),
就需要每隔一段時(shí)間去發(fā)一個(gè)探測(cè)包去確認(rèn)一下看看對(duì)方是否在線。這個(gè)時(shí)間就由該參數(shù)決定。它的默認(rèn)值為7200秒,建議設(shè)置為30秒。
net.ipv4.tcp_keepalive_intvl
該參數(shù)和上面的參數(shù)是一起的,服務(wù)端在規(guī)定時(shí)間內(nèi)發(fā)起了探測(cè),查看客戶端是否在線,如果客戶端并沒有確認(rèn),
此時(shí)服務(wù)端還不能認(rèn)定為對(duì)方不在線,而是要嘗試多次。該參數(shù)定義重新發(fā)送探測(cè)的時(shí)間,即第一次發(fā)現(xiàn)對(duì)方有問題后,過多久再次發(fā)起探測(cè)。
默認(rèn)值為75秒,可以改為3秒。
net.ipv4.tcp_keepalive_probes
第10和第11個(gè)參數(shù)規(guī)定了何時(shí)發(fā)起探測(cè)和探測(cè)失敗后再過多久再發(fā)起探測(cè),但并沒有定義一共探測(cè)幾次才算結(jié)束。
該參數(shù)定義發(fā)起探測(cè)的包的數(shù)量。默認(rèn)為9,建議設(shè)置2。
設(shè)置和范例
在Linux下調(diào)整內(nèi)核參數(shù),可以直接編輯配置文件/etc/sysctl.conf,然后執(zhí)行sysctl -p命令生效。
setup--服務(wù)--關(guān)閉無關(guān)服務(wù)。
你可以選擇關(guān)閉你不認(rèn)識(shí)的服務(wù),linux不像windows,關(guān)閉了所有你不認(rèn)識(shí)的,依然可以正常運(yùn)行。
bash命令行瀏覽編輯支持許快捷鍵快捷鍵Ctrl-A光標(biāo)移命令行始處快捷鍵Ctrl-E光標(biāo)移命令行末尾快捷鍵Ctrl-W直接刪除光標(biāo)前字快捷鍵Ctrl-K直接刪除光標(biāo)前所字符用Ctrl-Y撤銷刪除
ALT快捷鍵在WIN下Xshell不可用
ctrl + a 光標(biāo)切換到命令行行首
ctrl + e 光標(biāo)切換到命令行末尾
ctrl + l 清屏 等同于 clear
ctrl + u 清除剪切光標(biāo)之前的內(nèi)容
ctrl + k 清楚剪切光標(biāo)之后的內(nèi)容
ctrl + w 清除剪切光標(biāo)之前的一個(gè)word
alt + d 清除剪切光標(biāo)之后的一個(gè)word
ctrl + y 粘貼剛才刪除字符
ctrl + h 向行首刪除一個(gè)字符
ctrl + d 向行尾刪除一個(gè)字符,空行時(shí)等于 exit 和 logout
ctrl + _ 恢復(fù)剛操作的命令 xshell無法使用
ctrl + b 光標(biāo)向行首移動(dòng)一個(gè)字符 ( backwards )
ctrl + f 光標(biāo)向行尾移動(dòng)一個(gè)字符( forwards )
ctrl + ← 光標(biāo)向行首移動(dòng)一個(gè)word
ctrl + → 光標(biāo)向行尾移動(dòng)一個(gè)word
ctrl + r 歷史命令中查找 (關(guān)鍵字可用)
ctrl + z 轉(zhuǎn)入后臺(tái)運(yùn)行
history 10 顯示最近使用過的10個(gè)命令
!! 執(zhí)行前一個(gè)命令
! + 字符 執(zhí)行前一個(gè)以“字符”開頭的命令
! + Num 執(zhí)行對(duì)應(yīng)行號(hào)的命令
! + ? abc 執(zhí)行前一個(gè)包含abc的命令
! -n 執(zhí)行n個(gè)命令之前的那個(gè)命令
!* 調(diào)用上一條命令的所有參數(shù)
!$ 調(diào)用上一條命令的最后一個(gè)參數(shù)
!-: 調(diào)用上一條命令除了最后一個(gè)參數(shù)的部分
ALT + num + . 調(diào)用上一條命令中任意一個(gè)部分
!!:gs/$1/$2 替換上一條命令中所有$1為$2
!!:gs^$1^$2 替換上一條命令中第一個(gè)$1為$2
用 'top -i' 看看有多少進(jìn)程處于 Running 狀態(tài),可能系統(tǒng)存在內(nèi)存或 I/O 瓶頸,用 free 看看系統(tǒng)內(nèi)存使用情況,swap 是否被占用很多,用 iostat 看看 I/O 負(fù)載情況...
還有一種辦法是 ps -ef | sort -k7 ,將進(jìn)程按運(yùn)行時(shí)間排序,看哪個(gè)進(jìn)程消耗的cpu時(shí)間最多。
top:
主要參數(shù) :
free
1.作用
free命令用來顯示內(nèi)存的使用情況,使用權(quán)限是所有用戶。
**2.格式 **
**3.主要參數(shù) **
uptime
vmstat
**1 觀察磁盤活動(dòng)情況 **
磁盤活動(dòng)情況主要從以下幾個(gè)指標(biāo)了解:
**2 觀察cpu活動(dòng)情況 **
vmstat比top更能反映出cpu的使用情況:
iostat
用于統(tǒng)計(jì)CPU的使用情況及tty設(shè)備、硬盤和CD-ROM的I/0量
即使爬到最高的山上,一次也只能腳踏實(shí)地地邁一步。
Linux查看CPU和內(nèi)存使用情況:
在做Linux系統(tǒng)優(yōu)化的時(shí)候,物理內(nèi)存是其中最重要的一方面。自然的,Linux也提供了非常多的方法來監(jiān)控寶貴的內(nèi)存資源的使用情況。下面的清單詳細(xì)的列出了Linux系統(tǒng)下通過視圖工具或命令行來查看內(nèi)存使用情況的各種方法。
1. /proc/meminfo
查看RAM使用情況最簡(jiǎn)單的方法是通過 /proc/meminfo 。這個(gè)動(dòng)態(tài)更新的虛擬文件實(shí)際上是許多其他內(nèi)存相關(guān)工具(如:free / ps / top)等的組合顯示。 /proc/meminfo 列出了所有你想了解的內(nèi)存的使用情況。進(jìn)程的內(nèi)存使用信息也可以通過/proc/pid/statm 和 /proc/pid/status 來查看。
atop命令是一個(gè)終端環(huán)境的監(jiān)控命令。它顯示的是各種系統(tǒng)資源(CPU, memory, network, I/O, kernel)的綜合,并且在高負(fù)載的情況下進(jìn)行了彩色標(biāo)注。
free命令是一個(gè)快速查看內(nèi)存使用情況的方法,它是對(duì) /proc/meminfo 收集到的信息的一個(gè)概述。
GNOME System Monitor 是一個(gè)顯示最近一段時(shí)間內(nèi)的CPU、內(nèi)存、交換區(qū)及網(wǎng)絡(luò)的使用情況的視圖工具。它還提供了一種查看CPU及內(nèi)存使用情況的方法。
htop命令顯示了每個(gè)進(jìn)程的內(nèi)存實(shí)時(shí)使用率。它提供了所有進(jìn)程的常駐內(nèi)存大小、程序總內(nèi)存大小、共享庫(kù)大小等的報(bào)告。列表可以水平及垂直滾動(dòng)。
功能同 4 中介紹的GENOME版本。
memstat是一個(gè)有效識(shí)別executable(s), process(es) and shared libraries使用虛擬內(nèi)存情況的命令。給定一個(gè)進(jìn)程ID,memstat可以列出這個(gè)進(jìn)程相關(guān)的可執(zhí)行文件、數(shù)據(jù)和共享庫(kù)。
nmon是一個(gè)基于ncurses的系統(tǒng)基準(zhǔn)測(cè)試工具,它可以監(jiān)控CPU、內(nèi)存、I/O、文件系統(tǒng)及網(wǎng)絡(luò)資源等的互動(dòng)模式。對(duì)于內(nèi)存的使用,它可以實(shí)時(shí)的顯示 總/剩余內(nèi)存、交換空間等信息。
ps命令可以實(shí)時(shí)的顯示各個(gè)進(jìn)程的內(nèi)存使用情況。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)。你可以使用 “–sort”選項(xiàng)對(duì)進(jìn)程進(jìn)行排序,例如按RSS進(jìn)行排序:
smem命令允許你統(tǒng)計(jì)基于/proc信息的不同進(jìn)程和用戶的內(nèi)存使用情況。內(nèi)存使用情況的分析可以導(dǎo)出圖表(如條形圖和餅圖)。
top命令提供了實(shí)時(shí)的運(yùn)行中的程序的資源使用統(tǒng)計(jì)。你可以根據(jù)內(nèi)存的使用和大小來進(jìn)行排序。
vmstat命令顯示實(shí)時(shí)的和平均的統(tǒng)計(jì),覆蓋CPU、內(nèi)存、I/O等內(nèi)容。例如內(nèi)存情況,不僅顯示物理內(nèi)存,也統(tǒng)計(jì)虛擬內(nèi)存。