Search code examples
ruby-on-rails-3google-cloud-sqlgoogle-compute-engine

MySQL server has gone away in Rails app hosted on Google Compute Engine connecting to Cloud SQL


I occasionally get MySQL server has gone away on my Rails 3.2.13/Ruby 1.9.3 app, hosted on a Google Compute Engine instance, connecting to a Cloud SQL D1 (512 MB) instance. The traffic is very low. The problem goes away when the site is reloaded, but it's too late since an HTTP 500 is already produced.

Any suggestions on what to tune? Does the MySQL server disconnect due to low traffic?

ActiveRecord::StatementInvalid (Mysql2::Error: MySQL server has gone away: SHOW
FULL FIELDS FROM `users`):
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_mysql_ada
pter.rb:245:in `query'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_mysql_ada
pter.rb:245:in `block in execute'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_adapter.r
b:280:in `block in log'
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute'
activerecord (3.2.13) lib/active_record/connection_adapters/mysql2_adapter.rb:211:in `execute'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:259:in `execute_and_free'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:426:in `columns'
activerecord (3.2.13) lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
activerecord (3.2.13) lib/active_record/model_schema.rb:228:in `yield'
activerecord (3.2.13) lib/active_record/model_schema.rb:228:in `default'
activerecord (3.2.13) lib/active_record/model_schema.rb:228:in `columns'
activerecord (3.2.13) lib/active_record/model_schema.rb:237:in `columns_hash'
activerecord (3.2.13) lib/active_record/locking/optimistic.rb:131:in `locking_enabled?'
activerecord (3.2.13) lib/active_record/relation.rb:170:in `exec_queries'
activerecord (3.2.13) lib/active_record/relation.rb:160:in `block in to_a'
activerecord (3.2.13) lib/active_record/explain.rb:41:in `logging_query_plan'
activerecord (3.2.13) lib/active_record/relation.rb:159:in `to_a'
activerecord (3.2.13) lib/active_record/relation/finder_methods.rb:380:in `find_first'
activerecord (3.2.13) lib/active_record/relation/finder_methods.rb:122:in `first'
orm_adapter (0.4.0) lib/orm_adapter/adapters/active_record.rb:17:in `get'
devise (2.2.4) lib/devise/models/authenticatable.rb:208:in `serialize_from_session'
devise (2.2.4) lib/devise.rb:437:in `block (2 levels) in configure_warden!'
warden (1.2.1) lib/warden/session_serializer.rb:35:in `fetch'
warden (1.2.1) lib/warden/proxy.rb:212:in `user'
warden (1.2.1) lib/warden/proxy.rb:318:in `_perform_authentication'
warden (1.2.1) lib/warden/proxy.rb:127:in `authenticate!'
devise (2.2.4) lib/devise/controllers/helpers.rb:48:in `authenticate_user!'
activesupport (3.2.13) lib/active_support/callbacks.rb:407:in `run1684931682470039459process_action2800431035017339248_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
activerecord (3.2.13) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.2.13) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `call'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
journey (1.0.4) lib/journey/router.rb:68:in `block in call'
journey (1.0.4) lib/journey/router.rb:56:in `each'
journey (1.0.4) lib/journey/router.rb:56:in `call'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call'
omniauth (1.1.4) lib/omniauth/strategy.rb:184:in `call!'
omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call'
omniauth (1.1.4) lib/omniauth/strategy.rb:184:in `call!'
omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call'
warden (1.2.1) lib/warden/manager.rb:35:in `block in call'
warden (1.2.1) lib/warden/manager.rb:34:in `catch'
warden (1.2.1) lib/warden/manager.rb:34:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.5) lib/rack/etag.rb:23:in `call'
rack (1.4.5) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connectio
n_pool.rb:479:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block i
n call'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `run_280652940
067824407_call1265643099882031984_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callb
acks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `
call'
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `c
all'
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
railties (3.2.13) lib/rails/engine.rb:479:in `call'
railties (3.2.13) lib/rails/application.rb:223:in `call'
railties (3.2.13) lib/rails/railtie/configurable.rb:30:in `method_missing'
unicorn (4.6.3) lib/unicorn/http_server.rb:552:in `process_client'
unicorn (4.6.3) lib/unicorn/http_server.rb:632:in `worker_loop'
unicorn (4.6.3) lib/unicorn/http_server.rb:500:in `spawn_missing_workers'
unicorn (4.6.3) lib/unicorn/http_server.rb:511:in `maintain_worker_count'
unicorn (4.6.3) lib/unicorn/http_server.rb:277:in `join'
unicorn (4.6.3) bin/unicorn:126:in `<top (required)>'
/home/mparaz/.rvm/gems/ruby-1.9.3-p545@moovd/bin/unicorn:23:in `load'
/home/mparaz/.rvm/gems/ruby-1.9.3-p545@moovd/bin/unicorn:23:in `<main>'
/home/mparaz/.rvm/gems/ruby-1.9.3-p545@moovd/bin/ruby_executable_hooks:15:in `eval'
/home/mparaz/.rvm/gems/ruby-1.9.3-p545@moovd/bin/ruby_executable_hooks:15:in `<main>'

Solution

  • The observed behavior, most likely, is a result of the billing plan configured for the instance. If 'per use' billing plan is used; the instance will spin up when accessed and will continue to be up 15 min after the last access.

    For more details take a look at "Pricing and Billing" section here.