Рейк-рейк по-прежнему потребляет больше оперативной памяти во время работы (сканировать сайты с помощью механизации) - PullRequest
0 голосов
/ 04 февраля 2012

Я использую механизированный гем для сканирования сайтов.Я написал очень простой однопоточный сканер в задаче Rails, потому что мне нужно было получить доступ к моделям Rails.

Этот сканер работает нормально, но, посмотрев некоторое время, я вижу, что он естсо временем все больше и больше ОЗУ, что нехорошо.

Я использую драгоценный камень Бога для мониторинга моего сканера.

Ниже приведен мой код задачи рейка.подтекает?

task :abc => :environment do
  prefix_url = 'http://example.com/abc-'
  postfix_url = '.html'
  from_page_id = (AppConfig.last_crawled_id || 1) + 1
  to_page_id = 100000

  agent = Mechanize.new
  agent.user_agent_alias = 'Mac Safari'

  (from_page_id..to_page_id).each do |i|
    url = "#{prefix_url}#{i}#{postfix_url}"
    puts "#{Time.now} - Crawl #{url}"
    page = agent.get(url)

    page.search('#content > ul').each do |s|
      var = s.css('li')[0].text()
      value = s.css('li')[1].text()
      MyModel.create :var => var, :value => value
    end

    AppConfig.last_crawled_id = i
  end
  # Finish crawling, let's stop
  `god stop crawl_abc`
end

1 Ответ

1 голос
/ 04 февраля 2012

Если у вас не установлена ​​самая последняя версия Mechanize (2.1.1 была выпущена всего лишь день назад), по умолчанию Mechanize работает с неограниченным размером истории, то есть сохраняет все посещенные вами страницы и будет постепенно использоватьвсе больше и больше памяти.

В вашем случае в этом нет никакого смысла, поэтому вызов max_history= для вашего агента должен ограничить объем памяти, используемый таким образом

...