/etc/sysctl.conf參數解釋

來自《深入理解Nginx模塊開發與架構解析》 P9

#表示進程(例如一個worker進程)可能同時打開的最大句柄數,直接限制最大併發連接數
fs.file max = 999999

#1代表允許將狀態爲TIME-WAIT狀態的socket連接重新用於新的連接。對於服務器來說有意義,因爲有大量的TIME-WAIT狀態的連接
net.ipv4.tcp_tw_reuse = 1

#當keepalive啓用時,TCP發送keepalive消息的頻率。默認是2個小時。將其調小一些,可以更快的清除無用的連接
net.ipv4.tcp_keepalive_time = 600

#當服務器主動關閉鏈接時,socket保持FN-WAIT-2狀態的最大時間
net.ipv4.tcp_fin_timeout = 30

#允許TIME-WAIT套接字數量的最大值。超過些數字,TIME-WAIT套接字將立刻被清除同時打印警告信息。默認是180000,過多的TIME-WAIT套接字會使webserver變慢
net.ipv4.tcp_max_tw_buckets = 5000

#UDP和TCP連接中本地端口(不包括連接的遠端)的取值範圍
net.ipv4.ip_local_port_range = 1024  61000

#TCP接收/發送緩存的最小值、默認值、最大值
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.wmem_max = 2097152

#解決TCP的SYN***。與性能無關
net.ipv4.tcp_syncookies = 1

#三次握手建立階段SYN請求隊列的最大長度,默認是1024。設置大一些可以在繁忙時將來不及處理的請求放入隊列,而不至於丟失客戶端的請求
net.ipv4.tcp_max_syn_backlog = 1024





轉載jadylen 的BLOG 作品,原始出處:http://linxucn.blog.51cto.com/1360306/740130

設置Linux內核參數 /etc/sysctl.conf

 

配置 Linux 內核參數修改後不用重啓動更新: /sbin/sysctl -p

打開/etc/sysctl.conf 複製如下內容
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 
     65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144

這裏,對每個參數值做個簡要的解釋和說明。
 
    (1)shmmax:該參數定義了共享內存段的最大尺寸(以字節爲單位)。缺省爲32M,對於oracle來說,該缺省值太低了,通常將其設置爲2G。
 
    (2)shmmni:這個內核參數用於設置系統範圍內共享內存段的最大數量。該參數的默認值是 4096 。通常不需要更改。
 
    (3)shmall:該參數表示系統一次可以使用的共享內存總量(以頁爲單位)。缺省值就是2097152,通常不需要修改。
 
    (4)sem:該參數表示設置的信號量。
 
    (5)file-max:該參數表示文件句柄的最大數量。文件句柄設置表示在linux系統中可以打開的文件數量。
 
    修改好內核以後,執行下面的命令使新的配置生效。

 

Linux如何在系統運行時修改內核參數(/proc/sys與/etc/sysctl.conf)  

RedHat提供了非常好的方法,使我們可以在系統運行時更改內核參數,而不需要重新引導系統。這是通過/proc虛擬文件系統實現的。

/proc/sys目錄下存放着大多數的內核參數,並且設計成可以在系統運行的同時進行更改, 不過重新啓動機器後會失效,可以通過更改/proc/sys中內核參數對應的文件 /etc/sysctl.conf 的內核參數來永久更改。

下面我們以打開內核的 ip轉發功能爲例說明在系統運行時修改內核參數的兩種方法。IP轉發是指允許系統對來源和目的地都不是本機的數據包通過網絡,RedHat默認屏蔽此功能,在 需要用本機作爲路由器、NAT等情況下需要開啓此功能。

  方法一:修改/proc下內核參數文件內容

  直接修改內核參數ip_forward對應在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件內容:
  # cat /proc/sys/net/ipv4/ip_forward
  該文件默認值0是禁止ip轉發,修改爲1即開啓ip轉發功能。修改命令如下:
  # echo 1 >/proc/sys/net/ipv4/ip_forward
  修改過後就馬上生效,即內核已經打開ip轉發功能。但如果系統重啓後則又恢復爲默認值0,如果想永久打開需要通過修改/etc/sysctl.conf文件的內容來實現。

  方法二.修改/etc/sysctl.conf文件
  默認sysctl.conf文件中有一個變量是
  net.ipv4.ip_forward = 0
  將後面值改爲1,然後保存文件。因爲每次系統啓動時初始化腳本/etc/rc.d/rc.sysinit會讀取/etc/sysctl.conf文件 的內容,所以修改後每次系統啓動時都會開啓ip轉發功能。但只是修改sysctl文件不會馬上生效,如果想使修改馬上生效可以執行下面的命令:
  # sysctl –p



  在修改其他內核參數時可以向/etc/sysctl.conf文件中添加相應變量即可,

下面介紹/proc/sys下內核文件與配置文件 sysctl.conf中變量的對應關係

由於可以修改的內核參數都在/proc/sys目錄下,所以sysctl.conf的變量名省略了目錄的前面部分(/proc/sys)。

  將/proc/sys中的文件轉換成sysctl中的變量依據下面兩個簡單的規則:

  1.去掉前面部分/proc/sys

  2.將文件名中的斜槓變爲點

  這兩條規則可以將/proc/sys中的任一文件名轉換成sysctl中的變量名。

  例如:

  /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward

  /proc/sys/kernel/hostname =》 kernel.hostname

  可以使用下面命令查詢所有可修改的變量名

  # sysctl –a

  下面例舉幾個簡單的內核參數:

  1./proc/sys/kernel/shmmax
  該文件指定內核所允許的最大共享內存段的大小。

  2./proc/sys/kernel/threads-max
  該文件指定內核所能使用的線程的最大數目。

  3./proc/sys/kernel/hostname
  該文件允許您配置網絡主機名。

  4./proc/sys/kernel/domainname
  該文件允許您配置網絡域名 

 

高負載系統,網絡參數調整

Java代碼  

1. net.ipv4.tcp_syncookies  


表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少量SYN***,默認爲0,表示關閉; 

Java代碼  

1. net.ipv4.tcp_tw_reuse  


表示開啓重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認爲0,表示關閉; 

Java代碼  

1. net.ipv4.tcp_tw_recycle  


表示開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。 

Java代碼  

1. net.ipv4.tcp_fin_timeout 30  


表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。 

Java代碼  

1. net.ipv4.tcp_keepalive_time 1200   


表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改爲20分鐘。 

Java代碼  

1. net.ipv4.ip_local_port_range 1024 65000   


表示用於向外連接的端口範圍。缺省情況下很小:32768到61000,改爲1024到65000。 

Java代碼  

1. net.ipv4.tcp_max_syn_backlog 8192   


表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,可以容納更多等待連接的網絡連接數。 


如果高負載系統使用了netfilter/iptables,調整以下參數 

Java代碼  

1. net.ipv4.ip_conntrack_max 655360   


在內核內存中netfilter可以同時處理的“任務”(連接跟蹤條目) 

Java代碼  

1. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established 180  


跟蹤的連接超時結束時間 


然後執行/sbin/sysctl -p讓參數生效


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章