LVS hash size解决4096个并发的问题
LVS 有个 connection hash table ,默认的 size 为 4096,可以通过以下命令得到:
# ipvsadm -ln
IP Virtual Server version 1.0.12 (size=4096)
简单地说,这个hash table 用于记录每个进来的连接及路由去向的信息。面对庞大的连接时,这个4096是远远不够的,这时就会产生冲突,然后hash table 就不断置换table 中的数据,系统的负荷就这样上来了。所以,很多调优文章都说,要把这个值调大。至于如何调大呢,好像必须重编译内核了。。。
我的是 centos 5.4 final ,利用 srpm 去重编译吧,使用当前系统的 config ,这样编译后的内核只不过是改变了 hash table 的值,并没有改变其它的东西。
下一个 kernel 的 srpm :http://mirrors.163.com/centos/5.4/os/SRPMS/kernel-2.6.18-164.el5.src.rpm
重编内核时,把原来的 config(/boot/config-2.6.18-164.el5) copy 覆盖 SOURCES/kernel-2.6.18-x86_64.config .
把第一行的
#
改为
# x86_64
同时,修改 CONFIG_IP_VS_TAB_BITS=12 (2的12次方,4096)为 CONFIG_IP_VS_TAB_BITS=20 。
然后 rpmbuild -ba -target=`uname -m` kernel-2.6.spec ,新编译出来的kernel-2.6.18-164.el5.x86_64.rpm 就在 RPMS/x86_64/ 里了。
rpm -Uvh 吧。
reboot 后,再 ipvsadm -ln 就可以看到
IP Virtual Server version 1.2.1 (size=1048576)
成功!
lvs 调优的文章通常会说,如果你的并发连接数是 200,keep alive 是200秒,那么hash table size 就应该设置为不要低于 200×200=40000 太多,2的15次方32768 就差不多了。不过,谁知道我们的需求是否会变呢?我一般都懒得算,直接开到最大,20 就是最大的了。
还需要注意一点,就是每个连接是要占用内存的,印象中是每个连接占用136 bytes ,尽管说 lvs 可以抗百万级别的连接,也要注意有没有足够的内存哦,呵呵。
来源:http://blog.helosa.org/2010/03/31/lvs-hash-size.html
建议继续学习:
- HashMap解决hash冲突的方法 (阅读:11226)
- 关于memcache分布式一致性hash (阅读:10685)
- MinHash原理与应用 (阅读:5838)
- 无锁HashMap的原理与实现 (阅读:5321)
- 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (阅读:4861)
- Ubuntu 下Hash校验和不符问题的解决 (阅读:4468)
- LVS & MySQL NDB Cluster (阅读:4046)
- 分布式系统hash策略 (阅读:3744)
- LVS & MySQL NDB Cluster (阅读:3712)
- 记一次LVS/Nginx环境下的访问控制 (阅读:3809)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:sbear 来源: 阿熊的窝
- 标签: 4096 hash LVS
- 发布时间:2012-10-26 00:13:54
- [67] 如何拿下简短的域名
- [65] Go Reflect 性能
- [62] Oracle MTS模式下 进程地址与会话信
- [60] IOS安全–浅谈关于IOS加固的几种方法
- [58] 图书馆的世界纪录
- [57] android 开发入门
- [56] 【社会化设计】自我(self)部分――欢迎区
- [50] 视觉调整-设计师 vs. 逻辑
- [50] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则