![如何调试为什么我的服务器在每次请求 nginx/unicorn 时都有 3 秒的延迟?](https://linux22.com/image/799288/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%9C%A8%E6%AF%8F%E6%AC%A1%E8%AF%B7%E6%B1%82%20nginx%2Funicorn%20%E6%97%B6%E9%83%BD%E6%9C%89%203%20%E7%A7%92%E7%9A%84%E5%BB%B6%E8%BF%9F%EF%BC%9F.png)
我正在尝试调试为什么我的服务器每次请求都会延迟 3 秒。
这些是我的 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
答案1
为了调试这个问题,我会系统地隔离每个组件以找到瓶颈。我会随时查看tail -f
所有日志文件,包括 nginx 访问/错误日志和 rails 错误日志。
第一个问题是,它是否只在生产模式下缓慢,还是在开发模式下也缓慢?答案将通过关注环境之间的差异来帮助您进行诊断。
以独立模式启动 unicorn 进程并连接到端口 8080,从而消除 nginx。它仍然很慢吗?如果是,那么它要么是 rails 问题,要么是 Unicorn 问题。我怀疑 nginx 不是问题所在,因为静态资产在您的网站上提供的速度相对较快。
在 Webrick 中测试应用程序以消除 Unicorn。如果速度仍然很慢,请开始深入研究您的 rails 应用程序。
telnet ck.uci.agh.edu.pl 80
我使用 a测试了您的网站,GET http://ck.uci.agh.edu.pl/
在打印任何文本之前就出现了延迟。这消除了浏览器中的任何 javascript 或资产加载问题。
可以尝试的东西:
通过进行模型查找来测试应用中的独立组件
rails console
。逐个检查显示主页的每个组件,直到找到延迟。尝试运行在index
控制器操作中执行的代码以及页面在解析时执行的任何内容。您要查找的是数据库问题、与外部服务的连接延迟等。使用 Pro 模式试用 New Relic 服务,它可以揭示应用程序瓶颈,例如缓慢的数据库查询或对外部服务的调用。它会向您显示执行的所有操作以及所需的时间。
在服务器的命令行上执行 DNS 查找,例如
nslookup somehost.com
。有时,如果 DNS 服务器在与其他服务器(例如数据库服务器、地理位置服务等)的通信中使用主机名,则陷入困境的 DNS 服务器可能会减慢您的应用速度。我在你的配置中看到的唯一一件事是你应该设置你的独角兽worker_processes至少为服务器上的 CPU 数量。尝试将此数字增加到 4,看看是否有帮助,但要注意内存使用情况。
希望这有帮助,祝你好运!