当方の環境
さくらVPS 1Gプラン
centOS7
nginx
fastCGIは入っていない?
Macで開発
アプリの情報
Ruby on Rails
MySQL5.7
Capistrano
Unicorn
この環境でサーバーに接続すると、同じアクションでもエラーが起きずに通常に画面表示する時と、505エラーが返ってくる時があります。
その時エラー(info)ログは以下のようになっています。keepalive_timeout
2018/10/01 15:20:40 [info] 2159#0: *1 client XXX.XXX.XXX.XX closed keepalive connection 2018/10/01 15:20:52 [info] 2158#0: *43 client closed connection while waiting for request, client: XXX.XXX.XXX.XX, server: 0.0.0.0:XX
今は自分以外にこのアプリを触っていないので、意図的にコネクションを切っているとかではないはずです。
サーバのチューニングの問題なのかなと思って他の記事を見て以下のことは試してみています。
- やってみたこと
nginxのアプリ用の設定ファイル内で
0. keepalive_timeout の値を伸ばしてみる
0. proxy_send_timeout の値を伸ばしてみる
0. proxy_read_timeout の値を伸ばしてみる
(nginxの再起動はしています。)
0. - アプリのunicorn.rbのタイムアウトを伸ばしてみる
0. - サーバーのメモリが1Gなのでworker_processesを1に修正
こんな感じで少しは改善されているような気もするのですが、
相変わらずタイムアウトのエラーが出てしまいます。
他に原因等があるのでしょうか?
念のために、unicorn.rbの設定ファイルとnginxの設定ファイルを記載します。
何卒、よろしくお願いいたします。 **unicorn.rb** # -*- coding: utf-8 -*- worker_processes 1 timeout 300 listen Dir.pwd + '/tmp/unicorn.sock' pid Dir.pwd + '/tmp/unicorn.pid' log = Dir.pwd + '/log/unicorn.log' stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT']) stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT']) preload_app true GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{ server.config[:pid] }.oldbin" unless old_pid == server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill :QUIT, File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
**/etc/nginx/conf.d/hoge.conf** error_log /var/www/hoge/current/log/nginx.error.log info; access_log /var/www/hoge/current/log/nginx.access.log; client_max_body_size 2G; upstream app_server { server unix:/var/www/hoge/current/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; server_name hoge.com; keepalive_timeout 10m; send_timeout 200; client_body_timeout 600; client_header_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; root /var/www/hoge/current/public; try_files $uri/index.html $uri.html $uri @app; location @app { # HTTP headers proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/hoge/current/public; } }
あなたの回答
tips
プレビュー