Я пытаюсь отладить, почему мой сервер задерживает каждый запрос на 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
Чтобы отладить это, я бы систематически изолировал каждый компонент, чтобы найти узкое место. Во все времена я бы tail -f
любые файлы журналов, включая журналы доступа / ошибок nginx и журналы rails для ошибок.
Первый вопрос: медленно ли он работает только в производственной среде или также в режиме разработки? Ответ поможет вам диагностировать, сосредоточив внимание на различиях между средами.
Запустите процесс единорога в автономном режиме и подключитесь к порту 8080, исключив nginx. Это все еще медленно? Если да, то это либо проблема с рельсами, либо с единорогом. Я сомневаюсь, что проблема в nginx, потому что статические ресурсы обслуживаются на вашем сайте относительно быстро.
Протестируйте приложение в Webrick, чтобы устранить Единорога. Если все еще медленно, начните копаться в своем приложении rails.
Я тестировал ваш сайт с telnet ck.uci.agh.edu.pl 80
делать GET http://ck.uci.agh.edu.pl/
и задержка была до того, как текст был напечатан. Это устраняет любые проблемы с javascript или загрузкой ресурсов в браузере.
Что стоит попробовать:
Тестируйте изолированные компоненты вашего приложения в rails console
путем поиска моделей. Пройдите по каждому компоненту отображения вашей главной страницы по очереди, пока не найдете задержку. Попробуйте запустить код, который вы выполняете в своем index
действие контроллера и все, что ваша страница выполняет во время анализа. Вы ищете проблемы с базой данных, задержки при подключении к внешним службам и т. Д.
Используйте пробный период службы New Relic в режиме Pro, который может выявить узкие места приложения, такие как медленные запросы к базе данных или вызовы внешних служб. Он показывает вам все, что выполняется, и сколько времени это занимает.
Выполните поиск DNS в командной строке вашего сервера, например nslookup somehost.com
. Иногда отказавший DNS-сервер может замедлить работу вашего приложения, если он использует имена хостов при любом взаимодействии с другими серверами, такими как сервер базы данных, службы геолокации и т. Д.
Единственное, что я увидел в вашем конфиге, это то, что вы должны установить своего единорога worker_processes как минимум на количество процессоров на вашем сервере. Попробуйте увеличить это число до 4 и посмотрите, поможет ли это, но следите за использованием памяти.
Надеюсь это поможет. Удачи!