--
高性能服务器研发与运营
http://groups.google.com/group/dev4server
1. 运行在什么硬件,什么操作系统?
2. 一般有多少 TCP 并发连接?
3. TCP 连接建立与销毁的频率是多少?长连接还是短连接?
4. TCP 连接超时关闭的比例是多少?
5. 多久算超时?几秒还是几分钟?
以上几点决定了"加锁"会不会导致性能瓶颈。
另外你说"性能太低"是测出来的还是纯粹感觉出来的?
On Sep 12, 2:14 pm, "lizp.net" <lizp....@gmail.com> wrote:
> 场景:
> 使用tcp,服务端需要对连接的活动状态进行管理,如果一个tcp连接规定时间内没有数据活动就要将其关闭。
> 想到的解决办法是:建立一个列表,保存所有活动连接,一个线程定时检测这个列表中的连接状态,如果超时关闭它,并从列表中删除。而如果这个连接正常关闭的话,也 需要从这个列表中删除。
> 问题:性能太低。对列表的操作需要加锁,当连接到来,加锁插入列表,连接关闭,加锁从列表中删除。检测如果超时也需要加锁从列表中删除。目前系统的响应要求达到 毫秒级,而且是大量的短连接,三次加锁操作感觉性能太低了,请问有什么更好的解决办法?
>
> 2010-09-12
>
> lizp.net
,还请兄台释疑。。如果合适,可以考虑每个 IO 线程管理自己的 TCP 连接超时,这样没有全局的连接表,每个线程一个连接表,别的线程看不到,超时的 timer
也在 IO 线程触发,这样也就不用加锁。
On Sep 13, 8:36 am, "lizp.net" <lizp....@gmail.com> wrote:
> 非常感谢您的问题。
> 1. 运行在什么硬件,什么操作系统?
> linux操作系统
> 2. 一般有多少 TCP 并发连接?
> 上万个
> 3. TCP 连接建立与销毁的频率是多少?长连接还是短连接?
> 短连接,频率是毫秒级
> 4. TCP 连接超时关闭的比例是多少?
> 不多,但是怕恶意连接上来
> 5. 多久算超时?几秒还是几分钟?
> 最多3秒吧。
>
> 实在不好意思,还没有测试,是感觉出来的,还请兄台释疑。。
>
> 2010-09-13
>
> lizp.net
>
> 发件人: Shuo Chen
> 发送时间: 2010-09-13 08:20:30
> 收件人: 高性能服务器研发与运营邮件列表
> 抄送:
> 主题: Re: 关于服务器的连接超时如何管理?
>
> 问题:
> 1. 运行在什么硬件,什么操作系统?
> 2. 一般有多少 TCP 并发连接?
> 3. TCP 连接建立与销毁的频率是多少?长连接还是短连接?
> 4. TCP 连接超时关闭的比例是多少?
> 5. 多久算超时?几秒还是几分钟?
> 以上几点决定了"加锁"会不会导致性能瓶颈。
> 另外你说"性能太低"是测出来的还是纯粹感觉出来的?
> On Sep 12, 2:14 pm, "lizp.net" <lizp....@gmail.com> wrote:> 场景:
> > 使用tcp,服务端需要对连接的活动状态进行管理,如果一个tcp连接规定时间内没有数据活动就要将其关闭。
> > 想到的解决办法是:建立一个列表,保存所有活动连接,一个线程定时检测这个列表中的连接状态,如果超时关闭它,并从列表中删除。而如果这个连接正常关闭的话,也 需要从这个列表中删除。
> > 问题:性能太低。对列表的操作需要加锁,当连接到来,加锁插入列表,连接关闭,加锁从列表中删除。检测如果超时也需要加锁从列表中删除。目前系统的响应要求达到 毫秒级,而且是大量的短连接,三次加锁操作感觉性能太低了,请问有什么更好的解决办法?
>
> > 2010-09-12
>
> > lizp.net
>
> --
> 高性能服务器研发与运营
> http://groups.google.com/group/dev4server
>
> 14.gif
> 2KViewDownload
--
高性能服务器研发与运营
http://groups.google.com/group/dev4server
每次新请求到达时,肯定要分配一个连接的,如果连接已用完,就把根据LRU算法,把最早的空闲连接关闭,这样,不用加锁,也可以保持加接不会被闲置用户
占用完.
On 9月13日, 上午11时37分, qiaojie <qiao...@gmail.com> wrote:
> 看你的描述连接之间应该是没有相关性的,这样的话可以开个线程池,每个线程分管一些连接,每个线程里面顺序处理,这样就不需要加锁了。
>
> 2010/9/12 lizp.net <lizp....@gmail.com>
>
>
>
> > 场景:
> > 使用tcp,服务端需要对连接的活动状态进行管理,如果一个tcp连接规定时间内没有数据活动就要将其关闭。
>
> > 想到的解决办法是:建立一个列表,保存所有活动连接,一个线程定时检测这个列表中的连接状态,如果超时关闭它,并从列表中删除。而如果这个连接正常关闭的话,也-需要从这个列表中删除。
>
> > 问题:性能太低。对列表的操作需要加锁,当连接到来,加锁插入列表,连接关闭,加锁从列表中删除。检测如果超时也需要加锁从列表中删除。目前系统的响应要求达到-毫秒级,而且是大量的短连接,三次加锁操作感觉性能太低了,请问有什么更好的解决办法?
>
> > 2010-09-12
> > ------------------------------
> > lizp.net
>
> > --
> > 高性能服务器研发与运营
> >http://groups.google.com/group/dev4server- 隐藏被引用文字 -
>
> - 显示引用的文字 -
--高性能服务器研发与运营
http://groups.google.com/group/dev4server
--高性能服务器研发与运营
http://groups.google.com/group/dev4server
> --
> 高性能服务器研发与运营
> http://groups.google.com/group/dev4server