`
javababy1
  • 浏览: 1226424 次
  • 性别: 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的优先级显得比较重要。因为这当中的层次结构还是比较明显的。每一层是对上一层的一个补充。

分享到:
评论

相关推荐

    bugzilla中导出的BUG列表查看方法

    Bugzilla 是一个流行的缺陷追踪系统,用于跟踪和管理软件开发中的错误和缺陷。Bugzilla 提供了多种方式来导出 BUG 列表,以便于查看和分析。在本文中,我们将介绍如何从 Bugzilla 中导出 BUG 列表,并将其转换为 ...

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

    软件测试Bug和bug生命周期中的各种状态 软件测试是软件开发过程中的一个重要组成部分...软件测试中的 Bug 生命周期是一个复杂的过程,需要测试人员、开发人员和项目负责人之间的紧密合作,以确保软件的质量和可靠性。

    bugfreee一个bug管理系统jsp+mysql

    总的来说,Bugfree是一个实用的bug管理系统,它充分利用了JSP的动态网页能力和MySQL的数据管理优势,为软件开发团队提供了一个便捷的工具,以更好地追踪、管理和解决项目中的bug,从而提升整个项目的质量和效率。...

    版本验收与放行标准,主要明确了软件测试中对BUG等级的制定与分析

    版本验收与放行标准是软件测试中的一种重要标准,旨在确保软件的质量和可靠性。本标准对软件测试中的BUG等级进行了明确的规定和分析,并结合软件放行的评价标准。 一、版本验收标准 版本验收标准是软件测试中对...

    bugfree中的bug导出、导入功能

    在软件开发过程中,Bug管理是一项至关重要的任务,它确保了代码质量的提升和项目进度的顺利进行。Bugfree是一款优秀的开源缺陷跟踪系统,它提供了便捷的Bug管理功能,包括Bug的创建、分配、跟踪以及本次我们重点关注...

    bugfree,bug管理

    在软件开发中,bug是不可避免的,BugFree提供了一个高效的平台来记录、跟踪、修复这些问题,确保项目的顺利进行。 BugFree的主要功能包括: 1. **问题创建**:用户可以创建新的bug报告,包括详细描述bug的现象、...

    软件测试BUG清单分析说明

    如果一个BUG可以轻松地被重现,这表明问题可能具有普遍性,需要立即解决。测试人员应记录每次尝试重现BUG的难度,并据此给出相应的分数。例如,每次操作都能立即复现的BUG可得1分,而难以复现的BUG则得分更高。这样...

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

    总的来说,BugFree 2.0 是一个实用的缺陷管理工具,尤其适合中小型企业或开源项目使用。通过有效的缺陷跟踪和团队协作,它能够帮助提升软件质量,优化开发流程。对于初次接触BugFree的用户,推荐先了解其基本概念和...

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

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

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

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

    BugFree3.0.4导出BUG操作步骤

    BugFree是一个开源的缺陷跟踪系统,它允许项目团队对软件开发中的错误(bug)进行记录、跟踪和管理。BugFree3.0.4是BugFree的一个版本,导出BUG的操作步骤通常涉及到以下知识点: 1. BugFree系统环境配置:BugFree...

    软件测试bug统计分析图表

    在这个过程中,bug统计分析图表成为了一种有效的数据可视化手段,帮助测试团队和项目管理者快速理解bug的分布情况、严重程度以及解决进度,从而做出更精准的决策。 ### 二、bug统计分析图表的作用 1. **可视化bug...

    mantis中的bug状态变化流程

    Mantis是一款开源的缺陷跟踪系统,它用于管理软件开发中的错误报告或称为“bug”的状态。在Mantis中,bug的状态变化流程对于整个项目的测试和运维过程至关重要,因为它确保了问题的有效跟踪和解决。以下是对Mantis中...

    CMM5定义测试中的bug分类

    因此,笔者提出了一个新的 bug 优先级划分方法,根据 bug 的严重性和影响程度对其进行分类和优先级划分。例如,对于新建编辑删除功能中的 bug,笔者将新建功能的该 bug 置于优先级 1 中,编辑删除 bug 则置于优先级 ...

    Bug报告模板.docx

    Bug 报告模板 在软件测试和质量保证过程中,_bug 报告模板是一种非常重要的文档...Bug 报告模板是一个非常重要的文档工具,它可以帮助软件开发团队更好地记录和追踪软件中的缺陷和错误,从而提高软件的质量和可靠性。

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

    `Go-git-bug`是一个创新的开源项目,它将bug跟踪功能直接嵌入到Git的工作流程中,为开发者提供了一种更为紧密集成的缺陷管理方式。这个工具充分利用了Go语言的强大性能和简洁特性,以及Git的分布式版本控制系统的...

    管理代码走查中bug的插件

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

    BUG记录模版(带汇总、统计、分析功能)

    "BUG记录模版(带汇总、统计、分析功能)"是一个专门设计用于提高缺陷管理效率的文档模版,旨在为开发人员、测试人员和项目经理提供一个统一的标准格式,以便更有效地处理问题。 首先,让我们详细了解一下BUG模版的...

Global site tag (gtag.js) - Google Analytics