1. 程式人生 > >sysctl.conf文件詳解

sysctl.conf文件詳解

sysctl

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

sysctl 命令格式:

sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
sysctl [-n] [-e] -a
常用參數的意義:
-w   臨時改變某個指定參數的值
-a   顯示所有的系統參數
-p   從指定的文件加載系統參數,如不指定即從/etc/sysctl.conf中加載

如果僅僅是想臨時改變某個系統參數的值,可以用兩種方法來實現,例如想啟用IP路由轉發功能:

1) #echo 1 > /proc/sys/net/ipv4/ip_forward
2) #sysctl -w net.ipv4.ip_forward=1

以上兩種方法都可能立即開啟路由功能,但如果系統重啟,或重啟網卡命令,所設置的值即會丟失

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

fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 8192
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

解釋一下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:這個參數表示內核套接字發送緩存區默認的最大大小。


以下內容轉自: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@qiangsh ~]# 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


本文出自 “奔跑在路上” 博客,請務必保留此出處http://qiangsh.blog.51cto.com/3510397/1980680

sysctl.conf文件詳解