Chinaunix

标题: 为什么会这样?TIME_WAIT有问题~~ [打印本页]

作者: fxdfbl    时间: 2004-03-11 05:40
标题: 为什么会这样?TIME_WAIT有问题~~
我开了个FTP下载服务器,用VSFTPD做下载~~

我限制了每个IP只有一个连接~,但用户大多用多线程工具下载,一个IP有很多的连接。我做过如下的测试:
我开一个端口,限制单线程,然后我用快车开10线程下载,虽然有九个线程连接不上~~但是我在服务器端用netstat -n | grep TIME_WAIT | grep :83 | wc -l查看时,得到的结果竟然是100多!!(而我只开一个线程的话,得到的结果就会是0)
在我的服务器高峰时,我查看到TIME_WAIT的状态竟然有16000多个!!当时我就差点晕了过去!

这会是什么原因造成的呢?是因为VSFTPD对TCP状态处理不当?还是因为系统内核对TCP的处理有误?

我应该会什么解决方法呢?

我现在想到的解决方法就是:
修改VSFTPD的源代码,增加一个设置变量~~,如果某个IP的连接失败次数多于这个数值,我就用IPTABLES封掉他的IP,同时用MYSQL禁止他的用户名(我是用MYSQL认证的),这样做,我不知道是我可耻呢还是那些使用多线程下载的用户可耻呢?

请大家给点意见,不然我的服务器早晚会被用户拖死去了~~
作者: fxdfbl    时间: 2004-03-11 10:56
标题: 为什么会这样?TIME_WAIT有问题~~
我找到了一个暂时缓解的方法~~~
我就是改了一下VSFTPD的源代码,把那个IP连接的错误代码改了一下,改为了550,这样多线程下软软件就不会一次又一次的重试连接了~~~,呵呵,再用 netstat-n | grep TIME_WAIT一看,这种连接数少了很多~
作者: jiaxing    时间: 2004-03-11 20:29
标题: 为什么会这样?TIME_WAIT有问题~~
老大,该哪里呀
作者: fxdfbl    时间: 2004-03-18 09:26
标题: 为什么会这样?TIME_WAIT有问题~~
改VSFTPD的源代码呀~~,你找到那个IP连接过多的回复客户端的信息把那里的代码改一下就好啦~~不过现在我不用VSFTPD了,改回用PUREFTPD,虽然PUREFTPD一个进程所占用内存多些,但它比VSFTPD要稳定得多,虽然我也很喜欢VSFTPD,但前两天被VSFTPD的僵尸进程气爆了~怎么也解决不了,所以就改了!PUREFTPD的我也是照样改代码实现减少TIME_WAIT的~~

其实也许还有一种方法应该是可以解决的~,那就是用IPTABLES,不过我用IPTABLES试了很久也没有得到我要的理想效果~~

我想进一步改一个内核源代码,把其中相关的TCP状态值减少一点,不知道会不会有效果~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2