å¿çã«500ms以ä¸æããå¤é¨APIã«ä¾åãããµã¼ãã¹ãä½ã£ã¦ã¦ãUnicornã®workeræ°ã ã¨ç°¡åã«è©°ã¾ã£ã¦æ»ã¬ã¨ããç¾è±¡ãèµ·ãã¦ããã®ã§ãã°ããåã«Pumaã«ç½®ãæãã¾ããã
æ¢ã« Nginx + Unicorn ã§éç¨ãã¦ãããµã¼ãã®Unicorné¨åãPumaã«ç½®ãæããã®ã¯å²ã¨ç°¡åã§ããããåèã«ãããã»ã¼ãã¾ãããã¾ããã(*)
coderwall.com : establishing geek cred since 1305712800
(*) ãã ããcapistranoã set :pty, true
ã«ãã㨠capistrano-sidekiqãå¹ããã«sidekiqãåããªããªã£ã¦æ»ã¬ã¨ããknown issueãè¸ãã ã®ã§æ³¨æ
ãã以éãé å½ã«éç¨ã§ãã¦ããã®ã§ãããè² è·ãããã£ãã¨ãã«500ã¨ã©ã¼ãåºãã¨ããç¾è±¡ã¯Unicornãããã·ã«ãªã£ããã®ã®åºç¶ãã¦ãã¾ãããæåã¯Threadæ°ã®ä¸è¶³ãã¨æããå¢ããããããã®ã§ããããã§ãåºç¶ãã¦ãããã¨ã©ã¼å 容ã¯ä»¥ä¸ã®ãã®ã§ããã
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5 seconds.
"Puma ActiveRecord::ConnectionTimeoutError" ãããã§ã°ã°ã£ã¦è¦ãã¨ãããHerokuã®ãã®è¨äºãããããã¦åçãæ¸ãã¦ããã¾ããã
https://devcenter.heroku.com/articles/concurrency-and-database-connections
If you are using the Puma web server we recommend setting the pool value to equal ENV['MAX_THREADS']. When using multiple processes each process will contain its own pool so as long as no worker process has more than ENV['MAX_THREADS'] then this setting should be adequate.
- Threadãã¨ã«ã³ãã¯ã·ã§ã³ãè²¼ããã³ãã¯ã·ã§ã³ãã¼ã«ãä½ããã
- ActiveRecordã®ã³ãã¯ã·ã§ã³ãã¼ã«æ°ã¯ããã©ã«ãã ã¨5
ã¨ãããã¨ãªã®ã§ããããã¹ã¬ããæ°ãå¢ããã¦ããPumaã®ã¹ã¬ããæ°ã5以ä¸å¿ è¦ã«ãªãã±ã¼ã¹ãçºçããã¨ã³ãã¯ã·ã§ã³ãè²¼ããªãã¦ã¨ã©ã¼ã«ãªãããã§ããã ã¨ããããã§ãããããµãã«database.ymlãæ¸ãæãã¦è§£æ±ºãã¾ããã
default: &default adapter: mysql2 username: hoge password: fuga ... pool: 16
UnicornããPumaã«ç½®ãæããçç±
ã¡ãªã¿ã«ãUnicornããPumaã«ç½®ãæããçç±ã§ãããå¤é¨ä¾åã§ãªã¯ã¨ã¹ããè©°ã¾ãç°å¢ä¸ã ã¨ãUnicornã¯1Workerã§1requestããå¦çã§ããªãã®ã§ãWorkeræ°ãå¢ãããã解決çãããã¾ãããããããWorkeræ°ãå¢ããã«ã¯ãªã½ã¼ã¹ï¼ç¹ã«ã¡ã¢ãªï¼ãå¿ è¦ã«ãªãã®ã§ã1ãµã¼ãã§ããã¾ã§workeræ°ãå¢ãããã¨ãã§ãããé ããªã¯ã¨ã¹ããæãã¦ããéã«å¦çãããªã¯ã¨ã¹ãããå ¥ã£ã¦ãããªã¯ã¨ã¹ãã®ã»ããå¤ããªã£ã¦ãæ»ã¬ããã§ãããCPUã¨ãããããä½è£ãããã«ããããããã
Pumaã¯ãå¤é¨APIãDBå¾ ã¡ã®ãããªIOå¾ ã¡ã§ä½ããã¦ããªã(CPUã«ä½è£ããã)ç¶æ ã§ããã°å¥ã¹ã¬ããã§ä»ã®ãªã¯ã¨ã¹ããå¦çãããã¨ãå¯è½ã§ãããã¹ã¬ãããå¢ããã®ã¯Unicornã®Workeræ°ãå¢ããããããªã½ã¼ã¹ã使ããªããããå¾ ã¡ã®å¤ãå¤æ°ã®ãªã¯ã¨ã¹ããæãã¨ããã®ã«åãã¦ããããã§ãã