`
hozaka
  • 浏览: 39264 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Gettext 的内存泄漏 / Memory Leaks in Gettext

阅读更多
Rails 支持 L10N 的插件并不算非常多,而其中的 Gettext 由于 GNU 的缘故应该算是比较普遍的了。相信很多人在对 Rails 项目进行本地化的时候都会接触过这个插件。

但是不知道有多少人在部署 Rails 项目的时候留意过 mongrel 的内存使用情况(这里以 mongrel 举例仅仅是因为比较常见,其他部署方式也会有类似的情况)。至少在我的项目中,mongrel 占用的内存会不停的增长,不得不把所有 mongrel 加入 monit 并把内存占用作为监视条件。

空闲的时候稍微分析过它的源代码。导致内存泄漏的原因其实很简单,插件内部使用一个 Class 的实例对象作为 Hash 的 Key,这部分的资源没有回收导致每次调用方法都会产生泄漏(bound_target)。虽然可以可以用 MonkeyPatching 的方式解决这个问题,但是我始终认为这种方式会带来不可预测的风险。

昨天想起以前做过的 GettextDb 的项目,于是检查了一下 Gettext 的版本情况,发现最近升级的 Gettext 1.91.0 修复了这个漏洞,改用实例对象的 object_id 作为 hash 的 key,避免了过多无法回收的对象产生的泄漏。

相关链接:http://gettext.rubyforge.org

# how to install gettext gem
gem install gettext

分享到:
评论

相关推荐

    gettext-0.21.tar.gz

    gettext 是 GNU Translation Project上的重要一步,从它基础上可以构建其他步骤。 gettext提供了一个帮助产生多语言 message的框架:包括一组关于程序改如何编写以支持 message种类的约定, message种类相关的一个...

    gettext源码

    `gettext`是一个在开源软件开发中广泛使用的工具集,主要用于多语言环境下的文本翻译。它提供了从源代码中提取可翻译字符串,管理翻译文件,以及最终将这些翻译整合回二进制可执行文件的功能。在Linux系统中,`...

    django国际化工具gettext和poedit

    这里主要介绍两种关键工具:gettext和Poedit,它们在Django国际化过程中起着至关重要的作用。 **1. Gettext** Gettext是Unix/Linux系统下广泛使用的文本翻译工具,它可以帮助开发者将应用程序中的字符串提取出来,...

    ember-gettext:用于 Ember 控制器和 Handlebars 模板的 i18n gettext.js 包装器

    script src =" ./bower_components/gettext.js/dist/gettext.js " > </ script >< script src =" ./bower_components/ember-gettext/lib/ember-gettext.js " > </ script > 或者在你的 ...

    Laravel开发-gettext

    composer require maatwebsite/gettext ``` 安装完成后,我们需要配置Laravel的`config/app.php`文件,将`Gettext`服务提供者和 Facade 添加到相应的数组中: ```php // 在providers数组中添加服务提供者 ...

    gettext源码--glib安装

    gettext源码,安装glib过程中需要用到

    DELPHI GETTEXT源代码

    DELPHI GETTEXT源代码是面向Delphi开发者的一个多语言支持解决方案。GETTEXT是一个广泛用于C和C++等编程语言的国际化(i18n)和本地化(l10n)工具,但同样可以被引入到Delphi项目中,以实现更灵活的多语言功能。在...

    PHP Smarty_gettext下载

    而`gettext`则是Linux/Unix环境中广泛使用的国际化(i18n)和本地化(l10n)工具,用于处理多语言支持。将Smarty与gettext结合,可以方便地在PHP应用中实现多语言功能。 Smarty_gettext是Smarty模板引擎的一个扩展...

    Laravel开发-laravel-gettext

    - 配置`config/gettext.php`,设置语言目录、默认语言等参数。 - 运行命令`php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"`来发布配置文件和语言文件...

    利用WM_GETEXT获取控件信息的例子

    4. **内存管理**:确保你正确地处理了分配的内存,尤其是当你使用动态内存分配时。 在这个特定的例子中,由于提到了"GetText"和"GetTextDlg",我们可以推断这可能是一个简单的对话框应用程序,通过一个对话框控件来...

    gettext-0.18.1.1.tar.zip

    `gettext-0.18.1.1.tar.zip` 是一个包含了 `gettext` 工具的源代码包,主要用于在Linux系统中进行多语言支持。`gettext` 是一个广泛使用的软件开发工具集,它提供了强大的国际化(i18n)和本地化(l10n)功能,使得...

    gettext-0.14.4-二进制版本

    `gettext`是一个广泛使用的工具集合,用于处理软件的国际化(i18n)和本地化(l10n)问题。这个"gettext-0.14.4-二进制版本"是`gettext`工具的一个特定发行版,适用于处理和管理多语言环境中的文本资源。在IT领域,...

    gettext-runtime-0.13.1

    "gettext-runtime-0.13.1" 是一个与Python相关的库,主要用于处理软件本地化(internationalization)和翻译(localization),也就是我们常说的i18n和l10n。这个版本号0.13.1表示这是该库的一个特定发行版,可能...

    gun gettext for delphi2010 demo project

    《GNU Gettext for Delphi 2010 演示项目详解》 GNU Gettext 是一个广泛使用的开源工具集,主要用于多语言环境下的软件国际化(i18n)和本地化(l10n)。它提供了一种方便的方式来管理和翻译软件中的字符串,使得...

    源码gettext-0.19.3.tar

    `gettext-0.19.3.tar` 是一个包含了 `gettext` 工具集源代码的压缩文件。`gettext` 是一个广泛使用的开源工具,主要用于软件的国际化(i18n,Internationalization)和本地化(l10n,Localization)。这个版本号表示...

    前端开源库-angular-gettext-tools

    Angular GetText工具,简称`angular-gettext-tools`,是前端开发中一个非常重要的开源库,专门针对Angular框架设计,旨在帮助开发者方便地提取、管理和编译应用中的国际化(i18n)文本。在多语言环境中,提供良好的...

    gettext-static-0.19.8.1

    `gettext-static-0.19.8.1` 是一个针对Java后端国际化支持的工具包,主要用于帮助开发者从Java源代码中提取需要翻译的文本并编译为项目所需的类文件。这个工具集包含了`gettext`工具的静态库版本,`gettext`是一个...

    前端项目-gettext.js.zip

    2. **构建文件**:编译后的`dist/gettext.min.js`,这是经过压缩和优化的版本,适合在生产环境中使用。 3. **示例**:可能有`examples`目录,包含如何在实际项目中使用`gettext.js`的示例代码。 4. **测试**:`test`...

Global site tag (gtag.js) - Google Analytics