高并发web系统性能优化( 二 )


tcp_abort_on_overflow
0
0
当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false 。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态 。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用 。(对待已经满载的sendmail,Apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)
tcp_syncookies
0
1
只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用 。当出现syn等候队列出现溢出时象对方发送syncookies 。目的是为了防止syn flood攻击 。
tcp_stdurg
0
0
使用 TCP urg pointer 字段中的主机请求解释功能 。大部份的主机都使用老旧的 BSD解释,因此如果您在 linux 打开它﹐或会导致不能和它们正确沟通 。
tcp_max_syn_backlog
1024
16384
对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目 。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128 。如果服务器经常出现过载﹐可以尝试增加这个数字 。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接 。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和Accept()),是用另一个队列单独存放半打开连接 。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明)
tcp_window_scaling
1
1
该文件表示设置tcp/ip会话的滑动窗口大小是否可变 。参数值为布尔值,为1时表示可变,为0时表示不可变 。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323) 。(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0)
tcp_timestamps
1
1
Timestamps 用在其它一些东西中﹐可以防范那些伪造的 sequence 号码 。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的) 。Timestamp 会让它知道这是个 '旧封包' 。(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项 。)
tcp_sack
1
1
使用 Selective ACK﹐它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态 。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段) 。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用 。)
tcp_fack
1
1
打开FACK拥塞避免和快速重传功能 。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)[这个是TCP连接靠谱的核心功能]
tcp_dsack
1
1
允许TCP发送"两个完全相同"的SACK 。
tcp_ecn
0
0
TCP的直接拥塞通告功能 。
tcp_reordering
3
6
TCP流中重排序的数据报最大数量 。(一般有看到推荐把这个数值略微调整大一些,比如5)
tcp_retrans_collapse
1
0
对于某些有bug的打印机提供针对其bug的兼容性 。(一般不需要这个支持,可以关闭它)
tcp_wmem:mindefaultmax
4096 16384 131072
8192 131072 16777216
发送缓存设置,min:为TCP socket预留用于发送缓冲的内存最小值 。每个tcp socket都可以在建议以后都可以使用它 。默认值为4096(4K) 。default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值 。默认值为16384(16K) 。max: 用于TCP socket发送缓冲的内存最大值 。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响 。默认值为131072(128K) 。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)


推荐阅读