Обновление Rails до 5.2.3, вызывающее «Mysql2 :: Ошибка: слишком много соединений» - PullRequest
0 голосов
/ 07 января 2020

Мы почти закончили обновление с Rails 4.2.11.1 до Rails 5.2.3. Все тесты проходят локально, и при локальном запуске приложения проблем не возникает. При постановке (и нашей неудачной попытке обновления производства) мы сталкиваемся с очень странной ошибкой, когда число подключений к нашей базе данных растет и растет, пока приложение не перестает отвечать на запросы.

Проблема периодически возникает при постановке (трудно воспроизводить), но очень соответствует нашей производственной среде. Я думаю, основное различие заключается в количестве трафика c, поскольку наши промежуточные серверы используются только для нашего тестирования, тогда как производственная среда получала трафик c от нескольких тысяч пользователей. Я пытаюсь провести нагрузочное тестирование на стадии подготовки, чтобы воссоздать проблему, чтобы у нас была возможность точно определить проблему, но сейчас мы не знаем, почему это происходит.

Это похоже на код не использует повторно уже установленные соединения с базой данных каждый раз, когда ему это нужно, а вместо этого создает новое, использует его один раз (предположительно), а затем забывает об этом. Кто-нибудь еще испытывал такую ​​проблему? Мы были бы очень признательны за любую помощь или понимание, которые кто-либо может предоставить.

Ниже перечислены наши конкретные c версии программного обеспечения:

  • Ubuntu 18.04.3 LTS (GNU / Linux 4.15) .0-1057- aws x86_64)
  • nginx / 1.17.6
  • Passenger Phusion 6.0.4
  • Ruby 2.6.5
  • MySQL 5.5.51-38.1

Gemfile

source 'http://rubygems.org'

ruby '2.6.5'

gem 'nokogiri'
gem 'rails', '5.2.3'
gem 'rake'
gem 'mysql2'
gem 'mini_magick'
gem 'liquid', '~> 3.0.1'
gem 'httparty'
gem 'mime-types', '>=1.16', require: 'mime/types'
gem 'oauth'
gem 'oauth2', '~> 1.4'
gem 'roxml'
gem 'sax-machine'
gem 'googlecharts', '1.6.7', require: 'gchart'
gem 'rubyzip', '~> 1.2.1', require: 'zip'
gem 'ruby-openid'
gem 'RedCloth', '~> 4.2.9'
gem 'scoped_search', '~> 4.1.3'
gem 'wicked_pdf', '~> 1.1.0'
gem 'wkhtmltopdf-binary-edge', '~> 0.12.4.0'
gem 'devise'
gem 'devise-encryptable'
gem 'paperclip'
gem 'aws-sdk'
gem 'whois', '~> 2.0.4'
gem 'validates_timeliness'
gem 'will_paginate'
gem 'escape_utils'
gem 'acts_as_list'
gem 'acts_as_paranoid'
gem 'prawn', '~> 2.2.2'
gem 'prawn-table', '~> 0.2.2'
gem 'net-dns', '~> 0.6.1'
gem 'in_place_editing', '~> 1.1.2'
gem 'aasm', '~> 3.0.26'
gem 'dynamic_form', '~> 1.1.4'
gem 'delayed_job_active_record', '~> 4.1', '>= 4.1.2'
gem 'daemons'
gem 'carmen-rails', github: 'jim/carmen-rails'
gem 'dalli'
gem 'Ascii85', '1.0.1'
gem 'rinku', require: 'rails_rinku'
gem 'jquery-rails'
gem 'sass-rails'
gem 'compass-rails', '3.0.2'
gem 'compass-rgbapng', '0.2.1', require: 'rgbapng'
gem 'fancy-buttons', '~> 1.1.1'
gem 'haml-rails'
gem 'haml'
gem 'slim-rails'
gem 'coffee-rails'
gem 'uglifier', '~> 2.3.1'
gem 'holidays', '~> 1.0.5'
gem 'rack-utf8_sanitizer'
gem 'autoprefixer-rails'
gem 'loofah'
gem 'yajl-ruby', require: 'yajl'
gem 'gretel'
gem 'crack'
gem 'lhm'
gem 'twilio-ruby'
gem 'open_uri_redirections'
gem 'godaddy-api', '~> 0.1.0'
gem 'html_truncator', '~> 0.4.1'
gem 'acme-client'
gem 'net-ssh'
gem 'mustache', "~> 1.0"
gem 'net-sftp', '~> 2.1', '>= 2.1.2'
gem 'activeresource'
gem 'geokit', '~> 1.13.1'
gem 'fomo', '~> 0.1.0'
gem 'nameable', '~> 1.1'
gem 'xmlrpc'
gem 'activemodel-serializers-xml'
gem 'airbrake', '~> 9.4', '>= 9.4.5'

1 Ответ

0 голосов
/ 07 января 2020

1) проверьте переменную max_connections и посмотрите, соответствует ли она количеству соединений в вашей рабочей среде

mysql> SHOW VARIABLES LIKE 'max_connections';

2) уменьшите время ожидания для соединений с тайм-аутом в database.yml

3) проверить настройки пула соединений с активной записью

https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection -pool

...