IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Linux kernel 性能压力下的优化实践(V0.1)

龙浩的blog 2012-04-07 15:09:27 累计浏览 3,620 次
本机暂存

      注:本文发布到微博后,收到质疑,先摘录如下,请读者自鉴:http://weibo.com/1646218964/yePM7zqtR

      陈尔冬ip_conntrack那东西就不该用 如非有依赖此规则的iptables规则就直接卸载 还调啥参数 特别是就别指导没载入的童鞋也手动载入了 害人么

      orroz我操,人家明明没加载ip_conntrack模块,还非要加载上再去把限制调大。这不是二是什么?

      ========================= 正文分割线 ========================

      做benchmark测试的过程中,总是会涉及到linux操作系统底层的设置导致无法充分利用机器的性能,在调试的过程中,不少资料没能和linux kernel版本对应上导致一些参数的设置错误。根据现有服务器的硬件条件和软件版本做相关优化,把一些实践的心得分享出来。

     Kernel version : 2.6.32-71.el6.x86_64

     Cpu:Intel(R) Xeon(R) CPU    E5606  @ 2.13GHz

     Memory:8G

     Release notes : v0.1  2012-03-31  句柄数  , 网络参数

通过ulimit改善系统性能

     [longhao@longhao etc]# modprobe  ip_conntrack

    后续说明:

          -CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)

          -HASHSIZE 存储跟踪连接条目列表的哈西表的大小

     CONNTRACK_MAX和HASHSIZE的默认值

           一般来说,CONNTRACK_MAX和HASHSIZE都会设置在“合理”使用的值上,依据可使用的RAM的大小来计算这个值。

     CONNTRACK_MAX的默认值

          在i386架构上,CONNTRACK_MAX = RAMSIZE (以bytes记) / 16384 =RAMSIZE (以MegaBytes记) * 64,因此,一个32位的带512M内存的PC在默认情况下能够处理512*1024^2/16384 = 512*64 = 32768个并发的netfilter连接。

          但是真正的公式是:CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32) 这里x是指针的bit数,(例如,32或者64bit)

     请注意:

          -默认的CONNTRACK_MAX值不会低于128

          -对于带有超过1G内存的系统,CONNTRACK_MAX的默认值会被限制在65536(但是可以手工设置成更大的值)

     HASHSIZE的默认值

          通常,CONNTRACK_MAX = HASHSIZE * 8。这意味着每个链接的列表平均包含8个conntrack的条目(在优化的情况并且CONNTRACK_MAX达到的情况下),每个链接的列表就是一个哈西表条目(一个桶)。

          在i386架构上,HASHSIZE = CONNTRACK_MAX / 8 =RAMSIZE (以bytes记) / 131072 = RAMSIZE (以MegaBytes记) * 8。举例来说,一个32位、带512M内存的PC可以存储512*1024^2/128/1024 =512*8 = 4096 个桶(链接表)

          但是真正的公式是:HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (以bytes记) / 131072 / (x / 32)这里x是指针的bit数,(例如,32或者64bit)

     请注意:

          -默认HASHSIZE的值不会小于16

          -对于带有超过1G内存的系统,HASHSIZE的默认值会被限制在8192(但是可以手工设置成更大的值)

    参考资料:

  • Conntrack tuning
  • kernel nf_conntrack: table full, dropping packet 解决办法
  • 不要盲目增加ip_conntrack_max-理解Linux内核内存
  • 同分类推荐文章

    1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
    2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
    3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

    查看更多 DevOps 文章 →

    建议继续学习

    1. WEB系统需要关注的一些点 (累计阅读 18,218)
    2. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
    3. 我的 RHCA 之路 (累计阅读 14,012)
    4. Linux内存点滴 用户进程内存空间 (累计阅读 13,228)
    5. 给程序员新手的一些建议 (累计阅读 13,088)
    6. Linux 性能监控、测试、优化工具 (累计阅读 13,011)
    7. 关于linux内存free的一些事情 (累计阅读 12,867)
    8. ps - 按进程消耗内存多少排序 (累计阅读 12,686)
    9. Google怎么用linux (累计阅读 12,580)
    10. Linux Used内存到底哪里去了? (累计阅读 11,866)