Experiencing Mongo :: OperationTimeout каждые 20 минут-2 часа - PullRequest
3 голосов
/ 18 января 2012

Я, кажется, испытываю Mongo :: OperationTimeout каждые ~ 20 минут - 1 час Мой стек:

  • Rails 3.1.3
  • Mongoid 3 (git edge)
  • Unicorn 4.1.1
  • 2 X MongoDB 2.0.2 (который должен иметь право по умолчанию KeepAlive), настроенный как ReplicaSet
  • Ubuntu m1.large EC2

Я попытался установить KeepAlive на EC2 на 300, как сказано в http://www.mongodb.org/display/DOCS/Amazon+EC2, но все равно не помогло

Я попытался работать только с одной основной конфигурацией вместо ReplicaSet, но это не помоглолибо помочь.

Ниже mongoid.conf:

production:
  database: my-app-name
  op_timeout: 10
  read_secondary: true
  max_retries_on_connection_failure: 3
  identity_map_enabled: true
  allow_dynamic_fields: false
  hosts:
    - - ip-XXX.ec2.internal
      - 27017
    - - ip-XXX.ec2.internal
      - 27017

1 Ответ

3 голосов
/ 20 января 2012

После некоторого группового мышления, вот некоторые моменты, которые мы придумали относительно нашей ситуации:

  • Мы используем mongoid 3.0 с op_timeout: 30 (в версии 2.3 и ниже Mongoid не было включено op_timeout), который фактически отображает OperationTimeout. Возможно, что многие другие пользователи испытывают это, но на самом деле не получают это в журналах, а просто застряли на рабочих-единорогах.
  • Мы используем Unicorn, который порождает процессы раньше времени и заставляет их ждать, в отличие от Passenger, который динамически масштабируется. Поскольку в настоящее время мы только находимся в тестовом режиме и не имеем реального трафика, возможно, что многие из рабочих становятся бездействующими, и их монго-соединение становится устаревшим. Большинство людей, вероятно, тоже не достигают этого, но могут испытывать это время от времени.
  • Похоже, что Linux KeepAlive, описанный здесь, www.mongodb.org/display/DOCS/Trou Фонд для устранения проблем.
  • На данный момент я создал фиктивное промежуточное программное обеспечение Rack для выполнения начального запроса монго и обработки исключения, если это необходимо. Вот код https://gist.github.com/1647879
...