Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29337196
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-03-26 19:43:53

存在大量短连接的情况下:
Linux的TCP栈一般都会生成大量的TIME_WAIT 状态的socket。
  
你可以用下面的命令看到:
  netstat -ant| grep -i time_wait
  有时候,这个数目是惊 人的:
  netstat -ant|grep -i time_wait |wc -l
  可能会超过三四万。
 
这个时候,我们需要修改 linux kernel 的 tcp time wait的时间.
sysctl 参数:/proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒,
很多网上的资料都说将这个数值设置低一些就可以减少netstat 里面的TIME_WAIT状态,但是这个说法是错误的。
经过认真阅读Linux的内核源代码,我们发现这个数值其实是输出用的,修改之后并没有真正的读回内核中进行使用,而内核中真正管用的是一个宏 定义,在 $KERNEL/include/net/tcp.h里面,有下面的行:
  #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
  * state, about 60 seconds */
  而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为:
   #define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT
  * state, about 60 seconds */
  然后重新编译内核重启系统即可发现短连接造 成的TIME_WAIT状态大大减少:
  netstat -ant | grep -i time_wait |wc -l
  一 般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度。

说明:
1、短连接
通常短连接是这样:连接->传输数据->关闭连接 [处理完了之后就马上关闭]
那什么是长连接?一般长连接相对短连接而言的,长连接在传输完数后不关闭连接,而不断的发送包保持连接等待处理下一个数据包。
such as: 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。[长久保持连接非常耗资源 有关长连接可以参考我另一篇文章有关长连接应用的文章!]

那什么时候用短连接呢?
一般长连接用于少数client-end  to server-end的频繁的通信,例如:数据库的连接用长连接,
[一般大型网站的数据库连接使用长连接 有关于长连接报异常可以查看另一篇文章有关mysql_ping]

 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千 上万甚至上亿客户端的连接用短连接会更省一些资源。

结论:
1、频繁的数据库操作使用长连接!避免过度的通讯导致了socket错误。
2、WEB服务的话因为为了避免过多地耗资源所以采用了短连接。就会出现如上的问题了!


2、编译内核[没有做过测试!
三、编译源码

cd /usr/src/linux
make mrproper
接下来可以选择下面的一个命令来配置内核:

'make config' - 适合于慢速的远程终端连接
'make menuconfig' - 适合于高速的远程终端或者本机
'make xconfig' - 在 X11 窗口上
'make oldconfig' - 采用以前的 .config 文件 (升级时十分有用)

然后,根据菜单仔细选择合适的配置,删除你的系统不需要的配置,内核越小,系统运行越快。配置完毕后,存盘退出。输入:
make dep ; make bzImage ; make modules
make modules_install

拷贝 boot 文件,

cp /usr/src/linux/arch/i386/boot/bzImage /boot/kernel-2.4.19
/boot 下面的文件名可以随意取,但是 kernel-2.4.19 比较简洁明了,容易记忆。

四、配置 LILO

cd /etc
修改 lilo.conf ,文件结尾处添加:

image=/boot/kernel-2.4.19
label=linux-2.4.19
read-only
root=/dev/hda1

重新运行 lilo

重新启动机器,如果能正常运行的话,那么恭喜你,成功了。
如果有问题的话,把 default 修改为旧的内核版本,重新运行 lilo 就可以。
然后,重新编译内核:
cd /usr/src
make clean

重新配置,检查可能存在的问题。

安装补丁
安装补丁十分的简单,就只要一步:
cd /usr/src
patch -p0 < patch-2.4.19
阅读(1027) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

hkebao2010-05-25 09:15:43

要多学习点东西