Rake Task убит, вероятно, из-за нехватки памяти

У меня есть rake task, и когда я запускаю его в консоли, это killed. Этот rake task работает с таблицей cca 40.000 rows, я думаю, это может быть проблема с нехваткой памяти .

Кроме того, я считаю, что этот используемый запрос оптимизирован для работы с длинными таблицами:

MyModel.where(:processed => false).pluck(:attribute_for_analysis).find_each(:batch_size => 100)   do |a|

# deal with 40000 rows and only attribute `attribute_for_analysis`.

end

Эта задача не будет выполняться в будущем на регулярной основе, поэтому я хочу избегать некоторых решений для мониторинга заданий, таких как God и т. Д., Но учитывая background jobs, например, Спасательная работа.

Я работаю с Ubuntu, ruby 2.0 и rails 3.2.14

> My free memory is as follows: 


Mem:                total      used       free     shared    buffers     cached  
                    3891076    1901532    1989544  0         1240        368128
-/+ buffers/cache:  1532164    2358912
Swap:               4035580     507108    3528472

ВОПРОСЫ:

  1. Как выяснить, почему rake task is always killed (ответили)
  2. Как заставить этот rake task работать (не ответил - все равно убит)
  3. В чем разница между total-vm, aton-rs, file-rss (без ответа)

ОБНОВЛЕНИЕ 1

-Может кто-нибудь объяснить разницу между ?:

  • total-vm
  • анон-rss
  • файл-rss
$ grep "Killed process" /var/log/syslog 

Dec 25 13:31:14 Lenovo-G580 kernel: [15692.810010] Killed process 10017 (ruby) total-vm:5605064kB, anon-rss:3126296kB, file-rss:988kB
Dec 25 13:56:44 Lenovo-G580 kernel: [17221.484357] Killed process 10308 (ruby) total-vm:5832176kB, anon-rss:3190528kB, file-rss:1092kB
Dec 25 13:56:44 Lenovo-G580 kernel: [17221.498432] Killed process 10334 (ruby-timer-thr) total-vm:5832176kB, anon-rss:3190536kB, file-rss:1092kB
Dec 25 15:03:50 Lenovo-G580 kernel: [21243.138675] Killed process 11586 (ruby) total-vm:5547856kB, anon-rss:3085052kB, file-rss:1008kB

ОБНОВЛЕНИЕ 2

  • модифицированный запрос, подобный этому, и rake task все еще убит.
 MyModel.where(:processed => false).find_in_batches   do |group|   
 p system("free -k")
 group.each do |row|    # process
   end 
 end

person Community    schedule 25.12.2013    source источник
comment
не могли бы вы вставить счетчик в цикл и какой-нибудь минитор памяти с помощью метода system?   -  person SergeyKutsko    schedule 25.12.2013
comment
Попробуйте найти в журналах, если это действительно убийца OOM - stackoverflow.com/questions/624857/   -  person cutalion    schedule 25.12.2013
comment
Кроме того, я не думаю, что ваш код делает то, что вы хотите. pluck возвращает массив, в котором нет find_each метода.   -  person cutalion    schedule 25.12.2013
comment
@cutalion обновил вопрос для моего _1 _ .. хм, но я заметил, что означает сообщение ...   -  person    schedule 25.12.2013
comment
вывод на печать обновления 2   -  person SergeyKutsko    schedule 25.12.2013
comment
нет вывода, задача rake убита. (из-за памяти. Сейчас cached составляет около 1304M   -  person    schedule 25.12.2013
comment
@ maro30, можешь выложить весь код? Вы пробовали запускать его на меньшем количестве записей? limit(1), limit(10), limit(100), limit(1000). Как скоро задача будет убита после запуска?   -  person cutalion    schedule 25.12.2013