1. 程式人生 > >linux做大併發服務的核心引數優化

linux做大併發服務的核心引數優化

轉載自:https://blog.csdn.net/ysdaniel/article/details/7307091

參考文件:https://wiki.swoole.com/wiki/page/p-server/sysctl.html

核心的網路功能,所以相關的設定資料都是放置在 /proc/sys/net/ipv4/ 這個目錄當中。 至於該目錄下各個檔案的詳細資料,建議大家可以參考核心的說明檔案: 
/usr/src/linux-{version}/networking/ip-sysctl.txt 

RHEL 6.0:

/usr/src/kernels/2.6.32-71.el6.i686/net/ipv4/Kconfig


阻斷式服務 (DoS) 攻擊法當中的一種方式,就是利用 TCP 封包的 SYN 三向交握
原理所達成的, 這種方式稱為 SYN Flooding 。那如何預防這種方式的攻擊呢?我們可以啟用核心的 SYN 
Cookie 模組啊! 這個 SYN Cookie 模組可以在系統用來啟動隨機聯機的埠口 (1024:65535) 即將用完時
自動啟動。 

當啟動 SYN Cookie 時,主機在傳送 SYN/ACK 確認封包前,會要求 Client 端在短時間內回覆一個序號, 
這個序號包含許多原本 SYN 封包內的資訊,包括 IP、port 等。若 Client 端可以回覆正確的序號, 那
麼主機就確定該封包為可信的,因此會發送 SYN/ACK 封包,否則就不理會此一封包。 

透過此一機制可以大大的降低無效的 SYN 等待埠口,而避免 SYN Flooding 的 DoS 攻擊說! 那麼如何啟
動這個模組呢?很簡單,這樣做即可: [

[email protected] ~]# echo "1" > /proc/sys/net/ipv4/tcp_syncookies 
但是這個設定值由於違反 TCP 的三向交握 (因為主機在傳送 SYN/ACK 之前需要先等待 client 的序號響
應), 所以可能會造成某些服務的延遲現象,例如 SMTP (mail server)。 不過總的來說,這個設定值還
是不錯用的! 只是不適合用在負載已經很高的伺服器內喔! 因為負載太高的主機有時會讓核心誤判遭受 
SYN Flooding 的攻擊呢。 

 /proc/sys/net/core/優化
  該目錄下的配置檔案主要用來控制核心和網路層之間的互動行為。
1) /proc/sys/net/core/message_burst
寫新的警告訊息所需的時間(以 1/10 秒為單位);在這個時間內系統接收到的其它警告訊息會被丟棄。這用於防止某些企圖用訊息“淹沒”系統的人所使用的拒絕服務(Denial of Service)攻擊。

預設設定:50(5秒)
2) /proc/sys/net/core/message_cost
該檔案表示寫每個警告訊息相關的成本值。該值越大,越有可能忽略警告訊息。

預設設定:5
3) /proc/sys/net/core/netdev_max_backlog
該檔案表示在每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目。

預設設定:300
4) /proc/sys/net/core/optmem_max
該檔案表示每個套接字所允許的最大緩衝區的大小。

預設設定:10240
5) /proc/sys/net/core/rmem_default
該檔案指定了接收套接字緩衝區大小的預設值(以位元組為單位)。

預設設定:110592
6) /proc/sys/net/core/rmem_max
該檔案指定了接收套接字緩衝區大小的最大值(以位元組為單位)。

預設設定:131071
7) /proc/sys/net/core/wmem_default
該檔案指定了傳送套接字緩衝區大小的預設值(以位元組為單位)。

預設設定:110592
8) /proc/sys/net/core/wmem_max
該檔案指定了傳送套接字緩衝區大小的最大值(以位元組為單位)。

預設設定:131071
9) 待續。。。
六、/proc/sys/net/ipv4/優化
1) /proc/sys/net/ipv4/ip_forward
該檔案表示是否開啟IP轉發。
0,禁止
1,轉發

預設設定:0
2) /proc/sys/net/ipv4/ip_default_ttl
該檔案表示一個數據報的生存週期(Time To Live),即最多經過多少路由器。

預設設定:64
增加該值會降低系統性能。
3) /proc/sys/net/ipv4/ip_no_pmtu_disc
該檔案表示在全域性範圍內關閉路徑MTU探測功能。

預設設定:0
4) /proc/sys/net/ipv4/route/min_pmtu
該檔案表示最小路徑MTU的大小。

預設設定:552
5) /proc/sys/net/ipv4/route/mtu_expires
該檔案表示PMTU資訊快取多長時間(秒)。

預設設定:600(秒)
6) /proc/sys/net/ipv4/route/min_adv_mss
該檔案表示最小的MSS(Maximum Segment Size)大小,取決於第一跳的路由器MTU。

預設設定:256(bytes)
6.1 IP Fragmentation
1) /proc/sys/net/ipv4/ipfrag_low_thresh/proc/sys/net/ipv4/ipfrag_low_thresh
兩個檔案分別表示用於重組IP分段的記憶體分配最低值和最高值,一旦達到最高記憶體分配值,其它分段將被丟棄,直到達到最低記憶體分配值。

預設設定:196608(ipfrag_low_thresh)
     262144(ipfrag_high_thresh)
2) /proc/sys/net/ipv4/ipfrag_time
該檔案表示一個IP分段在記憶體中保留多少秒。

預設設定:30(秒)
6.2 INET Peer Storage
1) /proc/sys/net/ipv4/inet_peer_threshold
INET對端儲存器某個合適值,當超過該閥值條目將被丟棄。該閥值同樣決定生存
時間以及廢物收集通過的時間間隔。條目越多,存活期越低,GC 間隔越短。

預設設定:65664
2) /proc/sys/net/ipv4/inet_peer_minttl
條目的最低存活期。在重組端必須要有足夠的碎片(fragment)存活期。這個最低
存活期必須保證緩衝池容積是否少於 inet_peer_threshold。該值以 jiffies為
單位測量。

預設設定:120
3) /proc/sys/net/ipv4/inet_peer_maxttl
條目的最大存活期。在此期限到達之後,如果緩衝池沒有耗盡壓力的話(例如:緩
衝池中的條目數目非常少),不使用的條目將會超時。該值以 jiffies為單位測量。

預設設定:600
4) /proc/sys/net/ipv4/inet_peer_gc_mintime
廢物收集(GC)通過的最短間隔。這個間隔會影響到緩衝池中記憶體的高壓力。 該值
以 jiffies為單位測量。
5) /proc/sys/net/ipv4/inet_peer_gc_maxtime
廢物收集(GC)通過的最大間隔,這個間隔會影響到緩衝池中記憶體的低壓力。 該值
以 jiffies為單位測量。

預設設定:120
6.3 TCP Variables
1) /proc/sys/net/ipv4/tcp_syn_retries
該檔案表示本機向外發起TCP SYN連線超時重傳的次數,不應該高於255;該值僅僅針對外出的連線,對於進來的連線由tcp_retries1控制。

預設設定:5
2) /proc/sys/net/ipv4/tcp_keepalive_probes
該檔案表示丟棄TCP連線前,進行最大TCP保持連線偵測的次數。保持連線僅在
SO_KEEPALIVE套接字選項被開啟時才被髮送。

預設設定:9(次)
3) /proc/sys/net/ipv4/tcp_keepalive_time
該檔案表示從不再傳送資料到向連線上傳送保持連線訊號之間所需的秒數。

預設設定:7200(2小時)
4) /proc/sys/net/ipv4/tcp_keepalive_intvl
該檔案表示傳送TCP探測的頻率,乘以tcp_keepalive_probes表示斷開沒有相應的TCP連線的時間。

預設設定:75(秒)
5) /proc/sys/net/ipv4/tcp_retries1
  該檔案表示放棄迴應一個TCP連線請求前進行重傳的次數。
  
  預設設定:3
6) /proc/sys/net/ipv4/tcp_retries2
  該檔案表示放棄在已經建立通訊狀態下的一個TCP資料包前進行重傳的次數。
  
  預設設定:15
7) /proc/sys/net/ipv4/tcp_orphan_retries
在近端丟棄TCP連線之前,要進行多少次重試。預設值是 7 個,相當於 50秒–
16分鐘,視 RTO 而定。如果您的系統是負載很大的web伺服器,那麼也許需
要降低該值,這類 sockets 可能會耗費大量的資源。另外參考
tcp_max_orphans。
8) /proc/sys/net/ipv4/tcp_fin_timeout
對於本端斷開的socket連線,TCP保持在FIN-WAIT-2狀態的時間。對方可能
會斷開連線或一直不結束連線或不可預料的程序死亡。預設值為 60 秒。過去在
2.2版本的核心中是 180 秒。您可以設定該值,但需要注意,如果您的機器為負
載很重的web伺服器,您可能要冒記憶體被大量無效資料報填滿的風險,
FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1,因為它們最多隻吃 1.5K 
的記憶體,但是它們存在時間更長。另外參考 tcp_max_orphans。

預設設定:60(秒)
9) /proc/sys/net/ipv4/tcp_max_tw_buckets
系統在同時所處理的最大timewait sockets 數目。如果超過此數的話,
time-wait socket 會被立即砍除並且顯示警告資訊。之所以要設定這個限制,純
粹為了抵禦那些簡單的 DoS 攻擊,千萬不要人為的降低這個限制,不過,如果
網路條件需要比預設值更多,則可以提高它(或許還要增加記憶體)。

預設設定:180000
10) /proc/sys/net/ipv4/tcp_tw_recyle
開啟快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求,請不要隨
意修改這個值。

預設設定:0
11) /proc/sys/net/ipv4/tcp_tw_reuse
該檔案表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連線。

預設設定:0
12) /proc/sys/net/ipv4/tcp_max_orphans
系統所能處理不屬於任何程序的TCP sockets最大數量。假如超過這個數量,那
麼不屬於任何程序的連線會被立即reset,並同時顯示警告資訊。之所以要設定這
個限制,純粹為了抵禦那些簡單的 DoS 攻擊,千萬不要依賴這個或是人為的降
低這個限制。

預設設定:8192
13) /proc/sys/net/ipv4/tcp_abort_on_overflow
當守護程序太忙而不能接受新的連線,就向對方傳送reset訊息,預設值是false。
這意味著當溢位的原因是因為一個偶然的猝發,那麼連線將恢復狀態。只有在你確
信守護程序真的不能完成連線請求時才打開該選項,該選項會影響客戶的使用。

預設設定:0
14) /proc/sys/net/ipv4/tcp_syncookies
該檔案表示是否開啟TCP同步標籤(syncookie),核心必須打開了 CONFIG_SYN_COOKIES項進行編譯。 同步標籤(syncookie)可以防止一個套接字在有過多試圖連線到達時引起過載。

預設設定:0
15) /proc/sys/net/ipv4/tcp_stdurg
使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的 
BSD解釋,因此如果您在 Linux 開啟它,或會導致不能和它們正確溝通。

預設設定:0
16) /proc/sys/net/ipv4/tcp_max_syn_backlog
對於那些依然還未獲得客戶端確認的連線請求,需要儲存在佇列中最大數目。對於
超過 128Mb 記憶體的系統,預設值是 1024,低於 128Mb 的則為 128。如果
伺服器經常出現過載,可以嘗試增加這個數字。警告!假如您將此值設為大於
1024,最好修改 include/net/tcp.h 裡面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)則系統將忽略所有傳送給自己
的ICMP ECHO請求或那些廣播地址的請求。

預設設定:1024
17) /proc/sys/net/ipv4/tcp_window_scaling
該檔案表示設定tcp/ip會話的滑動視窗大小是否可變。引數值為布林值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高資料傳輸的能力。

預設設定:1
18) /proc/sys/net/ipv4/tcp_sack
該檔案表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓傳送者只發送丟失的報文段);(對於廣域網通訊來說)這個選項應該啟用,但是這會增加對 CPU 的佔用。

預設設定:1
19) /proc/sys/net/ipv4/tcp_timestamps
該檔案表示是否啟用以一種比超時重發更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計算;為了實現更好的效能應該啟用這個選項。

預設設定:1
20) /proc/sys/net/ipv4/tcp_fack
該檔案表示是否開啟FACK擁塞避免和快速重傳功能。

預設設定:1
21) /proc/sys/net/ipv4/tcp_dsack
該檔案表示是否允許TCP傳送“兩個完全相同”的SACK。

預設設定:1
22) /proc/sys/net/ipv4/tcp_ecn
該檔案表示是否開啟TCP的直接擁塞通告功能。

預設設定:0
23) /proc/sys/net/ipv4/tcp_reordering
該檔案表示TCP流中重排序的資料報最大數量。

預設設定:3
24) /proc/sys/net/ipv4/tcp_retrans_collapse
該檔案表示對於某些有bug的印表機是否提供針對其bug的相容性。

預設設定:1
25) /proc/sys/net/ipv4/tcp_wmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於傳送緩衝的記憶體最小值。每個TCP socket都可以使用它。
Default:為TCP socket預留用於傳送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem中default的 值,一般要低於net.core.wmem中default的值。
Max:為TCP socket預留用於傳送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,今天選擇引數SO_SNDBUF則不受該值影響。預設值為128K。

預設設定:4096 16384 131072
26) /proc/sys/net/ipv4/tcp_rmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於接收緩衝的記憶體數量,即使在記憶體出現緊張情況下TCP socket都至少會有這麼多數量的記憶體用於接收緩衝。 
Default:為TCP socket預留用於接收緩衝的記憶體數量,預設情況下該值影響其它協議使用的 net.core.wmem中default的 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的預設值情況下,TCP 視窗大小為65535。 
Max:為TCP socket預留用於接收緩衝的記憶體最大值。該值不會影響 net.core.wmem中max的值,今天選擇引數 SO_SNDBUF則不受該值影響。

預設設定:4096 87380 174760
27) /proc/sys/net/ipv4/tcp_mem
該檔案包含3個整數值,分別是:low,pressure,high
Low:當TCP使用了低於該值的記憶體頁面數時,TCP不會考慮釋放記憶體。 
Pressure:當TCP使用了超過該值的記憶體頁面數量時,TCP試圖穩定其記憶體使用,進入pressure模式,當記憶體消耗低於low值時則退出pressure狀態。 
High:允許所有tcp sockets用於排隊緩衝資料報的頁面量。 
一般情況下這些值是在系統啟動時根據系統記憶體數量計算得到的。

預設設定:24576 32768 49152
28) /proc/sys/net/ipv4/tcp_app_win
該檔案表示保留max(window/2^tcp_app_win, mss)數量的視窗由於應用緩衝。當為0時表示不需要緩衝。

預設設定:31
29) /proc/sys/net/ipv4/tcp_adv_win_scale
該檔案表示計算緩衝開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

預設設定:2
6.4 IP Variables
1) /proc/sys/net/ipv4/ip_local_port_range
該檔案表示TCP/UDP協議開啟的本地埠號。

預設設定:1024 4999
建議設定:32768 61000
2) /proc/sys/net/ipv4/ip_nonlocal_bind
該檔案表示是否允許程序邦定到非本地地址。

預設設定:0
3) /proc/sys/net/ipv4/ip_dynaddr
該引數通常用於使用撥號連線的情況,可以使系統動能夠立即改變ip包的源地址為該ip地址,同時中斷原有的tcp對話而用新地址重新發出一個syn請求包,開始新的tcp對話。在使用ip欺騙時,該引數可以立即改變偽裝地址為新的ip地址。該檔案表示是否允許動態地址,如果該值非0,表示允許;如果該值大於1,核心將通過log記錄動態地址重寫資訊。

預設設定:0
4) /proc/sys/net/ipv4/icmp_echo_ignore_all/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
該檔案表示核心是否忽略所有的ICMP ECHO請求,或忽略廣播和多播請求。
0, 響應請求
1, 忽略請求

預設設定:0
建議設定:1
5) /proc/sys/net/ipv4/icmp_ratelimit
6) /proc/sys/net/ipv4/icmp_ratemask
7) /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses
某些路由器違背RFC1122標準,其對廣播幀傳送偽造的響應來應答。這種違背行
為通常會被以告警的方式記錄在系統日誌中。如果該選項設定為True,核心不會
記錄這種警告資訊。

預設設定:0
8) /proc/sys/net/ipv4/igmp_max_memberships
該檔案表示多播組中的最大成員數量。

預設設定:20
6.5 Other Configuration
1) /proc/sys/net/ipv4/conf/*/accept_redirects
   如果主機所在的網段中有兩個路由器,你將其中一個設定成了預設閘道器,但是該閘道器
   在收到你的ip包時發現該ip包必須經過另外一個路由器,這時這個路由器就會給你
   發一個所謂的“重定向”icmp包,告訴將ip包轉發到另外一個路由器。引數值為布林
   值,1表示接收這類重定向icmp 資訊,0表示忽略。在充當路由器的linux主機上缺
   省值為0,在一般的linux主機上預設值為1。建議將其改為0以消除安全性隱患。
2) /proc/sys/net/ipv4/*/accept_source_route
 是否接受含有源路由資訊的ip包。引數值為布林值,1表示接受,0表示不接受。在
 充當閘道器的linux主機上預設值為1,在一般的linux主機上預設值為0。從安全性角
 度出發,建議關閉該功能。
3) /proc/sys/net/ipv4/*/secure_redirects
 其實所謂的“安全重定向”就是隻接受來自閘道器的“重定向”icmp包。該引數就是
 用來設定“安全重定向”功能的。引數值為布林值,1表示啟用,0表示禁止,預設值
 為啟用。
4) /proc/sys/net/ipv4/*/proxy_arp
 設定是否對網路上的arp包進行中繼。引數值為布林值,1表示中繼,0表示忽略,
 預設值為0。該引數通常只對充當路由器的linux主機有用。
七、效能優化策略
7.1 基本優化
1) 關閉後臺守護程序
系統安裝完後,系統會預設啟動一些後臺守護程序,有些程序並不是必需的;因此,關閉這些程序可以節省一部分實體記憶體消耗。以root身份登入系統,執行ntsysv,選中如下程序:
  iptables
network
syslog
random
apmd
xinetd
vsftpd
crond
local
修改完後,重新啟動系統。
如此,系統將僅僅啟動選中的這些守護程序。
2) 減少終端連線數
系統預設啟動6個終端,而實際上只需啟動3個即可;以root身份登入系統,執行vi /etc/inittab,修改成如下:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
如上所述,註釋掉4、5、6終端。
3) 待續。。。
7.2 網路優化
1) 優化系統套接字緩衝區
net.core.rmem_max=16777216
net.core.wmem_max=16777216
2) 優化TCP接收/傳送緩衝區
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
3) 優化網路裝置接收佇列
net.core.netdev_max_backlog=3000
4) 關閉路由相關功能
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

net.ipv4.conf.lo.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
5) 優化TCP協議棧
開啟TCP SYN cookie選項,有助於保護伺服器免受SyncFlood攻擊。
net.ipv4.tcp_syncookies=1

開啟TIME-WAIT套接字重用功能,對於存在大量連線的Web伺服器非常有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1

減少處於FIN-WAIT-2連線狀態的時間,使系統可以處理更多的連線。
net.ipv4.tcp_fin_timeout=30

減少TCP KeepAlive連線偵測的時間,使系統可以處理更多的連線。
net.ipv4.tcp_keepalive_time=1800

增加TCP SYN佇列長度,使系統可以處理更多的併發連線。
net.ipv4.tcp_max_syn_backlog=8192



tcp_syncookies是一個開關,是否開啟SYN Cookie功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN的重試次數。

linux network optimize with sysctl

Disabling the TCP options reduces the overhead of each TCP packet and might help to get the last few percent of performance out of the server. Be aware that disabling these options most likely decreases performance for high-latency and lossy links.
* net.ipv4.tcp_sack = 0
* net.ipv4.tcp_timestamps = 0

Increasing the TCP send and receive buffers will increase the performance a lot if (and only if) you have a lot of large files to send.

* net.ipv4.tcp_wmem = 4096 65536 524288
* net.core.wmem_max = 1048576

If you have a lot of large file uploads, increasing the receive buffers will help.

* net.ipv4.tcp_rmem = 4096 87380 524288
* net.core.rmem_max = 1048576

# These ensure that TIME_WAIT ports either get reused or closed fast.
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
# TCP memory
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# you shouldn’t be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn’t die
net.ipv4.ip_conntrack_max = 1048576
net.nf_conntrack_max = 1048576

# increase Linux TCP buffer limits
echo 8388608 > /proc/sys/net/core/rmem_max
echo 8388608 > /proc/sys/net/core/wmem_max

# increase Linux autotuning TCP buffer limits
echo "4096 87380 8388608" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 65536 8388608" > /proc/sys/net/ipv4/tcp_wmem

#echo 65536 > /proc/sys/fs/file-max # physical RAM * 256/4

echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range

#echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Decrease the time default value for tcp_fin_timeout connection
#echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
#echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
#echo 2 > /proc/sys/net/ipv4/tcp_retries1
# Decrease the time default value for tcp_keepalive_time connection
#echo 1800 >/proc/sys/net/ipv4/tcp_keepalive_time
# Turn off tcp_window_scaling
echo 0 >/proc/sys/net/ipv4/tcp_window_scaling
#echo "67108864" > /proc/sys/kernel/shmmax
# Turn off the tcp_sack
echo 0 >/proc/sys/net/ipv4/tcp_sack # This disables RFC2018 TCP Selective Acknowledgements
#Turn off tcp_timestamps
echo 0 >/proc/sys/net/ipv4/tcp_timestamps # This disables RFC1323 TCP timestamps
echo 5 > /proc/sys/kernel/panic # reboot 5 minutes later then kernel panic

the third:
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Lot of tuning

# Disables packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
net.ipv4.conf.default.rp_filter = 1
# Disables the magic-sysrq key
kernel.sysrq = 0
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 25
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 3600
# Turn on the tcp_window_scaling
net.ipv4.tcp_window_scaling = 1
# Turn on the tcp_sack
net.ipv4.tcp_sack = 1
# tcp_fack should be on because of sack
net.ipv4.tcp_fack = 1
# Turn on the tcp_timestamps
net.ipv4.tcp_timestamps = 1
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Don’t Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 0
# Make more local ports available
net.ipv4.ip_local_port_range = 1024 65000
# Increase maximum amount of memory allocated to shm
kernel.shmmax = 1073741824
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# This will increase the amount of memory available for socket input/output queues
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536
net.core.optmem_max = 25165824

# If you are feeling daring, you can also use these settings below, otherwise just remove them. (Should increase performance)

net.core.netdev_max_backlog = 2500
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536

# Disables packet forwarding
net.ipv4.ip_forward=0

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.lo.log_martians = 0
net.ipv4.conf.eth0.log_martians = 0

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# Disables the magic-sysrq key
kernel.sysrq = 0

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15

# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800

# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0

# Turn off the tcp_sack
net.ipv4.tcp_sack = 0

# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1

# Increases the size of the socket queue (effectively, q0).
net.ipv4.tcp_max_syn_backlog = 1024

# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000

# Allowed local port range
net.ipv4.ip_local_port_range = 16384 65536