阅读更多

31顶
1踩

编程语言

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

2008-12-22 12:40 by 见习编辑 robbin 评论(12) 有8857人浏览
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 的流行,人们越来越注重软件的前期设计...

  • 原生js图片圆形排列按钮控制3D旋转切换插件.zip

    原生js图片圆形排列按钮控制3D旋转切换插件.zip

  • 类似c++数组的python包

    内含二维数组与三维数组,分别为list2nd,list3rd

  • 原生js颜色随机生成9x9乘法表代码.zip

    原生js颜色随机生成9x9乘法表代码.zip

  • 原生js实现图片叠加滚动切换代码.zip

    原生js实现图片叠加滚动切换代码.zip

  • 【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM)TensorFlow

    【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM) 注意力机制是深度学习中的重要技术,尤其在序列到序列(sequence-to-sequence)任务中广泛应用,例如机器翻译、文本摘要和问答系统等。这一机制由 Bahdanau 等人在其论文《Neural Machine Translation by Jointly Learning to Align and Translate》中首次提出。以下将详细介绍这一机制的背景、核心原理及相关公式。 全局注意力机制(Global Attention Mechanism, GAM)由 《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》提出,是一篇针对计算机视觉任务提出的方法。这篇文章聚焦于增强深度神经网络中通道和空间维度之间的交互,以提高分类任务的性能。与最早由 Bahdanau 等人提出的用于序列到序列任务的注意力机制 不同,这篇文章的重点是针对图像分类任务,并未专注于序

  • 基于SpringBoot的“篮球论坛系统”的设计与实现(源码+数据库+文档+PPT).zip

    本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL数据库等;此文将按以下章节进行开发设计; 第一章绪论;剖析项目背景,说明研究的内容。 第二章开发技术;系统主要使用了java技术, b/s模式和myspl数据库,并对此做了介绍。 第三章系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。 第四章系统设计;对软件功能模块和数据库进行详细设计。 第五章系统总体设计;对系统管理员和用户的功能进行描述, 第六章对系统进行测试, 第七章总结心得;在论文最后结束章节总结了开发这个系统和撰写论文时候自己的总结、感想,包括致谢。

  • 毕业设计&课设_iOS 商城项目,含购物与商家管理功能,用 Sqlite,有账号示例,适合 iOS 开发练习.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics