阅读更多

31顶
1踩

编程语言

原创新闻 解决ruby内存泄漏的超级大补丁发布啦

2008-12-22 12:40 by 见习编辑 robbin 评论(12) 有8908人浏览
JavaEye在12月初发布了新闻ruby内存泄漏的罪魁祸首 - 幽灵指针,介绍了当前Ruby解析器内存泄漏的根本原因,并且透露了Brent Roman正在打算给ruby提供补丁程序解决内存泄漏问题。

如今Brent Roman的超级大补丁终于发布!该超级大补丁命名为:“1.8.7-p72 MBARI Patch”。因为这个补丁是给Ruby当前最广泛使用的生产环境的版本ruby 1.8.7-p72版本提供的,而Brent Roman本人在Monterey Bay Aquarium Research Institute工作,因此该补丁被成为MBARI patch。

MBARI补丁总共包含了6个补丁文件,他们分别是:

1、MBARI1.patch: 修复Ruby多线程Continuations的bug导致的段地址错误和内存泄漏
2、MBARI2.patch: 修改Ruby多线程的栈帧分配策略,解决多线程栈帧分配策略导致的内存泄漏
3、MBARI3.patch: 修复幽灵指针造成的Ruby内存泄漏。
4、MBARI4.patch: 修复Ruby的eval()方法调用造成的大量内存泄漏
5、MBARI5.patch: 修复Ruby的异常处理的代码跳转造成的内存泄漏
6、MBARI6.patch: 提供了Method和Proc对象的source_location()方法

根据Brent Roman自己对ruby自带的测试套件测试的结果表明,应用该补丁以后,内存泄漏问题有极大改善。

       版本                     初始内存    结束内存       耗时
未打补丁1.8.7-p72:      30MB             97MB         92 seconds
打了补丁1.8.7-p2:        30MB            57MB        100 seconds

该测试套件执行完毕以后,内存占用从97MB下降到57MB,效果十分明显!

目前MBARI Patch还处于alpha阶段,Brent Roman本人的开发环境是Linux 32bit,GCC 4.3.2,他呼吁更多人帮助他测试该补丁文件,在各种不同环境下测试,向他提交bug,便于他更好的完善这个内存泄漏补丁。

安装MBARI补丁很简单:

1、下载ruby 1.8.7-p72,并且解压缩
2、下载MBARI补丁,并且解压缩
3、执行命令:MBARIp72patches/apply  ruby-1.8.7-p72 打补丁
4、编译ruby
CFLAGS="-O2 -fno-stack-protector -mpreferred-stack-boundary=2" ./configure
make && make install


如果是gcc3.3版本,要去掉 -fno-stack-protector编译参数;如果是64位机器,-mpreferred-stack-boundary=4才行。

然后 ruby -v  应该显示:

1.8.7 MBARI 6 on patchlevel 72


应用该补丁在JavaEye服务器上面简单的测试对比如下:

ruby 1.8.7 p72        fcgi进程占用物理内存129MB
ruby 1.8.7(gc patch)  fcgi进程占用物理内存176MB
ruby 1.8.7 MBARI      fcgi进程占用物理内存99MB

效果还是比较明显的,详细的性能测试报告请看:

ruby MBARI大补丁性能评测报告
31
1
评论 共 12 条 请登录后发表评论
12 楼 wosmvp 2008-12-23 09:18

就等
引用
让大家去实际测试了
11 楼 tangyuanjian 2008-12-22 21:19
1.86可以打嘛?
10 楼 hozaka 2008-12-22 20:31
PPC, Mac OS X 10.5.6 下提示 preferred-stack-boundary 无效参数……
9 楼 庄表伟 2008-12-22 19:49
嗯,继续等待更大的合并后补丁
8 楼 robbin 2008-12-22 18:03
花花公子 写道

这个和ruby GC的补丁一起作用的效果不知道会怎么样。

两个不能同时打,否则打不上,我已经给Brent写了邮件,建议他的patch把Railsbench的GC patch给merge进来,哈哈。我们等好消息吧。
7 楼 robbin 2008-12-22 18:02
mccxj 写道

注意到这句了。。。Note that some older versions of gcc did not support (or need) the -fno-stack-protector option.It should be omitted from the CFLAGS= in this case.

我给Brent发了邮件,他回复说gcc3.3不需要 -fno-stack-protector,默认就是disable的,去掉它编译就好。

现在的问题是64位机器上"-mpreferred-stack-boundary=2"这个参数是不行的,必须是4。我已经报告给Brent了,等他解决吧。不过即使是这样,我用JavaEye网站代码的Rails测试结果表明,内存占用有非常明显的下降。

接下来等我有空再测试一下执行性能的影响,如果都没有问题,我就准备上到JavaEye网站服务器,让大家去实际测试了,哈哈。
6 楼 花花公子 2008-12-22 17:26
这个和ruby GC的补丁一起作用的效果不知道会怎么样。
5 楼 花花公子 2008-12-22 17:25
robbin 写道

花花公子 写道64位编译的时候报错误 -mpreferred-stack-boundary=2 必须在4~16当中,用了4感觉没什么改善。你怎么测试是否有改善?

没有测试,全靠感觉。可以考虑进行大规模并发测试,看看测试进行中mongrel或者fcgi重启次数。如果测试没有跑到内存泄露非常严重的地方,也会看不出什么结果。
4 楼 mccxj 2008-12-22 17:08
注意到这句了。。。
Note that some older versions of gcc did not support (or need) the -fno-stack-protector option.
It should be omitted from the CFLAGS= in this case.
3 楼 mccxj 2008-12-22 17:05
在gcc3.4.6 configure过不去。。。继续调整
2 楼 robbin 2008-12-22 16:11
花花公子 写道

64位编译的时候报错误 -mpreferred-stack-boundary=2 必须在4~16当中,用了4感觉没什么改善。


你怎么测试是否有改善?
1 楼 花花公子 2008-12-22 14:28
64位编译的时候报错误 -mpreferred-stack-boundary=2 必须在4~16当中,用了4感觉没什么改善。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • ruby MBARI大补丁性能评测报告

    JavaEye之前的新闻[url=http://www.iteye.com/news/4407-ruby-memory-leak-culprit---the-ghost-references-to-stack]ruby内存泄漏的罪魁祸首 - 幽灵指针[/url]详细分析了当前Ruby官方版本(MRI版本)内存泄漏的原因。...

  • 关于内存管理

    <br />--------------------------- java 堆与栈(内存分配策略) --------------------------- 今天复习了一下这些知识,顺便做了下笔记.  寄存器:最快的存储区, 由编译器根据需求进行...

  • 在Ruby旧版本上进行升级

    由于ruby的内存泄漏很严重,我在网上也找到了不少资料,为了利用已有的成果(打补丁什么地:解决ruby内存泄漏的超级大补丁发布啦 ),我就来了个蛮力ruby版本升级。 原先的系统环境 写道 原先的系统各个工具均来自...

  • 优化Debian/Ubuntu下的ruby

    我们都知道Debian/Ubuntu通过apt-get安装的ruby包很慢(参考:各种Ruby实现的性能评测修正版本 ) ...内存泄漏的超级大补丁发布啦 )   但是自己编译的ruby不能被dpkg -l识别,debian/ubu...

  • XXX高校信息安全服务解决方案

    XXX高校网络安全服务解决方案 目录 XXX高校网络安全服务解决方案 1.综述 1.1.项目背景 1.2.项目目标 1.3.项目范围 1.4.安全需求分析 2.安全服务概述 2.1.安全服务的必要性 2.2.安全服务原则 2.3.安全服务方针 3. ...

  • 内网备忘录(超级全)

    win提权辅助工具,原理主要通过systeminfo补丁信息比对漏洞库 工具链接  https://github.com/GDSSecurity/Windows-Exploit-Suggester linux提权辅助 https://github.com/jondonas/linux-exploit-suggester-2 ...

  • Linux调试工具

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。         Linux下的调试工具   随着 XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿...

  • 1 华为鲲鹏-HCIP备考-计算机系统20+云上开发9

    分数: 1 计算机系统:20 2 鲲鹏应用云上开发:9 3 高阶鲲鹏代码移植:23 4 鲲鹏应用发布:18 5 鲲鹏应用性能优化:23 6 鲲鹏应用开发实践:7 0 参考: 鲲鹏HCIP练习01答案_numa-aware亲和性优化是一种硬件加速...

  • rp:linux debug tools - 摄心神,致虚极,守静笃

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。         Linux下的调试工具   随着XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿于...

  • 【ARM-Linux开发】linux下代码调试

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。         Linux下的调试工具   随着 XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿于其中的测试工作,经过...

  • linux debug tools

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。 Linux下的调试工具   随着 XP 的流行,人们越来越注重软件的前期设计...

  • linux调试工具

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。 Linux下的调试工具   随着 XP 的流行,人们越来越注重软件的前期设计...

  • c/c++ linux调试工具

    ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄漏。 Linux下的调试工具   随着 XP 的流行,人们越来越注重软件的前期设计...

  • 无线电能传输中电动汽车充电的Matlab与Maxwell仿真:线圈结构与补偿拓扑优化

    内容概要:本文详细介绍了无线电能传输技术在电动汽车充电中的应用,特别是在Matlab和Maxwell中的仿真过程。首先讨论了SS补偿拓扑的Matlab仿真,展示了如何设置线圈参数、进行谐振匹配以及通过相量分析判断软开关状态。接着探讨了Maxwell中DD线圈的3D电磁场仿真,强调了自定义网格划分和涡流场计算的重要性。随后,文章深入研究了多线圈阵列仿真,揭示了不同线圈布局对耦合系数的影响,并提出了LCC补偿拓扑的应用。此外,文中还分享了许多实用技巧,如避免常见错误、优化仿真参数以及处理实际测试中的问题。 适合人群:从事无线电能传输研究的技术人员、研究生及以上学历的研究人员。 使用场景及目标:适用于需要深入了解无线电能传输技术及其仿真的研究人员和技术开发者,旨在帮助他们掌握Matlab和Maxwell的具体应用,提高仿真精度和效率。 其他说明:文章不仅提供了详细的代码示例和仿真步骤,还分享了作者的实际经验和教训,使读者能够更好地理解和应对仿真过程中遇到的问题。

  • 用户增删改查功能的前端页面,添加了vue渲染代码

    用户增删改查功能的前端页面,添加了vue渲染代码。

  • 计算机课程设计相关资源

    计算机课程设计相关资源

  • 基于51单片机protues仿真的猜数字游戏(仿真图、源代码、AD原理图、流程图)

    基于51单片机protues仿真的猜数字游戏(仿真图、源代码、AD原理图、流程图) 猜数字游戏 1、通过随机数实现该游戏; 2、按下K1键启动游戏并随机生成一个0~9的数字 3、通过矩阵按键输入你的数字,输入数字小于随机生成的数字则显示小于该数,大于的时候显示大于该数,直到相等为止。 4、仿真图、源代码、AD原理图、流程图;

  • 基于MATLAB的FOC滑膜观测器与锁相环(MATLAB 2021b)实现及硬件移植注意事项

    内容概要:本文详细介绍了利用MATLAB 2021b搭建的FOC滑膜观测器(SMO)与锁相环(PLL)的仿真模型及其在M4硬件平台上的实现方法。文中首先展示了SMO的核心代码,解释了如何通过滑模面计算和符号函数处理来估算反电动势,并讨论了PLL用于速度提取的具体实现。接着探讨了仿真环境中直接0速闭环启动的效果以及实际硬件实现时所需的开环启动策略。此外,文章还分享了多个调试过程中遇到的问题及解决方案,如相位跳变、高频振荡、电流环参数调整等。 适合人群:从事电机控制研究的技术人员,尤其是对无感FOC感兴趣的工程师。 使用场景及目标:适用于希望深入了解FOC滑膜观测器和锁相环的工作原理并尝试将其应用于实际项目的开发者。目标是掌握SMO+PLL组合的设计思路和技术细节,同时了解硬件移植时需要注意的实际问题。 其他说明:文中提供了大量实用的代码片段和调试经验,对于想要快速入门或优化现有系统的读者非常有帮助。特别强调了仿真与现实之间的差异,提醒读者注意参数选择和滤波器设计等方面的不同之处。

  • 汽车美容员工手册.doc

    汽车美容员工手册.doc

  • 基于PSO算法的配电网分布式光伏选址定容优化及其Matlab实现

    内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。

Global site tag (gtag.js) - Google Analytics