Linxu內核參數詳解

  1. #表示SYN隊列的長度,默認爲1024,加大隊列長度,能夠容納更多等待鏈接的網絡鏈接數。  
  2. net.ipv4.tcp_max_syn_backlog = 65536  
  3.   
  4. #每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目  
  5. net.core.netdev_max_backlog = 32768  
  6.   
  7. #默認128,這個參數會影響到全部AF_INET類型socket的listen隊列  
  8. net.core.somaxconn = 32768  
  9.   
  10. #系統套接字寫默認緩衝區  
  11. net.core.wmem_default = 8388608  
  12.   
  13. #系統套接字讀默認緩衝區  
  14. net.core.rmem_default = 8388608  
  15.   
  16. #系統套接字讀最大緩衝區  
  17. net.core.rmem_max = 16777216  
  18.   
  19. #系統套接字寫最大緩衝區  
  20. net.core.wmem_max = 16777216  
  21.   
  22. #此參數與net.ipv4.tcp_wmem都是用來優化TCP接收/發送緩衝區,包含三個整數值,分別是:min,default,max:  
  23. #tcp_rmem:min表示爲TCP socket預留用於接收緩衝的最小內存數量,default爲TCP socket預留用於接收緩衝的缺省內存數量,max用於TCP socket接收緩衝的內存最大值。  
  24. #tcp_wmem:min表示爲TCP socket預留用於發送緩衝的內存最小值,default爲TCP socket預留用於發送緩衝的缺省內存值,max用於TCP socket發送緩衝的內存最大值。  
  25. net.ipv4.tcp_rmem=4096 87380 4194304  
  26. net.ipv4.tcp_wmem=4096 16384 4194304  
  27.   
  28. #時間戳能夠避免序列號的卷繞。一個1Gbps 的鏈路確定會遇到之前用過的序列號。時間戳可以讓內核接受這種「異常」的數據包。這裏須要將其關掉。  
  29. net.ipv4.tcp_timestamps = 0  
  30.   
  31. #爲了打開對端的鏈接,內核須要發送一個SYN 並附帶一個迴應前面一個SYN 的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄鏈接以前發送SYN+ACK 包的數量。  
  32. net.ipv4.tcp_synack_retries = 2  
  33.   
  34. #在內核放棄創建鏈接以前發送SYN 包的數量  
  35. net.ipv4.tcp_syn_retries = 2  
  36.   
  37. #表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。  
  38. net.ipv4.tcp_tw_recycle = 1  
  39.   
  40. #net.ipv4.tcp_tw_len = 1  
  41.   
  42. #表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉  
  43. net.ipv4.tcp_tw_reuse = 1  
  44.   
  45. #肯定 TCP 棧應該如何反映內存使用;每一個值的單位都是內存頁(一般是 4KB)。  
  46. net.ipv4.tcp_mem = 94500000 915000000 927000000  
  47.   
  48. #這個值表示系統所能處理不屬於任何進程的socket數量,當咱們須要快速創建大量鏈接時,就須要關注下這個值了。  
  49. net.ipv4.tcp_max_orphans = 3276800  
  50.   
  51. #若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2 狀態的時間。  
  52. net.ipv4.tcp_fin_timeout = 30  
  53.   
  54. #net.ipv4.tcp_keepalive_time = 120  
  55.   
  56. #用於向外鏈接的端口範圍  
  57. net.ipv4.ip_local_port_range = 1024  65535  




讓以上參數生效: linux

Java代碼   收藏代碼
  1. /sbin/sysctl -p   



調整最大文件描述符: nginx

Java代碼   收藏代碼
  1. vi /etc/security/limits.conf   
  2. ulimit -n 查看


添加: web

Java代碼   收藏代碼
    1. *       soft     nofile  1006154  
    2. *       hard    nofile 1006154

-----------------------------------------------------------------------------------------------------------------------緩存

 

高併發Linux服務器的經常使用配置

fs.file-max = 999999 # 進程能夠同時打開的最大句柄數
net.ipv4.tcp_tw_reuse = 1 # 重用 TIME_WAIT 狀態的 socket
net.ipv4.tcp_keepalive_time = 600 # 當 keepalive 啓用時,TCP 發送 keepalive 消息的頻度
net.ipv4.tcp_fin_timeout = 30 # socket 保持在 FIN_WAIT_2 狀態的最大時間
net.ipv4.tcp_max_tw_buckets = 5000 # 操做系統容許 TIME_WAIT socket 的最大數量
net.ipv4.ip_local_port_range = 1024 61000 # 定義在 UDP和 TCP 鏈接中本地端口的取值範圍
net.ipv4.tcp_rmem = 4096 32768 262142 # TCP 接收緩存的最小值、默認值、最大值
net.ipv4.tcp_wmem = 4096 32768 262142 # TCP 發送緩存的最小值、默認值、最大值
net.core.netdev_max_backlog = 8096 # 當網卡接收數據包的速度大於內核處理的速度時,保存隊列的最大值
net.core.rmem_default = 262144 # 內核 socket 接收緩存區默認的大小
net.core.wmem_default = 212144 # 內核 socket 發送緩存區默認的大小
net.core.rmem_max = 2097152 # 內核 socket 接收緩存區的最大大小
net.core.wmem_max = 2097152 # 內核 socket 發送緩存區的最大大小
net.ipv4.tcp_syncookies = 1 # 防止 TCP SYN 攻擊
net.ipv4.tcp_tw_recycle 設置是否啓用timewait快速回收
net.core.somaxconn web應用中listen函數的backlog默認會將內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認是511,因此必須調整
net.ipv4.tcp_max_orphans 該參數用於設置linux可以處理不屬於任何進程的套接字數量的大小
net.ipv4.tcp_max_syn_backlog 該參數用於記錄還沒有被客戶端確認信息的連接請求的最大值
net.ipv4.tcp_timestamps該參數用於設置使用時間戳做爲序列號,在高併發環境下,開啓該功能會出現異常,所以要關閉
net.ipv4.tcp_synack_retries 該參數用於設置SYN重試次數
net.ipv4.tcp_syn_retries該參數用於設置在內核放起創建連接以前發送SYN包的數量服務器


--------------------------------------------------------------------------------------cookie

 

net.ipv4.tcp_tw_len = 1 #Linux 5.8沒法識別網絡

#net.nf_conntrack_max=1048576 (LINUX 6以上名稱已經修改)
#net.netfilter.nf_conntrack_max=1048576 (LINUX 6以上名稱已經修改)session

#net.netfilter.nf_conntrack_tcp_timeount_established=60 (LINUX 6以上名稱已經修改)併發

1.增長:
modprobe ip_conntrack
echo "modprobe ip_conntrack" >> /etc/sysctl.conf
echo "modprobe ip_conntrack" >> /etc/rc.local
刪除:
modprobe -r ip_conntracksocket

2.sysctl -w fs.file-max=655360
cat /proc/sys/fs/file-max
/sbin/sysctl fs.file-max 查看是否生效

3.修改/etc/security/limits.conf文件,
在文件中添加以下行:

* - nofile 1048576
* - nproc 1048576

4.修改/etc/pam.d/login文件,
在文件中添加以下行:

session required /lib/security/pam_limits.so

 

5.修改/usr/include/linux/limits.h文件:

#define NR_OREN = 1048576 /*1024*1024*/
#define OPEN_MAX = 131072
#define MAX_CANON = 10240

重啓服務器 reboot

 

------------------------------------------------------------------------------------

Sysctl命令及linux內核參數調整
 
1、Sysctl命令用來配置與顯示在/proc/sys目錄中的內核參數.若是想使參數長期保存,能夠經過編輯/etc/sysctl.conf文件來實現。
 
 命令格式:
 sysctl [-n] [-e] -w variable=value
 sysctl [-n] [-e] -p (default /etc/sysctl.conf)
 sysctl [-n] [-e] –a
 
經常使用參數的意義:
 -w  臨時改變某個指定參數的值,如
        # sysctl -w net.ipv4.ip_forward=1
 -a  顯示全部的系統參數
 -p從指定的文件加載系統參數,默認從/etc/sysctl.conf 文件中加載,如:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=1
 以上兩種方法均可能當即開啓路由功能,但若是系統重啓,或執行了
     # service network restart
命令,所設置的值即會丟失,若是想永久保留配置,能夠修改/etc/sysctl.conf文件,將 net.ipv4.ip_forward=0改成net.ipv4.ip_forward=1
 
 
2、linux內核參數調整:linux 內核參數調整有兩種方式
 
方法一:修改/proc下內核參數文件內容,不能使用編輯器來修改內核參數文件,理由是因爲內核隨時可能更改這些文件中的任意一個,另外,這些內核參數文件都是虛擬文件,實際中不存在,所以不能使用編輯器進行編輯,而是使用echo命令,而後從命令行將輸出重定向至 /proc 下所選定的文件中。如:將 timeout_timewait 參數設置爲30秒:
# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
參數修改後當即生效,可是重啓系統後,該參數又恢復成默認值。所以,想永久更改內核參數,須要修改/etc/sysctl.conf文件
 
   方法二.修改/etc/sysctl.conf文件。檢查sysctl.conf文件,若是已經包含須要修改的參數,則修改該參數的值,若是沒有須要修改的參數,在sysctl.conf文件中添加參數。如:
   net.ipv4.tcp_fin_timeout=30
保存退出後,能夠重啓機器使參數生效,若是想使參數立刻生效,也能夠執行以下命令:
   # sysctl  -p
 
3、sysctl.conf 文件中參數設置及說明
proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200
 
/proc/sys/net/core/rmem_max 
最大socket讀buffer,可參考的優化值:873200
/proc/sys/net/ipv4/tcp_wmem 
TCP寫buffer,可參考的優化值: 8192 436600 873200
 
/proc/sys/net/ipv4/tcp_rmem 
TCP讀buffer,可參考的優化值: 32768 436600 873200
 
/proc/sys/net/ipv4/tcp_mem 
一樣有3個值,意思是: 
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力. 
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段. 
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket. 
上述內存單位是頁,而不是字節.可參考的優化值是:786432 1048576 1572864
 
/proc/sys/net/core/netdev_max_backlog 
進入包的最大設備隊列.默認是300,對重負載服務器而言,該值過低,可調整到1000
 
/proc/sys/net/core/somaxconn 
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的服務器,增長該值有助於網絡性能.可調整到256.
 
/proc/sys/net/core/optmem_max 
socket buffer的最大初始化值,默認10K
 
/proc/sys/net/ipv4/tcp_max_syn_backlog 
進入SYN包的最大請求隊列.默認1024.對重負載服務器,可調整到2048
 
/proc/sys/net/ipv4/tcp_retries2 
TCP失敗重傳次數,默認值15,意味着重傳15次才完全放棄.可減小到5,儘早釋放內核資源.
 
/proc/sys/net/ipv4/tcp_keepalive_time 
/proc/sys/net/ipv4/tcp_keepalive_intvl 
/proc/sys/net/ipv4/tcp_keepalive_probes 
這3個參數與TCP KeepAlive有關.默認值是: 
tcp_keepalive_time = 7200 seconds (2 hours) 
tcp_keepalive_probes = 9 
tcp_keepalive_intvl = 75 seconds 
意思是若是某個TCP鏈接在idle 2個小時後,內核才發起probe.若是probe 9次(每次75秒)不成功,內核才完全放棄,認爲該鏈接已失效.對服務器而言,顯然上述值太大. 可調整到: 
/proc/sys/net/ipv4/tcp_keepalive_time 1800 
/proc/sys/net/ipv4/tcp_keepalive_intvl 30 
/proc/sys/net/ipv4/tcp_keepalive_probes 3
 
/proc/sys/net/ipv4/ip_local_port_range 
指定端口範圍的一個配置,默認是32768 61000,已夠大.
net.ipv4.tcp_syncookies = 1 
表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉;
 
net.ipv4.tcp_tw_reuse = 1 
表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉;
 
net.ipv4.tcp_tw_recycle = 1 
表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。
 
net.ipv4.tcp_fin_timeout = 30 
表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
 
net.ipv4.tcp_keepalive_time = 1200 
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。
 
net.ipv4.ip_local_port_range = 1024 65000 
表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成1024到65000。
 
net.ipv4.tcp_max_syn_backlog = 8192 
表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。
 
net.ipv4.tcp_max_tw_buckets = 5000 
表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲 180000,改成 5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
 
 
 
 
Linux上的NAT與iptables
談起Linux上的NAT,大多數人會跟你提到iptables。緣由是由於iptables是目前在linux上實現NAT的一個很是好的接口。它經過和內核級直接操做網絡包,效率和穩定性都很是高。這裏簡單列舉一些NAT相關的iptables實例命令,可能對於大多數實現有多幫助。
 這裏說明一下,爲了節省篇幅,這裏把準備工做的命令略去了,僅僅列出核心步驟命令,因此若是你單單執行這些沒有實現功能的話,極可能因爲準備工做沒有作好。若是你對整個命令細節感興趣的話,能夠直接訪問個人《如何讓你的Linux網關更強大》系列文章,其中對於各個腳本有詳細的說明和描述。
# 案例1:實現網關的MASQUERADE
# 具體功能:內網網卡是eth1,外網eth0,使得內網指定本服務作網關能夠訪問外網
 
EXTERNAL="eth0"
INTERNAL="eth1"
 
# 這一步開啓ip轉發支持,這是NAT實現的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
# 案例2:實現網關的簡單端口映射
# 具體功能:實現外網經過訪問網關的外部ip:80,能夠直接達到訪問私有網絡內的一臺主機192.168.1.10:80效果
 
LOCAL_EX_IP=11.22.33.44 #設定網關的外網卡ip,對於多ip狀況,參考《如何讓你的Linux網關更強大》系列文章
LOCAL_IN_IP=192.168.1.1  #設定網關的內網卡ip
INTERNAL="eth1" #設定內網卡
 
# 這一步開啓ip轉發支持,這是NAT實現的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
 
# 加載須要的ip模塊,下面兩個是ftp相關的模塊,若是有其餘特殊需求,也須要加進來
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
 
# 這一步實現目標地址指向網關外部ip:80的訪問都吧目標地址改爲192.168.1.10:80
iptables -t nat -A PREROUTING -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
 
# 這一步實現把目標地址指向192.168.1.10:80的數據包的源地址改爲網關本身的本地ip,這裏是192.168.1.1
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to $LOCAL_IN_IP
 
# 在FORWARD鏈上添加到192.168.1.10:80的容許,不然不能實現轉發
iptables -A FORWARD -o $INTERNAL -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
 
# 經過上面重要的三句話以後,實現的效果是,經過網關的外網ip:80訪問,所有轉發到內網的192.168.1.10:80端口,實現典型的端口映射
# 特別注意,全部被轉發過的數據都是源地址是網關內網ip的數據包,因此192.168.1.10上看到的全部訪問都好像是網關發過來的同樣,而看不到外部ip
# 一個重要的思想:數據包根據「從哪裏來,回哪裏去」的策略來走,因此沒必要擔憂回頭數據的問題
 
# 如今還有一個問題,網關本身訪問本身的外網ip:80,是不會被NAT到192.168.1.10的,這不是一個嚴重的問題,但讓人很不爽,解決的方法以下:
iptables -t nat -A OUTPUT -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
獲取系統中的NAT信息和診斷錯誤
瞭解/proc目錄的意義
在Linux系統中,/proc是一個特殊的目錄,proc文件系統是一個僞文件系統,它只存在內存當中,而不佔用外存空間。它包含當前系統的一些參數(variables)和狀態(status)狀況。它以文件系統的方式爲訪問系統內核數據的操做提供接口
經過/proc能夠了解到系統當前的一些重要信息,包括磁盤使用狀況,內存使用情況,硬件信息,網絡使用狀況等等,不少系統監控工具(如HotSaNIC)都經過/proc目錄獲取系統數據。
另外一方面經過直接操做/proc中的參數能夠實現系統內核參數的調節,好比是否容許ip轉發,syn-cookie是否打開,tcp超時時間等。
得到參數的方式:
第一種:cat /proc/xxx/xxx,如 cat /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl xxx.xxx.xxx,如 sysctl net.ipv4.conf.all.rp_filter
改變參數的方式:
第一種:echo value > /proc/xxx/xxx,如 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl [-w] variable=value,如 sysctl [-w] net.ipv4.conf.all.rp_filter=1
以上設定系統參數的方式只對當前系統有效,重起系統就沒了,想要保存下來,須要寫入/etc/sysctl.conf文件中
經過執行 man 5 proc能夠得到一些關於proc目錄的介紹
查看系統中的NAT狀況
和NAT相關的系統變量
/proc/slabinfo:內核緩存使用狀況統計信息(Kernel slab allocator statistics)
/proc/sys/net/ipv4/ip_conntrack_max:系統支持的最大ipv4鏈接數,默認65536(事實上這也是理論最大值)
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 已創建的tcp鏈接的超時時間,默認432000,也就是5天
和NAT相關的狀態值
/proc/net/ip_conntrack:當前的前被跟蹤的鏈接情況,nat翻譯表就在這裏體現(對於一個網關爲主要功能的Linux主機,裏面大部分信息是NAT翻譯表)
/proc/sys/net/ipv4/ip_local_port_range:本地開放端口範圍,這個範圍一樣會間接限制NAT表規模
# 1. 查看當前系統支持的最大鏈接數
cat /proc/sys/net/ipv4/ip_conntrack_max 
# 值:默認65536,同時這個值和你的內存大小有關,若是內存128M,這個值最大8192,1G以上內存這個值都是默認65536
# 影響:這個值決定了你做爲NAT網關的工做能力上限,全部局域網內經過這臺網關對外的鏈接都將佔用一個鏈接,若是這個值過低,將會影響吞吐量
 
# 2. 查看tcp鏈接超時時間
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 
# 值:默認432000(秒),也就是5天
# 影響:這個值過大將致使一些可能已經不用的鏈接常駐於內存中,佔用大量連接資源,從而可能致使NAT ip_conntrack: table full的問題
# 建議:對於NAT負載相對本機的 NAT表大小很緊張的時候,可能須要考慮縮小這個值,以儘早清除鏈接,保證有可用的鏈接資源;若是不緊張,沒必要修改
 
# 3. 查看NAT表使用狀況(判斷NAT表資源是否緊張)
# 執行下面的命令能夠查看你的網關中NAT表狀況
cat /proc/net/ip_conntrack
 
# 4. 查看本地開放端口的範圍
cat /proc/sys/net/ipv4/ip_local_port_range
# 返回兩個值,最小值和最大值
 
# 下面的命令幫你明確一下NAT表的規模
wc -l /proc/net/ip_conntrack
#或者
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $2;}'
 
# 下面的命令幫你明確可用的NAT表項,若是這個值比較大,那就說明NAT表資源不緊張
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $3;}'
 
# 下面的命令幫你統計NAT表中佔用端口最多的幾個ip,頗有可能這些傢伙再作一些bt的事情,嗯bt的事情:-)
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
# 上面這個命令有點瑕疵cut -d' ' -f10會由於命令輸出有些行缺項而形成統計誤差,下面給出一個正確的寫法:
cat /proc/net/ip_conntrack | perl -pe s/^\(.*?\)src/src/g | cut -d ' ' -f1 | cut -d '=' -f2 | sort | uniq -c | sort -nr | head -n 10
 
--------------------------------------------------------------------------------
 
$ /proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200
$ /proc/sys/net/core/rmem_max
最大socket讀buffer,可參考的優化值:873200
$ /proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優化值: 8192 436600 873200
$ /proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優化值: 32768 436600 873200
$ /proc/sys/net/ipv4/tcp_mem
一樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力.
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段.
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.
上述內存單位是頁,而不是字節.可參考的優化值是:786432 1048576 1572864
$ /proc/sys/net/core/netdev_max_backlog
進入包的最大設備隊列.默認是300,對重負載服務器而言,該值過低,可調整到1000.
$ /proc/sys/net/core/somaxconn
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的服務器,增長該值有助於網絡性能.可調整到256.
$ /proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默認10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的最大請求隊列.默認1024.對重負載服務器,增長該值顯然有好處.可調整到2048.
$ /proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數,默認值15,意味着重傳15次才完全放棄.可減小到5,以儘早釋放內核資源.
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數與TCP KeepAlive有關.默認值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是若是某個TCP鏈接在idle 2個小時後,內核才發起probe.若是probe 9次(每次75秒)不成功,內核才完全放棄,認爲該鏈接已失效.對服務器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
$ proc/sys/net/ipv4/ip_local_port_range
指定端口範圍的一個配置,默認是32768 61000,已夠大.
 
net.ipv4.tcp_syncookies = 1
表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。
net.ipv4.tcp_fin_timeout = 30
表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。
net.ipv4.ip_local_port_range = 1024 65000
表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。
net.ipv4.tcp_max_tw_buckets = 5000
表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲180000,改成 5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

本文出自 「虛擬的現實」 博客,請務必保留此出處http://waringid.blog.51cto.com/65148/183496
kernel.hung_task_check_count
The number of tasks checked:
 */
unsigned long __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
最大pid上限?
###############################################

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
每一個消息隊列的最大字節限制
kernel.msgmax = 65536
每一個消息的最大size.
kernel.shmmax = 68719476736
內核參數定義單個共享內存段的最大值
kernel.shmall = 4294967296
參數是控制共享內存頁數

net.ipv4.tcp_max_syn_backlog = 65536 表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數
net.core.netdev_max_backlog = 8192 每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目
net.ipv4.tcp_max_tw_buckets = 20000 表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲180000,改成5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死

net.core.somaxconn = 32768 定義了系統中每個端口最大的監聽隊列的長度,這是個全局的參數,默認值爲1024
net.core.wmem_default = 8388608 該文件指定了發送套接字緩衝區大小的缺省值(以字節爲單位)。 
net.core.rmem_default = 8388608 該文件指定了接收套接字緩衝區大小的默認值(以字節爲單位)。
net.core.rmem_max = 16777216    指定了接收套接字緩衝區(接收窗口)大小的最大值(以字節爲單位)          最大的TCP數據接收緩衝
net.core.wmem_max = 16777216    指定了發送套接字緩衝區(接收窗口)大小的最大值(以字節爲單位)        最大的TCP數據發送緩衝
net.ipv4.tcp_timestamps = 0           以一種比重發超時更精確的方法(請參閱 RFC 1323)來啓用對 RTT 的計算;爲了實現更好的性能應該啓用這個選項,時間戳在(請參考RFC 1323)TCP的包頭增長12個字節

net.ipv4.tcp_synack_retries = 2                     # syn-ack握手狀態重試次數,默認5,遭受syn-flood攻擊時改成1或2 
net.ipv4.tcp_syn_retries = 2                          外向syn握手重試次數,默認4
net.ipv4.tcp_tw_recycle = 1                           # 默認0,tw快速回收
net.ipv4.tcp_tw_reuse = 1                             表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉;

net.ipv4.tcp_mem = 94500000 915000000 927000000  肯定 TCP 棧應該如何反映內存使用;每一個值的單位都是內存頁(一般是 4KB)。第一個值是內存使用的下限。第二個值是內存壓力模式開始對緩衝區使用應用壓力的上限。第三個值是內存上限。在這個層次上能夠將報文丟棄,從而減小對內存的使用。對於較大的 BDP 能夠增大這些值(可是要記住,其單位是內存頁,而不是字節)
net.ipv4.tcp_max_orphans = 3276800  系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。若是超過這個數字,孤兒鏈接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS攻擊,你絕對不能過度依靠它或者人爲地減少這個值,更應該增長這個值(若是增長了內存以後) net.ipv4.tcp_fin_timeout = 30                    表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。 net.ipv4.tcp_keepalive_time = 600              表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。 net.ipv4.tcp_keepalive_intvl = 30                當探測沒有確認時,從新發送探測的頻度。缺省是75秒 net.ipv4.tcp_keepalive_probes = 3               在認定鏈接失效以前,發送多少個TCP的keepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl以後決定了,一個鏈接發送了keepalive以後能夠有多少時間沒有迴應 net.ipv4.tcp_no_metrics_save = 1        一個tcp鏈接關閉後,把這個鏈接曾經有的參數好比慢啓動門限snd_sthresh,擁塞窗口snd_cwnd 還有srtt等信息保存到dst_entry中, 只要dst_entry 沒有失效,下次新創建相同鏈接的時候就可使用保存的參數來初始化這個鏈接. tcp_no_metrics_save 設置爲1就是不保持這些參數(經驗值),每次創建鏈接後都從新摸索一次. 我以爲沒什麼好處. 因此係統默認把它設爲0. net.ipv4.ip_local_port_range = 1024  65535    指定端口範圍的一個配置,默認是32768 61000 kernel.msgmni = 1024 這個參數決定了系統中同時運行的最大的message queue的個數 kernel.sem = 250 256000 32 2048 cat /proc/sys/kernel/sem 250 32000 100 128 4個數據分別對應 SEMMSL     250       表示每一個信號集中的最大信號量數目 SEMMNS     32000  表示系統範圍內的最大信號量總數目 SEMOPM     100      表示每一個信號發生時的最大系統操做數目 SEMMNI       128      表示系統範圍內的最大信號集總數目
相關文章
相關標籤/搜索