Tag: 内存管理

PostgreSQL安装错误 – 无法分配内存

我正在尝试从sqlite3切换到PostgreSQL以便在Rails中进行开发,这样我就没有任何heroku问题。 我正在遵循heroku和链接到Railscast的建议,但在安装postgresql后我遇到了以下错误。 在/ usr / local / var / postgres / base / 1中创建template1数据库… 致命:无法创建共享内存段:无法分配内存 详细信息:失败的系统调用是shmget(key = 1,size = 2072576,03600)。 提示:此错误通常意味着PostgreSQL对共享内存段的请求超出了可用内存或交换空间,或超出了内核的SHMALL参数。 您可以减小请求大小或使用更大的SHMALL重新配置内核。 要减少请求大小(当前为2072576字节),可以通过减少shared_buffers或max_connections来减少PostgreSQL的共享内存使用量。 我对文档进行了一些讨论,但我是新手,对内存和数据库的工作方式知之甚少,而且我认为这里的某个人可能能够指出我的方向比我能做得好得多自己找。 知道如何解决这个问题吗? 我的计算机是新的,相对花哨,如果内存耗尽,我会感到惊讶,所以我不知道减少“共享内存使用”是否是正确的想法(如果我理解发生了什么) 。 编辑:应该早点提出来。 这是导致错误的命令(构建数据库): initdb /usr/local/var/postgres -E utf8

是否有基准比较django,rails和PHP框架的相应内存使用情况?

我必须在具有有限RAM(1 GB,无交换)的嵌入式服务器上运行具有许多服务的Web服务器。 最多可有100个用户。 我将提供诸如论坛,小游戏(javascript或flash)等服务。 我的团队非常了解Ruby on Rails,但我有点担心Rails的内存使用情况。 我真的不想在这里开始一个巨魔,但我想知道是否有任何比较Rails,Django,CakePHP或任何其他PHP框架的严肃(即记录)基准? 你能指点基准还是给我你对Rails内存使用情况的看法? 请不要拖钓。

这段代码是否在Ruby中创建了循环内存引用?

我有以下假设代码: class User ‘token’, :secret => ‘secret’) # I want to get the user’s posts in thread #12345. user.oauth_consumer.get_posts_in_thread(12345) 我想知道这是否创建了一个循环内存引用,其中user有oauth_consumer的引用,而oauth_consumer有一个对user的引用,因此无法进行垃圾回收? 或者底层GC实现(REE 1.8.7)是否处理​​这种情况?

是否需要gem加载一切,包括我不使用的东西?

假设x是一个gem,它包含Hello和Goodbye类。 如果我编写一个require ‘x’的程序,但只使用Hello类。 Goodbye类也加载了吗?

如何处理Ruby 2.1.2内存泄漏?

我有一个工作进程,它产生多达50个线程并执行一些异步操作(大多数是http调用)。 当我启动该过程时,它从大约35MB的已用内存开始,并迅速增长到250MB。 从那时起它进一步增长,问题是内存永远不会停止增长(即使增长阶段随着时间的推移而减少)。 几天后,进程只会超出可用内存并崩溃。 我做了很多分析和分析,似乎无法找到问题所在。 即使堆大小非常不变,进程内存也在不断增长。 我已将GC.stat输出收集到您可以在此处访问的电子表格中: https://docs.google.com/spreadsheets/d/17TohDNXQ_MXM31CeAmR2ptHFYfvOeF3dB6WCBkBS_Bc/edit?usp=sharing 即使过程内存最终稳定在415MB,但它将在未来几天继续增长,直到达到512MB的限制并崩溃。 我也尝试使用对象空间跟踪对象,但跟踪对象的内存总和从不超过70-80MB,这与GC报告完全一致。 剩下的300MB +(并且还在增长)花在哪里……我不知道。 如何处理这些问题? 是否有任何工具可以让我更清楚地了解内存的使用方式? 更新:gem和操作系统 我正在使用以下gem: gem “require_all”, “~> 1.3” gem “thread”, “~> 0.1” gem “equalizer”, “~> 0.0.9” gem “digest-murmurhash”, “~> 0.3”, require: “digest/murmurhash” gem “google-api-client”, “~> 0.7”, require: “google/api_client” gem “aws-sdk”, “~> 1.44” 该应用程序部署在heroku上,但在Mac OS X 10.9.4上本地运行时,内存泄漏是显而易见的。 更新:泄漏 我已经升级了stringbuffer并分析了像@mtm建议的所有内容,现在没有leak工具识别的内存泄漏,随着时间的推移没有增加ruby堆大小,然而,进程内存仍在增长。 最初我以为它在某些时候停止了增长,但几个小时后它超过了极限并且过程崩溃了。

Sidekiq在工人完成后没有释放内存

我有大约六个执行JSON爬行的 Sidekiq工作者 。 根据端点的数据集大小,它们在1分钟到4小时之间完成。 特别是,观看长4小时,我看到随着时间的推移内存略有增加。 这不是问题,直到我想再次安排相同的工作人员工作。 内存没有被释放并堆叠,直到我遇到Linux OOM Killer,摆脱了我的Sidekiq进程。 内存泄漏 ? 我在ObjectSpace中观察了不同对象的数量: ObjectSpace.each_object.inject(Hash.new(0)) { |count, o| count[o.class] += 1 } 那里没有真正的增加,哈希,数组等的集合保持不变,垃圾收集器和gc.stat[:count]告诉我,垃圾收集器也正在工作。 即使在工作人员完成之后,例如我得到[完成]记录并且没有工人正忙着,内存也不会被释放。 这是什么原因? 我可以对此做点什么吗? 写一个终结者? 目前唯一的解决方案 :重启Sidekiq进程。 我在Ruby 2.0.0上使用Ruby MRI。 对于JSON解析,我使用Yajl ,因此是C绑定。 我需要它,因为它似乎是唯一能够正确实现流式读写的快速JSON解析器。

Ruby的GC.stat的字段是什么意思?

我正在使用GC.stat来分析我们的Rails应用程序中的内存使用情况。 GC.stat返回带有以下键的哈希: :count :heap_used :heap_length :heap_increment :heap_live_num :heap_free_num :heap_final_num 有人知道这些值究竟是什么意思吗? 在Ruby源代码( gc.c )中没有关于它们的文档,只是注释:“哈希的内容是实现定义的,将来可能会更改。” 其中一些字段从上下文中有意义,例如count是Ruby分配的堆数。 但是heap_final_num是heap_final_num ? 什么是heap_increment ? heap_length是最小堆大小吗? 我正在摆弄RUBY_MIN_HEAP_SLOTS , RUBY_FREE_MIN和RUBY_GC_MALLOC_LIMIT ,但更改这些env变量似乎没有任何影响:heap_count或:heap_length 。 我希望:heap_count如果我从根本上增加最小堆插槽, :heap_count会下降。 所以我真的想知道所有GC.stat值代表什么! 我正在使用Ruby 1.9.3。

Ruby 2.2在Heroku上有内存问题吗?

在Heroku上将Rails应用程序从Ruby 2.0切换到Ruby 2.1时,很多人都遇到了内存使用问题。 例如,请参阅Ruby 2.1与Ruby 2.0或1.9的内存使用量增加 。 这些问题是用Ruby 2.2解决的吗?