sysctl.conf文件詳解


本文轉自:http://www.cnblogs.com/Rosanna/p/3446557.html

使文件立刻生效命令:/sbin/sysctl -p

/proc/sys目錄下存放着大多數內核參數,並且可以在系統運行時進行更改,不過重新啟動機器就會失效。/etc/sysctl.conf是一個允許改變正在運行中的Linux系統的接口,它包含一些TCP/IP堆棧和虛擬內存系統的高級選項,修改內核參數永久生效。也就是說/proc/sys下內核文件與配置文件sysctl.conf中變量存在着對應關系。

      直接通過修改sysctl.conf文件來修改Linux內核參數,下面是我的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fs. file - max  =  999999
net.ipv4.tcp_tw_reuse  =  1
net.ipv4.tcp_keepalive_time  =  600
net.ipv4.tcp_fin_timeout  =  30
net.ipv4.tcp_max_tw_buckets  =  5000
net.ipv4.ip_local_port_range  = 1024     61000
net.ipv4.tcp_rmem  = 4096  32768  262142
net.ipv4.tcp_wmem  = 4096  32768  262142
net.core.netdev_max_backlog  =  8096
net.core.rmem_default  =  262144
net.core.wmem_default  =  262144
net.core.rmem_max  =  2097152
net.core.rmem_max  =  2097152
net.ipv4.tcp_syncookies  =  1
net.ipv4.tcp_max_syn_backlog  =  1024

       解釋一下sysctl.conf文件中參數的意義:

  • file-max:這個參數表示進程可以同時打開的最大句柄數,這個參數直接限制最大並發連接數。
  • tcp_tw_reuse:這個參數設置為1,表示允許將TIME-WAIT狀態的socket重新用於新的TCP鏈接。這個對服務器來說很有意義,因為服務器上總會有大量TIME-WAIT狀態的連接。
  • tcp_keepalive_time:這個參數表示當keepalive啟用時,TCP發送keepalive消息的頻度。默認是7200 seconds,意思是如果某個TCP連接在idle 2小時后,內核才發起probe。若將其設置得小一點,可以更快地清理無效的連接。
  • tcp_fin_timeout:這個參數表示當服務器主動關閉連接時,socket保持在FIN-WAIT-2狀態的最大時間。
  • tcp_max_tw_buckets:這個參數表示操作系統允許TIME_WAIT套接字數量的最大值,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認是i180000,過多TIME_WAIT套接字會使Web服務器變慢。
  • tcp_max_syn_backlog:這個參數表示TCP三次握手建立階段接受WYN請求隊列的最大長度,默認1024,將其設置大一些可以使出現Nginx繁忙來不及accept新連接的情況時,Linux不至於丟失客戶端發起的連接請求。
  • ip_local_port_range:這個參數定義了在UDP和TCP連接中本地端口的取值范圍。
  • net.ipv4.tcp_rmem:這個參數定義了TCP接受緩存(用於TCP接收滑動窗口)的最小值,默認值,最大值。
  • net.ipv4.tcp_wmem:這個參數定義了TCP發送緩存(用於TCP發送滑動窗口)的最小值,默認值,最大值。
  • netdev_max_backlog:當網卡接收數據包的速度大於內核處理的速度時,會有一個隊列保存這些數據包。這個參數表示該隊列的最大值。
  • rmem_default:這個參數表示內核套接字接收緩存區默認的大小。
  • wmem_default:這個參數表示內核套接字發送緩存區默認的大小。
  • rmem_max:這個參數表示內核套接字接收緩存區默認的最大大小。
  • wmem_max:這個參數表示內核套接字發送緩存區默認的最大大小。

 

參考:

1.《深入理解Nginx模塊開發與架構分析》

2. 51開源社區

 

以下內容轉自:http://blog.163.com/ly_89/blog/static/18690229920122193249302/

1、減少處於FIN-WAIT-2連接狀態的時間,使系統可以處理更多的連接。
net.ipv4.tcp_fin_timeout = 2
# 如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
# 對端可以出錯並永遠不關閉連接,甚至意外當機,缺省值是60秒。
# 2.2 內核的通常值是180秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB服務器,也有因為大量的死套接字而內存溢出的風險,FIN-WAIT-2的危險性比FIN-WAIT-1要小,因為它最多只能吃掉1.5K內存,但是它們的生存期長些。

2、以下兩參數可解決生產場景中大量連接的Web(cache)服務器中TIME_WAIT過多問題。
net.ipv4.tcp_tw_reuse = 1
# 表示開啟重用。允許將TIME-WAIT sockets重新用於新的 TCP 連接,默認為 0 表示關閉。

3、打開TIME-WAIT套接字重用及回收功能。
net.ipv4.tcp_tw_recycle = 1
# 表示開啟TCP連接中TIME-WAIT sockets的快速收回功能,默認為 0 ,表示關閉。

4、當keepalive起用的時候,TCP發送keepalive消息的頻度,缺省是2小時,改為20分鍾。
net.ipv4.tcp_keepalive_time = 600

5、允許系統打開的端口范圍
net.ipv4.ip_local_port_range = 4000    65000
# 表示用於向外連接的端口范圍。缺省情況下很小:32768到61000,改為4000到65000。

6、提高系統支持的最大SYN半連接數(默認1024)
net.ipv4.tcp_max_syn_backlog = 16384
# 表示SYN隊列的長度,默認為1024,加大隊列長度為16384,可以容納最多等待連接的網絡連接數。
[root@centos5 ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog 
1024

7、系統同時保持TIME_WAIT套接字的最大數量
net.ipv4.tcp_max_tw_buckets = 360000
# 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認為180000,改為 5000。
# 對於Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

8、路由緩存刷新頻率,當一個路由失敗后多長時間跳到另一個路由,默認是300。
net.ipv4.route.gc_timeout = 100

9、在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.tcp_syn_retries = 1

10、減少系統SYN連接重試次數(默認是5)
net.ipv4.tcp_synack_retries = 1
# 為了打開對端的連接,內核需要發送一個SYN並附帶一個回應前面一個SYN的ACK。
# 也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。

11、設置系統對最大跟蹤的TCP連接數的限制(CentOS 5.6無此參數)
net.ipv4.ip_conntrack_max = 25000000

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM