Apache Benchmark работает медленно в общедоступной сети, локально работает быстрее. Что я делаю, чтобы ускорить это?
Я тестирую свой 64-битный сервер Linode Ubuntu 14, это самый простой из доступных серверов. Я использую Apache Benchmark для тестирования сервера, а также многопоточный скрипт, который я написал на Python, но об этом позже. Используя AB, я заметил, что я получаю около 7 000 запросов в секунду при локальном запуске с самого сервера, но только около 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 нет информации, касающейся моих тестов.
1 ответ
Похоже, что где-то между вашим настольным компьютером и вашим компьютером Linode существует узкое место в сети. Некоторые предложения:
- Сравните время пинга с вашего рабочего стола с вашим Linode и другими местами в Интернете, такими как google.com и yahoo.com.
- использование
traceroute your-linode-ip
с вашего рабочего стола, чтобы увидеть, поможет ли это найти горлышко бутылки. - Попробуйте свой Linode, используя http://www.webpagetest.org/ выбрав местоположения Восточного и Западного Побережья, и посмотрите, как они различаются.