Chinaunix首页 | 论坛 | 博客
  • 博客访问: 812879
  • 博文数量: 167
  • 博客积分: 7173
  • 博客等级: 少将
  • 技术积分: 1671
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-04 23:07
文章分类

全部博文(167)

文章存档

2018年(1)

2017年(11)

2012年(2)

2011年(27)

2010年(88)

2009年(38)

分类: LINUX

2010-05-05 09:36:20

下载服务器中 tcp内核参数的一些调整

最近的下载服务器出现两个问题:1.out of socket memory 2.last_ack状态过多。(我是使用nginx做下载容器)
1. 一看这个情况就知道发送的数据包超过了socket memory的设置;
    通过以下几个内核参数对你的应用进行调控:(看字面就知道每个参数的意思了)
  net.core.wmem_default = 8388608
  net.core.rmem_default = 8388608
  net.core.rmem_max= 16777216
  net.core.wmem_max= 16777216
  net.ipv4.tcp_mem = 94500000 94500000 94500000

随着这些参数的调整可能出现以下的情况:(通过dmesg进行观察)
possible SYN flooding on port 80. Sending cookies
通过调整该net.ipv4.tcp_syncookies = 1参数 控制syn的状态

dmesg 中 出现XX messages

通过观察/proc/net/sockstat 中

sockets: used 9013
TCP: inuse 12649 orphan 3628 tw 5063 alloc 12666 mem 64324

的 orphan;然后进行调控,net.ipv4.tcp_max_orphans = 262144

tcp_max_orphans系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。

2.lack_ack过多
主要是调节 tcp_orphan_retries
/proc/sys/net/ipv4/tcp_orphan_retries
本端试图关闭TCP 连接之前重试多少次。缺省值是7,相当于50秒~16分钟(取决于RTO)。如果你的机器是一个重载的WEB服务器,你应该考虑减低这个值,因为这样的套 接字会消耗很多重要的资源。参见tcp_max_orphans。
同时根据其他情况进行调整其他参数。

PS:

在 ftp的情况下调整到2已经收到明显的效果了。


/proc/sys/net/ipv4/tcp_keepalive_time当 keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。
/proc/sys/net/ipv4 /tcp_keepalive_intvl当探测没有确认时,重新发送探测的频度。缺省是75秒。
/proc/sys/net/ipv4 /tcp_keepalive_probes在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以 tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应。


/proc/sys/net/ipv4/tcp_max_orphans
系 统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单 的 DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。 This limit exists only to prevent simple DoS attacks, you _must_ not rely on this or lower the limit artificially, but rather increase it (probably, after increasing installed memory), if network conditions require more than default value, and tune network services to linger and kill such states more aggressively. 让我再次提醒你:每个孤儿套接字最多能够吃掉你64K不可交换的内存。

/proc/sys/net/ipv4/tcp_orphan_retries
本端试图关闭TCP连接之前重试多少次。缺省值是7,相当于50秒~16分钟(取决于RTO)。如果你的机器是一个重载的WEB服务器,你应该考虑减低这 个值,因为这样的套接字会消耗很多重要的资源。参见tcp_max_orphans。

/proc/sys/net/ipv4/tcp_max_syn_backlog
记 录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。如果服务器不堪重负,试 试提高这个值。注意!如果你设置这个值大于1024,最好同时调整include/net/tcp.h中的TCP_SYNQ_HSIZE,以保证 TCP_SYNQ_HSIZE*16 ≤tcp_max_syn_backlo,然后重新编译内核。

/proc/sys/net/ipv4/tcp_max_tw_buckets
系 统同时保持timewait套接字的最大数量。如果超过这个数字,time-wait套接字将立刻被清除并打印警告信息。这个限制仅仅是为了防止简单的 DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,如果网络实际需要大于缺省值,更应该增加这个值(如果增加了内存之后)。
阅读(1672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~