BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

1.8.x的新修复解决了内存泄漏问题并改进了性能

| 作者 Werner Schuster 关注 9 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2009年1月9日. 估计阅读时间: 2 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

就性能而言,目前Ruby 1.9.1和JRuby领导着Ruby的实现。然而由于种种原因,转到这两个实现中的任何一个都不是那么容易的事情,因为Ruby 1.9.x在有些地方与1.8.7不兼容,同时JRuby仍旧缺乏一些使用本地扩展的Ruby库。由于这个原因,MRI 1.8.x还会继续存在一段时间,那么我们可能对其性能的改进产生兴趣。

目前Brent Roman在一定程度上改进了Ruby 1.8.x MRI的性能。他正不断尝试着修复Ruby中的内存泄漏问题

基本的技术就是对Kurt Stephens所建议的一个问题的精化。它不仅消除了这行代码的泄漏问题:
loop {@x=callcc{|c|c}}
还消除了我们多线程机器人技术应用中的泄漏问题。过去我们所使用的Ruby进程在运行一天后常常达到20+MB,而现在已经降到了10MB以下。

正如其所示,泄漏是由GCC的优化所导致的:它与Ruby的旧式GC的交互很差劲

垃圾收集器的内存泄漏问题并不是它本身的错误。问题在于“C”机器栈(machine stack)中充满了对象引用。其主要原因是由于gcc编译器创建了过多大的stack frame而又没有对其初始化。用在Ruby解释器的核心递归表达式程序中的某些“C”构造会生成特别大而又稀疏的stack frame。函数rb_eval()就是最差劲的一个,它会为每次调用都创建KB大小的stack frame,而其又会调用自身几百次。这导致栈的容量急剧膨胀,经常充满了不再使用而又无法移除的对象引用。

Brent提供了一些修复(针对Ruby 1.8.7-patlevel72),目的在于解决这些问题。

当运行在真实世界的Rails应用上时,测试报告表明该修复对速度的提升效果很明显。同时也报告了一些问题,让我们对其拭目以待吧。

这些修复是开源(Ruby)社区对MRI改进的又一个证明。Mod_rails (或REE)已经是一个佐证了,它使得MRI的垃圾收集器更加友好(参见相关新闻以了解更多)。

MRI的性能在很大程度上取决于它的编译方式

今年你还打算继续使用Ruby 1.8.x么?如果是的话,理由呢?

查看英文原文:New Patches for 1.8.x Fix Memory Leaks And Improve Performance

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

这篇文章写的错误百出 by Fan Robbin

内存泄漏问题根本就不是GC优化导致的,而是幽灵指针引起的。

Brent Roman的MBARI patch也并非只能用在1.8.7上面,一旦该补丁被合并到trunk以后,他会后续提交1.9.1的patch。

这篇文章错误太多了,简直就是误导。看看我写的介绍吧:

ruby内存泄漏的罪魁祸首 - 幽灵指针

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

Re: 这篇文章写的错误百出 by Guo Xiaogang

注意没有人说是“GC优化导致的”,文中说的是“GCC优化”。可能大写有误导吧。

所谓“gcc optimizations”我想是指


[...]gcc compilers create overly large stack frames and do not initialize many values in them[...]

你所说的“幽灵指针”不就是来自这些没初始化的stack frames。这种做法最后怎么变成内存泄漏,你已经解释得很清楚。Brent的补丁说明里面也介绍得很清楚。

Re: 这篇文章写的错误百出 by Guo Xiaogang

差点忘了谢谢Robbin Fan。

多谢补充这两篇出色的介绍和1.9.1补丁的信息。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT