`
javababy1
  • 浏览: 1171406 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ipconntrack中的一个BUG

阅读更多

好不容易搞个周六,被总监叫回去救火,郁闷啊!

说是BT下载有内存泄露。跑两小时就内核挂了。乱杀进程。

又出现了传说中的内存泄露。哎。只好回公司。

首先进行问题定位。

先看是内核的还是应用的。经过对SLABINFO进行分析。发现是内核中一个数据结构在狂飚。这个数据结构就是ip_conntrack_expect。

基本可以定位是内核问题了。一看这玩意就知道是netfilter这一块的事。然后对SVN进行查找。发现最近将对称NAT改成了锥形NAT。这个地方非常可疑。因为这个是要通过IPTABLES来操作NETFILTER的。

通过CGI将锥形NAT改成对称NAT再挂BT两小时,内存占用量没有任何内存增加的绩像。再改回来,内存在不断上涨。

在内核里找了下。发现ipt_CONENAT.c是源头。继续分析。发现里面有个timeout值为:

.timeout = 60*60*24*365*10, // never timeout

问题已经非常明朗了,做死的挂BT,大家都在挤,有的挤不过去,老化时间又是无限长,内存不暴涨才怪。

这时候已经晚上十一点了。找到原因后先规避。不让用户有设置全克隆NAT的配置接口。先发货。

等回过头再来改。要不然我明天的周日又要泡汤了。

本文档允许转载,但请注明出处。谢谢。

下面是对本文的一个补充。

上班后,花了将近三天时间对这个BUG进行修理。之前发现的超时值无限长不是问题的根源。而是申请的ip_conntrack_expect没有进行合理的释放。

其实这个BUG的解决其实很容易。就加了一行代码。但是在解这个BUG的过程中将整个ip_conntrack的过程给理了一遍。感觉还是有所收获的。其中比较有价值的地方就是tuple hash这个算法。tuple hash其实就一个正一个反,一个长度为二的数组,这当中根据IP和端口二元TUPLE得到一个哈希值。有兴趣的可以仔细看看代码,函数名我也记不起来了。也不想再去翻一遍再列出来了。另外ip_conntrack的架构其实也是依赖挂的几个HOOK。然后在这个过程中挂HOOK的优先级显得比较重要。因为这当中的层次结构还是比较明显的。每一层是对上一层的一个补充。

分享到:
评论

相关推荐

    管理代码走查中bug的插件

    Jupiter是一个管理代码走查中bug的插件,类似mantis中对bug的管理。不同的是mantis管理的是黑盒测试中的bug,Jupiter管理的是白盒测试中的bug。Jupiter并不负责查找bug,只是管理bug。走查人员建立走查任务,发现bug...

    bugfree bugfree bugfree bugfree bugfree

    bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree

    多轮测试BUG统计分析BUG趋势

    自己做的一个Bug统计图,大家相互参考,相互学习!

    mantis中的bug状态变化流程

    mantis中的bug状态变化流程。测试过程的bug状态变化流程

    mantis中bug描述说明

    Mantis是一个开源的Bug管理系统;基于PHP+MySQL,可以运行在Windows/Unix 平 台上。作为一个bug管理系统,其适用性是否符合实际工作的需要,这是至关重要的。

    bugfree使用指南

    BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统。简单实用、免费并且开放源代码。如何有效地管理软件产品中的Bug,是每一家软件企业必须面临的问题。遗憾的是很多软件企业还是...

    bugfree中的bug导出、导入功能

    bugfree 2.x版本 * 修改Bug的导出功能为xls格式 * 增加Bug通过Excel格式的导入功能 详情请看文件中readme文档。

    软件测试Bug和bug生命周期中的各种状态

    软件测试Bug和bug生命周期中的各种状态.doc

    bugfreee一个bug管理系统jsp+mysql

    自己编写的一个bug管理系统,增删改查功能都有,jsp+mysql

    bugfree2.0软件测试bug管理工具

    bugfree2.0是一款开源的bug管理工具,部署方便,只需下载xampp安装apche和mysql服务即可

    Bugfree使用手册

    BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统。简单实用、免费并且开放源代码(遵循GNU GPL)。 如何有效地管理软件产品中的Bug,是每一家软件企业必须面临的问题。遗憾的是很...

    Java Bug模式详解

    Java.Bug模式详解 第1章 混乱环境下的灵活方法 1.1 软件设计、实现和维护的趋势 1.1.1 对于稳定、安全 系统的需求增加 1.1.2 传统软件工程技 术的局限性 1.1.3 开放源代码的软 件项目的可利用性 1.1.4 对于...

    BUG管理规范BUG管理规范BUG管理规范

    BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范

    软件测试bug统计分析图表

    bug统计分析图表 bug统计分析图表 bug统计分析图表

    一个全是bug的项目-适用于小白学习

    这是个全是bug的项目,可以学习常见的问题,如何找错及改正 设计技术:jdbc,swt,oracle,java http://blog.csdn.net/q176782/article/details/71597988

    测试思考之bug缺陷趋势曲线图

    感触还是有的,现对于某几个相关的问题写了一些个人的想法,这次说的是关于bug曲线图的问题,  我们大部分人都知道所有的测试执行完成后,都会有测试报告,而测试报告的一个最关键的因素就是bug曲线图,一般都会有2...

    MantisBT是一个使用php和MySQL编写的bug跟踪系统

    MantisBT是一个使用php和MySQL编写的bug跟踪系统。 该工具可以安装在UNIX, Mac和Windows等。 如果你正在创建自己的软件,并有自己的网站,那么你需要追踪所有与你的软件相关的问题。 这就是你需要bug跟踪工具的地方...

    BugTracker.Net 3.5.7 中文版

    它有一个非常实用的截屏工具btnet_screen_capture,截图完毕后可直接上传bug信息。在对此工具进行简单配置以后,上传bug信息相当便捷高效。 如果您熟悉微软的开发工具,想找一款易用使用的bug管理工具,那么它非常...

    Go-git-bug嵌入在Git中的分布式bug跟踪器

    git-bug:嵌入在Git中的分布式bug跟踪器

Global site tag (gtag.js) - Google Analytics