Я тестирую свой 64-битный сервер Linode Ubuntu 14, это самый простой сервер, доступный от них. Я использую Apache Benchmark для тестирования сервера, а также многопоточный скрипт, который я написал на Python, но об этом позже. Используя AB, я заметил, что получаю около 7000 запросов в секунду при локальном запуске с самого сервера, но только около 15 при запуске из другой сети / Интернета. Время отклика также составляет около 150 мс для 1000 одновременных подключений локально. Удаленно время отклика составляет около 1,5-2,5 секунд на 100 одновременных подключений. Сеть, из которой я запускаю удаленные тесты, имеет большую пропускную способность, а компьютер, с которого я запускаю ее, имеет много оперативной памяти и скорости процессора; это быстрая бизнес-сеть. Я даже попробовал 2 другие сети из США на двух других компьютерах, и скорости у них примерно одинаковые.
При запуске моего многопоточного скрипта я замечаю, что он начинает икать, как только я пытаюсь выполнить более 100 одновременных запросов, это из внешних сетей. Я еще не пробовал свой сценарий локально на сервере, так как мне нужно либо обновить свой Python на сервере до 3+, либо изменить свой сценарий, чтобы он был совместим с 2.7. Я протестировал это локально и получил время отклика 150 мс при запуске скрипта с 1000 многопоточными соединениями, он просто использовал urllib2.
Я тестирую это напрямую против nginx (статический файл), приложения pywsgi, стоящего за nginx, а также непосредственно с pywsgi. Приложение pywsgi имеет простой маршрут, который отвечает базовым ответом, поэтому он должен быть быстрым. Неудивительно, что nginx-> pywsgi дает лучшие результаты, вероятно, из-за того, как он буферизует запросы. Есть ли что-то особенное в сети Linode, которое вызывает эту проблему? Разница в порядках величин между внутренними и внешними тестами заставляет меня задуматься, в чем может быть причина. Единственная другая вещь на пути - это брандмауэр iptables, просто фильтрующий по http / s и ssh.
dmesg не имеет информации о моих тестах.
Похоже, что где-то между вашим настольным компьютером и вашим Linode есть узкое место в сети. Некоторые предложения:
traceroute your-linode-ip
со своего рабочего стола, чтобы увидеть, поможет ли это найти горлышко бутылки.