web-dev-qa-db-ja.com

サーバーがnginx / unicornのリクエストごとに3秒の遅延がある理由をデバッグするにはどうすればよいですか?

サーバーがリクエストごとに3秒の遅延がある理由をデバッグしようとしています。

enter image description here

これらは私のnginxとUnicornの設定ファイルです: https://Gist.github.com/regedarek/de7f2e5cd1918b6224ac

私のサーバー情報:

  Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-37-generic x86_64)

  System load:  0.02              Processes:           71
  Usage of /:   38.9% of 6.89GB   Users logged in:     0
  Memory usage: 28%               IP address for eth0: 149.156.119.151
  Swap usage:   0%

server:~$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 2
model name      : QEMU Virtual CPU version 1.0
stepping        : 3
microcode       : 0x1000065
cpu MHz         : 2300.026
cache size      : 512 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up nopl pni cx16 popcnt hypervisor lahf_lm svm abm sse4a
bogomips        : 4600.05
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

これはtcpdump -qtln port 80-> https://Gist.github.com/c21d3a38e1d75fb2c4f1 から出力されます

3
tomekfranek

これをデバッグするために、各コンポーネントを体系的に分離してボトルネックを見つけます。常に、nginxアクセス/エラーログやエラーのRailsログ)を含むすべてのログファイルをtail -fします。

最初の質問は、本番環境のみで遅いのか、それとも開発モードでも遅いのかということです。答えは、環境間の違いに焦点を当てることによって診断するのに役立ちます。

スタンドアロンモードでUnicornプロセスを開始し、ポート8080に接続して、nginxを削除します。まだ遅いですか?はいの場合、それはRailsまたはUnicornの問題です。静的アセットがサイトで比較的高速に提供されているため、nginxが問題であるとは思えません。

Webrickでアプリをテストして、Unicornを排除します。それでも遅い場合は、Railsアプリを調べ始めてください。

telnet ck.uci.agh.edu.pl 80GET http://ck.uci.agh.edu.pl/を実行してサイトをテストしましたが、テキストが印刷されるまでに遅延がありました。これにより、ブラウザでのJavaScriptやアセットの読み込みの問題が解消されます。

試すもの:

  • モデルルックアップを実行して、Rails consoleでアプリの分離されたコンポーネントをテストします。遅延が見つかるまで、メインページを表示する各コンポーネントを一度に1つずつ確認します。 indexコントローラーアクションで実行するコードと、ページが解析されるときに実行するすべてのコードを実行してみてください。データベースの問題、接続から外部サービスへの遅延などを探しています。

  • ProモードでNewRelicサービスの試用期間を使用すると、データベースクエリの遅延や外部サービスへの呼び出しなどのアプリのボトルネックが明らかになる可能性があります。実行されるすべてのものと、それにかかる時間が表示されます。

  • nslookup somehost.comなどのサーバーのコマンドラインでDNSルックアップを実行します。行き詰まったDNSサーバーは、データベースサーバー、地理位置情報サービスなどの他のサーバーとの通信でホスト名を使用すると、アプリの速度が低下する場合があります。

  • 私があなたの設定で見た唯一のことは、Unicorn worker_processes を少なくともサーバー上のCPUの数に設定する必要があるということでした。この数を4に増やして、これが役立つかどうかを確認してください。ただし、メモリ使用量に注意してください。

お役に立てれば。幸運を!

3
platforms