Tag: 不足

无法在Ruby中分配内存(No MemoryError)?

我编写了一个简单的脚本,它应该读取整个目录,然后通过删除HTML标记将HTML数据解析为普通脚本,然后将其写入一个文件。 我有8GB内存和大量可用的虚拟内存。 当我这样做时,我有超过5GB的RAM可用。 目录中最大的文件是3.8 GB。 脚本是 file_count = 1 File.open(“allscraped.txt”, ‘w’) do |out1| for file_name in Dir[“allParts/*.dat”] do puts “#{file_name}#:#{file_count}” file_count +=1 File.open(file_name, “r”) do |file| source = “” tmp_src = “” counter = 0 file.each_line do |line| scraped_content = line.gsub(//, ”) tmp_src << scraped_content if (counter % 10000) == 0 tmp_src = tmp_src.gsub( /\s{2,}/, […]

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解析器。