好不容易搞个周六,被总监叫回去救火,郁闷啊!
说是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 是一个流行的缺陷追踪系统,用于跟踪和管理软件开发中的错误和缺陷。Bugzilla 提供了多种方式来导出 BUG 列表,以便于查看和分析。在本文中,我们将介绍如何从 Bugzilla 中导出 BUG 列表,并将其转换为 ...
软件测试Bug和bug生命周期中的各种状态 软件测试是软件开发过程中的一个重要组成部分...软件测试中的 Bug 生命周期是一个复杂的过程,需要测试人员、开发人员和项目负责人之间的紧密合作,以确保软件的质量和可靠性。
总的来说,Bugfree是一个实用的bug管理系统,它充分利用了JSP的动态网页能力和MySQL的数据管理优势,为软件开发团队提供了一个便捷的工具,以更好地追踪、管理和解决项目中的bug,从而提升整个项目的质量和效率。...
版本验收与放行标准是软件测试中的一种重要标准,旨在确保软件的质量和可靠性。本标准对软件测试中的BUG等级进行了明确的规定和分析,并结合软件放行的评价标准。 一、版本验收标准 版本验收标准是软件测试中对...
在软件开发过程中,Bug管理是一项至关重要的任务,它确保了代码质量的提升和项目进度的顺利进行。Bugfree是一款优秀的开源缺陷跟踪系统,它提供了便捷的Bug管理功能,包括Bug的创建、分配、跟踪以及本次我们重点关注...
在软件开发中,bug是不可避免的,BugFree提供了一个高效的平台来记录、跟踪、修复这些问题,确保项目的顺利进行。 BugFree的主要功能包括: 1. **问题创建**:用户可以创建新的bug报告,包括详细描述bug的现象、...
如果一个BUG可以轻松地被重现,这表明问题可能具有普遍性,需要立即解决。测试人员应记录每次尝试重现BUG的难度,并据此给出相应的分数。例如,每次操作都能立即复现的BUG可得1分,而难以复现的BUG则得分更高。这样...
总的来说,BugFree 2.0 是一个实用的缺陷管理工具,尤其适合中小型企业或开源项目使用。通过有效的缺陷跟踪和团队协作,它能够帮助提升软件质量,优化开发流程。对于初次接触BugFree的用户,推荐先了解其基本概念和...
自己做的一个Bug统计图,大家相互参考,相互学习!
感触还是有的,现对于某几个相关的问题写了一些个人的想法,这次说的是关于bug曲线图的问题, 我们大部分人都知道所有的测试执行完成后,都会有测试报告,而测试报告的一个最关键的因素就是bug曲线图,一般都会有2...
BugFree是一个开源的缺陷跟踪系统,它允许项目团队对软件开发中的错误(bug)进行记录、跟踪和管理。BugFree3.0.4是BugFree的一个版本,导出BUG的操作步骤通常涉及到以下知识点: 1. BugFree系统环境配置:BugFree...
在这个过程中,bug统计分析图表成为了一种有效的数据可视化手段,帮助测试团队和项目管理者快速理解bug的分布情况、严重程度以及解决进度,从而做出更精准的决策。 ### 二、bug统计分析图表的作用 1. **可视化bug...
Mantis是一款开源的缺陷跟踪系统,它用于管理软件开发中的错误报告或称为“bug”的状态。在Mantis中,bug的状态变化流程对于整个项目的测试和运维过程至关重要,因为它确保了问题的有效跟踪和解决。以下是对Mantis中...
因此,笔者提出了一个新的 bug 优先级划分方法,根据 bug 的严重性和影响程度对其进行分类和优先级划分。例如,对于新建编辑删除功能中的 bug,笔者将新建功能的该 bug 置于优先级 1 中,编辑删除 bug 则置于优先级 ...
Bug 报告模板 在软件测试和质量保证过程中,_bug 报告模板是一种非常重要的文档...Bug 报告模板是一个非常重要的文档工具,它可以帮助软件开发团队更好地记录和追踪软件中的缺陷和错误,从而提高软件的质量和可靠性。
`Go-git-bug`是一个创新的开源项目,它将bug跟踪功能直接嵌入到Git的工作流程中,为开发者提供了一种更为紧密集成的缺陷管理方式。这个工具充分利用了Go语言的强大性能和简洁特性,以及Git的分布式版本控制系统的...
Jupiter是一个管理代码走查中bug的插件,类似mantis中对bug的管理。不同的是mantis管理的是黑盒测试中的bug,Jupiter管理的是白盒测试中的bug。Jupiter并不负责查找bug,只是管理bug。走查人员建立走查任务,发现bug...
"BUG记录模版(带汇总、统计、分析功能)"是一个专门设计用于提高缺陷管理效率的文档模版,旨在为开发人员、测试人员和项目经理提供一个统一的标准格式,以便更有效地处理问题。 首先,让我们详细了解一下BUG模版的...