故障排查與優化深刻專題(十):新服務器上架與Linux操做系統內核參數調優

一,導言

  • 剛剛畢業的學生小明,進入企業已經度過了試用期,這三個月期間工做很積極,愛好學習,動手能力也很強,由於在校期間小明已經有了很不錯的運維基礎,加上三個月的教導,企業感受他已經可以勝任初級運維的工做了,因而,一些線上環境的構建,業務系統的上線部署,升級都在逐漸交給他來完成。
  • 從一個新手到接觸線上應用環境,是須要技術和經驗積累的,本文要給同窗們分享的就是一個公司的服務器線上部署,基礎優化的一些操做實錄,固然也包含了小明的一些上線心得和體會,但願可以幫助同窗們快速瞭解和掌握線上系統的部署和優化技能。
 

二,系統基礎配置與調優

 

2.1 系統安裝和分區經驗

 

2.1.1 磁盤與raid

若是是自建服務器(非雲服務器),那麼在安裝系統前,磁盤是必需要作raid的,raid能夠保護系統數據安全,同時也能最大限度的提升磁盤的讀,寫性能。linux

那麼,什麼是raid呢?web

  • RAID(Redundant Array of Independent Disks)即獨立磁盤冗餘陣列,它是一種把多塊獨立的磁盤(物理硬盤)按不一樣的方式組合起來造成一個硬盤組(邏輯硬盤),從而提供比單個硬盤更高的存儲性能和提供數據備份技術。
  • RAID的基本思想是將多個容量較小,相對廉價的磁盤進行有機組合,從而以較低的成本得到與昂貴大容量磁盤至關的容量,性能,可靠性。
  • RAID中主要有三個關鍵概念和技術:鏡像(Mirroring),數據條帶(Data Strippiing)和數據校驗(Data parity)根據運用或組合運用這三種技術的策略和架構,能夠把RAID分爲不一樣的等級,以知足不一樣數據應用的需求。業界公認的標準是RAID0~RAID5.
  • 實際應用領域中使用最多的RAID等級是RAID0,RAID1,RAID5,RAID10

RAID每個等級表明一種實現方法和技術,等級之間並沒有高低之分。在實際應用中,應當根據用戶的數據應用特色,綜合考慮可用性,性能和成原本選擇合適的RAID等級,以及具體的實現方式。redis

那麼線上服務器環境RAID如何選型呢,這裏給一個參考給你們:shell

類型 讀寫性能 安全性 磁盤利用率 成本 應用方面
RAID0 最好(因並行性而提升) 最差(徹底無安全) 最高(100%) 最低 對安全性要求不是特別高,大文件寫存儲的系統
RAID1 讀和單個磁盤無分別,寫則要寫兩遍 最高(提供數據的百分之百備份) 差(50%) 較高 適用於存放重要數據,如服務器和數據庫存儲等領域
RAID5 讀:RAID5=RAID0(近似的數據讀取速度);寫:RAID 5 < 單個磁盤(多了一個奇偶校驗信息) RAID5 < RAID1 RAID5 > RAID1 中等 是一種存儲性能,數據安全和存儲成本兼顧的存儲解決方案
RAID10 讀:RAID10=RAID0;寫:RAID10=RAID1 RAID10=RAID1 RAID10=RAID1(50%較高) 較高 集合了RAID0,RAID1的優勢,可是空間上因爲使用鏡像,而不是相似RAID5的"奇偶校驗信息",磁盤利用率同樣是50%

所以,根據實際應用須要,咱們在部署線上服務器的時候,最好配置兩組raid,一組是系統盤raid,對系統盤(安裝操做系統的磁盤)推薦配置爲raid1,另外一組是數據盤raid,對數據盤(存放應用程序,各類數據)推薦採用raid1,raid5或者raid10數據庫

 

2.1.2 Linux系統版本選擇

線上服務器安裝操做系統推薦Centos發行版本,具體的版本推薦centos6.9或者centos7.5版本,這也是目前最經常使用的兩個版本,要說爲何這麼推薦,緣由很簡單,一些老的產品和系統基本都是運行在Centos6.x版本上,而將來的系統升級趨勢確定是centos7.x系列,因此選擇這兩個版本確定沒錯。centos

 

2.1.3 Linux分區和swap使用經驗

  • 在安裝操做系統的時候,對磁盤分區的配置也很是重要,正確的磁盤分區設置能夠最大限度的保證系統穩定運行,減小後期不少運維工做。那麼如何將分區設置爲最優呢,這裏有個原則:系統分區和數據分區分離。
  • 首先,在系統分區的建立上,建議劃分系統必須的一些分區,例如/、/boot、/var、/usr這四個最好獨立分區。同時這四個分區最好在一個物理raid1上,也就是在一組raid上單獨安裝操做系統。
  • 接着,還須要建立數據分區,數據分區主要用來存放程序數據、數據庫數據、web數據等等,這部分數據很是重要,不容丟失,數據分區能夠建立多個,也能夠建立一個,好比建立兩個數據分區,一個存儲web數據,一個存儲db數據,同時,這些數據分區最好也要在一個物理raid(raid一、raid5等)上。
  • 關於磁盤分區,默認安裝的話,會使用LVM(邏輯卷管理)進行分區管理,做爲線上生產環境,我實際上是強烈不推薦使用LVM的,由於LVM的動態擴容功能,對如今大硬盤時代來講,基本沒什麼用處了,通常能夠一次性規劃好硬盤的最大使用空間,相反,使用LVM帶來的負面影響更大,首先,它影響磁盤讀寫性能,其次,它不便於後期的運維,由於LVM的磁盤分區一旦故障,數據基本沒法恢復,基於這些緣由,不推薦使用LVM進行磁盤管理。
  • 最後,再說說swap,如今內存價格愈來愈便宜了,上百G內存的服務器也很常見了,那麼安裝操做系統的時候,swap還須要設置嗎,答案是須要,緣由有二:安全

    • 第一,交換分區主要是在內存不夠用的時候,將部份內存上的數據交換到swap空間上,以便讓系統不會因內存不夠用而致使oom或者更致命的狀況出現。若是你的物理內存不夠大,經過設置swap能夠在內存不夠用的時候不至於觸發oom-killer致使某些關鍵進程被殺掉,好比數據庫業務。
    • 第二,有些業務系統,好比redis,elasticsearch等主要使用物理內存的系統,咱們不但願讓它使用swap,由於大量使用swap會致使性能急劇降低,而若是不設置swap的話,若是使用內存量激增,那麼可能會出現oom-killer的狀況,致使應用宕機;而若是設置swap,此時能夠經過設置/proc/sys/vm/swappiness這個swap參數,調整使用swap的概率,此值越小,使用swap的概率就越低,這樣既能夠解決oom-killer的狀況,也能夠避免出現swap過分使用的狀況。

那麼問題來了,swap設置多少合適呢,一個原則是:物理內存在16GB如下的,swap設置爲物理內存的2倍便可,而物理內存大於16GB的話,通常推薦swap設置8GB左右便可。性能優化

 

2.1.4 系統軟件包安裝建議

  • linux系統安裝盤中默認自帶了不少開源軟件包,這些軟件包對線上服務器來講大部分是不須要的,因此,做爲服務器只須要安裝一個基礎內核加一些輔助的軟件以及網絡工具便可,因此安裝軟件包的策略是:僅安裝須要的,按需安裝,不用不裝。
  • 在Centos6.x下,僅安裝開發包,基本網絡包,基本應用包便可。在Centos7.x下,選擇「server with GUI」,「開發工具」便可。
 

2.2 ssh登錄系統策略

Linux服務器的遠程維護管理都是經過ssh服務完成的,默認使用22端口監聽,這些默認的配置已經成爲黑客掃描的經常使用方式,因此對ssh服務的配置須要作一些安全加固和優化。bash

ssh服務的配置文件爲/etc/ssh/sshd_config,經常使用的優化選項有以下幾個:服務器

 
  1. Port 22221
  2. SSH默認端口配置,修改默認22端口爲1萬以上端口號,避免被掃描和攻擊
  3. UseDNS no
  4. 不適用DNS反向解析,可提升ssh鏈接速度
  5. GSSAPIAuthentication no
  6. 關閉GSSAPI驗證,可提升ssh鏈接速度
  7. PermitRootLogin no
  8. 禁止root帳號ssh登錄
 

2.3 selinux策略設置

selinux是個雞肋,在線上服務器上部署應用的時候,推薦關閉selinux,關閉方法以下:

Selinux的狀態有以下幾個:

 
  1. enforcing 開啓狀態
  2. permissive 提醒的狀態
  3. disabled 關閉狀態

要查看當前selinux的狀態,可執行以下命令:

 
  1. [root@localhost ~]# sestatus
  2. SELinux status: disabled

要關閉selinux,有兩種方式,一種是臨時關閉,命令以下:

 
  1. [root@localhost ~]# setenforce 0

另外一種是永久關閉,修改/etc/selinux/config,將

 
  1. SELINUX=enforcing

修改成:

 
  1. SELINUX=disabled
 

2.4 更新yum源及必要軟件安裝

在操做系統安裝完成後,系統默認的軟件版本(gcc,glibc,glib,openssl等)都比較低,可能存在bug或者遺漏,所以,升級軟件的版本,很是重要,要快速升級軟件版本,可經過yum工具實現,在升級軟件以前,給系統添加幾個擴展yum源。

 
  1. epel源:https://fedoraproject.org/wiki/EPEL
  2. repoforge源:http://repoforge.org/use/

安裝上面兩個yum源的過程以下:

 
  1. [root@localhost ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.5.1804 (Core)
  3. [root@localhost ~]# uname -r
  4. 3.10.0-862.3.3.el7.x86_64
  5. [root@localhost ~]# yum -y install epel-release
  6. [root@localhost ~]# rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
  7. [root@localhost ~]# ls /etc/yum.repos.d/
  8. CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo mirrors-rpmforge rpmforge.repo
  9. CentOS-CR.repo CentOS-Media.repo epel.repo mirrors-rpmforge-extras
  10. CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo mirrors-rpmforge-testing
 

2.5 定時自動更新服務器時間

  • 線上服務器對時間的要求是很是嚴格的,爲了不服務器時間由於在長時間運行中所致使的時間誤差,進行時間同步(synchronize)的工做是很是必要的。Linux系統下,通常使用ntp服務來同步不一樣機器的時間。NTP是網絡時間協議(Network Time Protocol)的簡稱,幹嗎用的呢?就是經過網絡協議使計算機之間的時間同步。
  • 對服務器進行時間同步的方式有兩種,一種是本身搭建NTP服務器,而後跟互聯網上的時間服務器作校對,另外一種是經過在服務器上設置定時任務,按期去一個或多個時間服務器進行時間同步。
  • 若是你同步的服務器較多(超過100臺),建議在本身的網絡中搭建一臺NTP服務器,而後讓你網絡中的其它服務器都與這個NTP服務器進行同步,而這個ntp 服務器再去互聯網上跟其餘NTP server進行同步,經過多級同步,便可完成時間的一致性校驗。
  • 若是服務器較少的話,能夠直接在服務器上設置crontab定時任務便可,例如,能夠在本身服務器上設置以下計劃任務:
 
  1. 10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >> /var/log/ntp.log 2>&1; /sbin/hwclock -w
  • 這個計劃任務是每一個小時跟阿里雲時間服務器同步一次,同時將同步過程寫入到ntp.log文件中,最後將系統時鐘同步到硬件時鐘。
  • 網上可用的時間服務器有不少,推薦使用阿里雲的,或者centos自帶的例如0.centos.pool.ntp.org均可以使用。
 

2.6 重要文件加鎖

  • 系統運維人員有時候可能會遇到經過root用戶都不能修改或者刪除某個文件的狀況,產生這種狀況的大部分緣由多是這個文件被鎖定了。在Linux下鎖定文件的命令是chattr,經過這個命令能夠修改ext二、ext三、ext4文件系統下文件屬性,可是這個命令必須有超級用戶root來執行。和這個命令對應的命令是lsattr,這個命令用來查詢文件屬性

對一些重要的目錄和文件能夠加上「i」屬性,常見的文件和目錄有:

 
  1. chattr +i /etc/sudoers
  2. chattr +i /etc/shadow
  3. chattr +i /etc/passwd
  4. chattr +i /etc/grub.conf

其中,「+i」選項即immutable,用來設定文件不能被修改,刪除,重命名,設定連接等,同時不能寫入或新增內容。這個參數對於文件系統的安全設置有很大幫助。

對一些重要的日誌文件能夠加上"a"屬性,常見的有:

 
  1. chattr +a /var/log/messages
  2. chattr +a /var/log/wtmp

其中,「+i」選項即append,設定該參數後,只能向文件中添加數據,而不能刪除。經常使用於服務器日誌文件安全,只有root用戶才能設置這個屬性。

 

2.7 系統資源參數優化

經過命令"ulimit -a"能夠看到全部系統資源參數,這裏面須要重點設置的是"open files"和"max user processes",其餘能夠酌情設置。

要永遠設置資源參數,主要是經過下面兩個文件來實現:

 
  1. /etc/security/limits.conf
  2. /etc/security/limits.d/90-nproc.conf(centos6.x)
  3. /etc/security/limits.d/20-nproc.conf(centos7.x)

將下面內容添加到/etc/security/limits.conf中,而後退出shell,從新登錄便可生效

 
  1. * soft nproc 20480
  2. * hard nproc 20480
  3. * soft nofile 655360
  4. * hard nofile 655360
  5. * soft memlock unlimited
  6. * hard memlock unlimited

須要注意的時,centos6.x版本中,有個90-nproc.conf文件,centos7.x版本中,有個20-nproc.conf文件,裏面默認配置了最大用戶進程數,這個設置不必,直接刪除這兩個文件便可。

 

三,系統安全與防禦策略

 

3.1 設定tcp_wrappers防火牆

Tcp_Wrappers是一個用來分析TCP/IP封包的軟件,相似的IP封包軟件還有iptables。Linux默認都安裝了Tcp_Wrappers。做爲一個安全的系統,Linux自己有兩層安全防火牆,經過IP過濾機制的iptables實現第一層防禦。iptables防火牆經過直觀地監視系統的運行情況,阻擋網絡中的一些惡意程序,保護整個系統正常運行,免遭攻擊和破壞。若是經過了第一層防禦,那麼下一層防禦就是tcp_wrappers了。經過Tcp_Wrappers能夠實現對系統中提供的某些服務的開放與關閉、容許和禁止,從而更有效地保證系統安全運行。

要安裝Tcp_Wrappers,可執行以下命令:

 
  1. [root@localhost ~]# yum -y install tcp_wrappers

Tcp_Wrappers防火牆的實現是經過/etc/hosts.allow和/etc/hosts.deny兩個文件來完成的,首先看一下設定的格式:

 
  1. servicehosts [:action]
  2. 說明:
  3. service:表明服務名,例如sshdvsftpdsendmail
  4. hostss):主機名或者IP地址,能夠有不少個,例如192.168.12.0www.ixdba.net
  5. action:動做,符合條件後所採起的動做

配置文件中經常使用的關鍵字有:

 
  1. ALL:全部服務或者全部IP
  2. ALL EXCEPT:全部的服務或者全部IP除去指定的

例如:

 
  1. ALL:ALL EXCEPT 192.168.12.189
  2. 表示除了192.168.12.189這臺機器,任何機器執行全部服務時或被容許或被拒絕

瞭解了設定語法後,下面就能夠對服務進行訪問限定

在/etc/hosts.allow文件裏設定容許經過的規則以下

 
  1. sshd: 192.168.200.1
  2. sshd: 192.168.200.193
  3. sshd: www.yunjisuan.com

而後,設置不容許登錄的機器,也就是配置/etc/hosts.deny文件

 
  1. sshd:ALL

這兩個文件/etc/hosts.allow文件優先級最高,若是不符合這裏設定的規則,就會去/etc/hosts.deny文件裏找
這樣,一個簡單的tcp_wrappers防火牆就設置完畢了。

 

3.2 合理使用Shell歷史命令記錄功能

  • 在Linux下可經過history命令查看用戶全部的歷史操做記錄,同時shell命令操做記錄默認保存在用戶目錄下的.bash_history文件中,經過這個文件能夠查詢shell命令的執行歷史,有助於運維人員進行系統審計和問題排查,同時,在服務器遭受攻擊後,也能夠經過這個命令或文件查詢黑客登陸服務器所執行的歷史命令操做,可是有時候黑客在攻擊服務器後爲了毀滅痕跡,可能會刪除.bash_history文件,這就須要合理的保護或備份.bash_history文件。下面介紹下history日誌文件的安全配置方法。
  • 爲了確保服務器的安全,保留shell命令的執行歷史是很是有用的一條技巧。shell雖然有歷史功能,可是這個功能並不是針對審計目的而設計,所以很容易被攻擊者篡改或是丟失。下面再介紹一種方法,能夠實現詳細記錄登陸過系統的用戶、IP地址、shell命令以及詳細操做時間等,並將這些信息以文件的形式保存在一個安全的地方,以供系統審計和故障排查。

將下面這段代碼添加到/etc/profile文件中,便可實現上述功能。

 
  1. #history
  2. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
  3. HISTDIR=/usr/share/.history
  4. if [ -z $USER_IP ];then
  5. USER_IP=`hostname`
  6. fi
  7. if [ ! -d $HISTDIR ];then
  8. mkdir -p $HISTDIR
  9. chmod 777 $HISTDIR
  10. fi
  11. if [ ! -d $HISTDIR/${LOGNAME} ];then
  12. mkdir -p $HISTDIR/${LOGNAME}
  13. chmod 300 $HISTDIR/${LOGNAME}
  14. fi
  15. export HISTSIZE=4000
  16. DT=`date +%Y%m%d_%H%M%S`
  17. export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT"
  18. export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
  19. chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

這段代碼將每一個用戶的shell命令執行歷史以文件的形式保存在/usr/share/.history目錄中,每一個用戶一個文件夾,而且文件夾下的每一個文件以IP地址加shell命令操做時間的格式命名。下面是root用戶執行shell命令的歷史記錄文件,基本效果以下:

 
  1. [root@localhost root]# pwd
  2. /usr/share/.history/root
  3. [root@localhost root]# ll
  4. total 24
  5. -rw------- 1 root root 134 Nov 2 17:21 172.16.213.132.history.20181102_172121
  6. -rw------- 1 root root 793 Nov 2 17:44 172.16.213.132.history.20181102_174256

保存歷史命令的文件夾目錄要儘可能隱蔽,避免被黑客發現後刪除

 

3.3 Linux軟件防火牆iptables

 

3.3.1 iptables的概念

  • iptables是linux系統內嵌的一個防火牆軟件(封包過濾式防火牆),它集成在系統內核中,所以執行效率很是的高,iptables經過設置一些封包過濾規則,來定義什麼數據能夠接收,什麼數據須要剔除,所以,用戶經過iptables能夠對進出計算機的數據包進行IP過濾,以達到保護主機的目的。
  • iptables是有最基本的多個表格(tables)組成的,並且每一個表格的用途都不同,在每一個表格中,又定義了多個鏈(chain),經過這些鏈能夠設置相應的規則和策略。
 

3.3.2 filter表

iptables有三種經常使用的表選項,包括管理本機數據進出的filter,管理防火牆內部主機nat和改變不一樣包

filter表通常用於的信息包過濾,內置了INPUT,OUTPUT和FORWARD鏈

 
  1. INPUT鏈:主要是對外部數據包進入Linux系統進行信息過濾
  2. OUTPUT鏈:主要是對內部linux系統說要發送的數據包進行信息過濾
  3. FORWARD鏈:將外面過來的數據包傳遞到內部計算機中
 

3.3.3 NAT表

  • NAT表主要用處是網絡地址轉換,即Network Address Translation,縮寫爲NAT,它包含PREROUTING、POSTROUTING和OUTPUT鏈。
  • PREROUTING鏈:是在數據包剛剛到達防火牆時,根據須要改變它的目的地址。例如DNAT操做,就是經過一個合法的公網IP地址,經過對防火牆的訪問,重定向到防火牆內的其它計算機(DMZ區域),也就是說經過防火牆改變了訪問的目的地址,以使數據包能重定向到指定的主機
  • POSTROUTING鏈:在包就要離開防火牆以前改變其源地址,例如SNAT操做,屏蔽了本地局域網主機的信息,本地主機經過防火牆鏈接到internet,這樣在internet上看到的本地主機的來源地址都是同一個IP,屏蔽了來源主機地址信息
  • OUTPUT鏈:改變了本地產生包的目的地址
 

3.3.4 線上服務器iptables推薦配置

下面是一個常規的線上Linux服務器iptables配置規則:

 
  1. iptables -P INPUT ACCEPT
  2. iptables -F
  3. iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  4. iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
  5. iptables -A INPUT -s 1.1.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
  6. iptables -A INPUT -s 2.2.2.2 -p tcp -m tcp --dport 22 -j ACCEPT
  7. iptables -A INPUT -i eth1 -j ACCEPT
  8. iptables -A INPUT -i lo -j ACCEPT
  9. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  10. iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
  11. iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
  12. iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
  13. iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
  14. iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
  15. iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
  16. iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
  17. iptables -P INPUT DROP
  18. iptables -P OUTPUT ACCEPT
  19. iptables -P FORWARD DROP
  • 這個配置規則很簡單,主要是爲了限制進來的請求,因此僅僅配置了INPUT鏈,剛開始是先打開INPUT鏈,而後清除全部規則,接着,對全網開啓服務器上80、443端口(由於是網站服務器,因此必須對全網開啓80和443),而後,針對兩個客戶端IP開啓遠程鏈接22端口的權限,這個主要是用於遠程對服務器的維護。接着,對網絡接口eth1(內網網卡)、lo(迴環地址)開啓所有容許進入訪問。
  • 接着下面是對tcp鏈接狀態的設置,當鏈接狀態知足「RELATED,ESTABLISHED「時,開啓鏈接請求,當有非法鏈接狀態時(經過tcp-flags標記),直接DROP請求。
  • 最後,將INPUT鏈、FORWARD鏈所有關閉,僅開放OUTPUT鏈。
 

四,系統內核參數調優

在對系統性能優化中,Linux內核參數優化是一個很是重要的手段,內核參數配置得當能夠大大提升系統的性能,也能夠根據特定場景進行專門的優化,如TIME_WAIT太高,DDOS攻擊等等。

Linux內核參數調整有兩種方式,分別介紹以下:

 

4.1 內核參數臨時生效方式

這種方式是經過修改/proc下內核參數文件內容,但不能使用編輯器來修改內核參數文件,緣由是因爲內核隨時可能更改這些文件中的任意一個,另外,這些內核參數文件都是虛擬文件,實際中不存在,所以不能使用編輯器進行編輯,而是使用echo命令,而後從命令行將輸出重定向至/proc下所選定的文件中。

例如:將ip_forward參數設置爲1,能夠這樣操做

 
  1. [root@localhost root]# echo 1 > /proc/sys/net/ipv4/ip_forward

此種方式修改後,當即生效,可是重啓系統後,該參數又恢復成默認值。所以,要想永久更改內核參數,須要將設置添加到/etc/sysctl.conf文件中。

 

4.2 內核參數永久生效設置

要將設置好的內核參數永久生效,須要修改/etc/sysctl.conf文件。首先檢查sysctl.conf文件,若是已經包含須要修改的參數,則修改該參數的值,若是沒有須要修改的參數,在sysctl.conf文件中添加該參數便可。例如添加以下內容:

 
  1. net.ipv4.ip_forward=1

保存退出後,能夠重啓機器使參數生效,若是想使參數立刻生效,也能夠執行以下命令:

 
  1. [root@localhost root]# sysctl -p

線上環境建議採用這種方式,也就是將全部要設置的內核參數加入到/etc/sysctl.conf文件中

 

4.3 線上Web類型服務器內核參數配置參考(可支撐天天1億的請求量,硬件爲16核32GB內存)

 
  1. net.ipv4.conf.lo.arp_ignore = 1
  2. net.ipv4.conf.lo.arp_announce = 2
  3. net.ipv4.conf.all.arp_ignore = 1
  4. net.ipv4.conf.all.arp_announce = 2
  • arp_ignore:定義對目標地址爲本地IP的ARP詢問不一樣的應答模式
    • 0:響應任意網卡上接收到的對本機IP地址的arp請求(包括lo),而無論該目的IP是否在接收網卡上
    • 1:只響應目的IP地址爲接收網卡上的本地地址的arp請求
    • 2:只響應目的IP地址爲接收網卡上的本地地址的arp請求,而且arp請求的源IP必須和接收網卡同網段
    • 8不迴應全部的arp請求
  • arp_announce:對網絡接口上本地IP地址發出的ARP報文做出相應級別的限制。
    • 0:本機全部IP地址都向任何一個接口通告ARP報文
    • 1:儘可能僅向該網卡迴應與該網段匹配的ARP報文
    • 2:只向該網卡迴應與該網段匹配的ARP報文
 
  1. net.ipv4.tcp_tw_reuse = 1
  2. net.ipv4.tcp_tw_recycle = 1
  3. net.ipv4.tcp_fin_timeout = 10
  • tcp_tw_reuse:容許將處於TIME-WAIT的socket監聽進程從新用於新的TCP鏈接
    • 0:默認是0,表示關閉
    • 1:開啓重用,只對客戶端的TCP鏈接起做用,開啓後,客戶端的sockets在1S內回收
  • tcp_tw_recycle:容許處於TIME-WAIT的socket監聽進程被快速回收
    • 0:默認是0,表示關閉
    • 1:開啓快速回收,對客戶端和服務器同時起做用。
  • tcp_fin_timeout:若是socket由客戶端發起要求關閉,參數決定了它保持FIN-WAIT-2狀態的時間
    • 60:默認60秒,經過咱們能夠優化爲10--30之間

特別提示:內網情況比tw_reuse稍快,公網大多慢於tw_reuse

 
  1. net.ipv4.tcp_max_syn_backlog = 20000
  2. net.core.netdev_max_backlog = 32768
  3. net.core.somaxconn = 32768
  4. net.core.wmem_default = 8388608
  5. net.core.rmem_default = 8388608
  6. net.core.rmem_max = 16777216
  7. net.core.wmem_max = 16777216
  8. net.ipv4.tcp_timestamps = 0
  9. net.ipv4.tcp_synack_retries = 2
  10. net.ipv4.tcp_syn_retries = 2
  11. net.ipv4.tcp_syncookies = 1
  12. net.ipv4.tcp_mem = 94500000 915000000 927000000
  13. net.ipv4.tcp_max_orphans = 3276800
  14. net.ipv4.tcp_keepalive_time = 120
  15. net.ipv4.ip_local_port_range = 1024 65535
  16. net.ipv4.tcp_max_tw_buckets = 80000
  17. net.ipv4.tcp_keepalive_time = 120
  18. net.ipv4.tcp_keepalive_intvl = 15
  19. net.ipv4.tcp_keepalive_probes = 5
  20. net.ipv4.ip_local_port_range = 1024 65535
  21. net.ipv4.tcp_max_tw_buckets = 500000
  22. net.ipv4.tcp_keepalive_time = 60
  23. net.ipv4.tcp_keepalive_intvl = 15
  24. net.ipv4.tcp_keepalive_probes = 5
  25. net.nf_conntrack_max = 2097152

這個內核參數優化例子,能夠做爲一個web系統的優化標準,但並不保證適應任何環境,對每一個配置項的含義,這裏不作詳細介紹,你們能夠參考相關資料。

相關文章
相關標籤/搜索