阅读更多

31顶
1踩

编程语言

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

2008-12-22 12:40 by 见习编辑 robbin 评论(12) 有8879人浏览
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界面的(多方法对比,PSNR,信息熵,GUI界面).rar

    MATLAB设计

  • c语言打字母游戏源码.zip

    c语言打字母游戏源码

  • c语言做的一个任务管理器.zip

    c语言做的一个任务管理器

  • JetBra-2021.1.x-重置.mp4.zip

    JetBra-2021.1.x-重置.mp4.zip

  • 小学班主任与家长沟通现状及改进策略研究

    内容概要:本文围绕小学班主任与家长沟通的现状进行了详尽分析,揭示了沟通方式不当、频率低、内容片面及理念不一致等问题,并基于访谈、文献研究及案例分析,提出了多元化的沟通方式、丰富沟通内容、讲究沟通艺术、转变家长观念和完善制度等多项策略,旨在提高家校合作的效能。 适合人群:从事小学教育教学的班主任、教师以及对家校合作感兴趣的教育工作者。 使用场景及目标:①通过本文提出的多种策略,改善小学班主任与家长之间的沟通;②促进家校互动,助力学生健康成长和发展;③推动教育领域的研究与发展。 阅读建议:本文详细阐述了沟通现状及具体问题,适合系统阅读。读者可根据实际情况,挑选适用于自身的沟通策略实施,并结合实例进行反思与改进。

  • WSL批量压缩MP4文件对应Shell脚本文件

    WSL批量压缩MP4文件对应Shell脚本文件

  • Java源码ssm框架的社区疫情防控管理系统-毕业设计论文-期末大作业.rar

    本项目是一个基于Java SSM框架的社区疫情防控管理系统,旨在通过信息化手段提升社区疫情防控的效率和准确性。系统集成了居民信息管理、健康监测、疫情上报、隔离管理等多项功能,能够实时跟踪和记录社区居民的健康状况,及时发现潜在的风险人员,并对其进行有效的隔离和管理。系统采用了Spring、Spring MVC和MyBatis三大框架技术,确保了系统的稳定性和扩展性。通过前端页面与后端逻辑的紧密配合,系统实现了数据的动态展示和交互操作,极大地方便了社区工作人员的日常工作。此外,系统还具备强大的数据统计和分析功能,能够帮助管理人员全面掌握社区的疫情动态,制定科学合理的防控措施。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

Global site tag (gtag.js) - Google Analytics