我正在尝试调试为什么我的服务器在每个请求上有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端口80输出的 – > https://gist.github.com/c21d3a38e1d75fb2c4f1
最佳答案
为了调试这个,我会系统地隔离每个组件以找到瓶颈.在任何时候我都会关闭任何日志文件,包括nginx访问/错误日志和rails日志以查找错误.
第一个问题是,它只是生产缓慢,还是处于开发模式?答案将通过关注环境之间的不同来帮助您进行诊断.
以独立模式启动独角兽进程并在端口8080上连接,消除nginx.它还慢吗?如果是,那就是铁路或独角兽问题.我怀疑nginx是否存在问题,因为静态资产在您的网站上提供的速度相对较快.
在Webrick中测试应用程序以消除Unicorn.如果它仍然很慢,请开始挖掘您的rails应用程序.
我用telnet ck.uci.agh.edu.pl 80测试了你的网站,做了一个GET http://ck.uci.agh.edu.pl/,在打印任何文本之前有延迟.这消除了浏览器中的任何javascript或资产加载问题.
尝试的东西:
>通过模型查找在rails控制台中测试应用程序的隔离组件.逐个浏览显示主页面的每个组件,直到找到延迟.尝试运行在索引控制器操作中执行的代码,以及页面在解析时执行的任何操作.您正在寻找数据库问题,从连接到外部服务的延迟等.
>在Pro模式下使用New Relic服务的试用期,这可以揭示应用程序瓶颈,例如数据库查询速度慢或对外部服务的调用.它向您显示执行的所有内容以及花费的时间.
>在服务器的命令行上执行DNS查找,例如nslookup somehost.com.如果在任何与其他服务器(如数据库服务器,地理定位服务等)的通信中使用主机名,有时陷入困境的DNS服务器会降低您的应用程序的速度.
>我在配置中看到的唯一一件事是你应该将你的独角兽worker_processes设置为至少服务器上的CPU数量.尝试将此数字增加到4并查看是否有帮助,但请注意内存使用情况.
希望这可以帮助.祝好运!