Назад | Перейти на главную страницу

Чтение производительности Apache 2 с файлового сервера NFS на EC2

Я пытаюсь настроить среду с ELB и 4 EC2 m1.large, на которой Apache 2 читает с другого сервера EC2 m1.small NFS v3.

Я использую Apache Benchmark для измерения производительности запросов в секунду с помощью следующей команды:

ab -k -n100 -c1 http://localhost/index.html

Я монтирую общий ресурс NFS с помощью -o noatime, _netdev

Экземпляры находятся в Северной Калифорнии.

west-1a имеет 2 веб-сервера и сервер NFS. west-1c имеет 2 веб-сервера.

Всякий раз, когда я запускаю ab для чтения файла с локального тома EBS, я получаю согласованные результаты, но когда я запускаю его для чтения из общего ресурса NFS, результаты меняются более чем на 100% при последовательном выполнении теста:

for i in $(seq 100); do ab -k -n 100 -c 1 http://localhost/index.html | grep -i "requests per second" ; done

Пример вывода:

Requests per second: 0.36 [#/sec] (mean)
Requests per second: 2.39 [#/sec] (mean)
Requests per second: 117.12 [#/sec] (mean)
Requests per second: 128.13 [#/sec] (mean)
Requests per second: 349.67 [#/sec] (mean)
Requests per second: 161.31 [#/sec] (mean)
Requests per second: 87.54 [#/sec] (mean)
Requests per second: 132.84 [#/sec] (mean)
Requests per second: 226.37 [#/sec] (mean)
Requests per second: 258.42 [#/sec] (mean)
Requests per second: 258.02 [#/sec] (mean)
Requests per second: 272.02 [#/sec] (mean)
Requests per second: 211.56 [#/sec] (mean)
Requests per second: 180.66 [#/sec] (mean)
Requests per second: 209.89 [#/sec] (mean)
Requests per second: 0.37 [#/sec] (mean)
Requests per second: 20.62 [#/sec] (mean)
Requests per second: 38.24 [#/sec] (mean)
Requests per second: 37.95 [#/sec] (mean)
Requests per second: 91.70 [#/sec] (mean)
Requests per second: 119.31 [#/sec] (mean)
Requests per second: 112.17 [#/sec] (mean)
Requests per second: 118.26 [#/sec] (mean)
Requests per second: 119.06 [#/sec] (mean)
Requests per second: 69.67 [#/sec] (mean)
Requests per second: 117.91 [#/sec] (mean)
Requests per second: 118.93 [#/sec] (mean)
Requests per second: 119.10 [#/sec] (mean)
Requests per second: 120.92 [#/sec] (mean)
Requests per second: 121.33 [#/sec] (mean)
Requests per second: 1.42 [#/sec] (mean)
Requests per second: 106.74 [#/sec] (mean)
Requests per second: 401.16 [#/sec] (mean)
Requests per second: 404.73 [#/sec] (mean)
Requests per second: 406.82 [#/sec] (mean)
Requests per second: 417.38 [#/sec] (mean)
Requests per second: 412.92 [#/sec] (mean)
Requests per second: 420.86 [#/sec] (mean)
Requests per second: 419.59 [#/sec] (mean)
Requests per second: 415.37 [#/sec] (mean)
Requests per second: 388.77 [#/sec] (mean)
Requests per second: 413.89 [#/sec] (mean)
Requests per second: 409.92 [#/sec] (mean)
Requests per second: 416.84 [#/sec] (mean)
Requests per second: 11.53 [#/sec] (mean)
Requests per second: 38.46 [#/sec] (mean)
Requests per second: 70.85 [#/sec] (mean)
Requests per second: 71.28 [#/sec] (mean)
Requests per second: 60.33 [#/sec] (mean)
Requests per second: 55.83 [#/sec] (mean)
Requests per second: 41.74 [#/sec] (mean)
Requests per second: 46.33 [#/sec] (mean)
Requests per second: 75.05 [#/sec] (mean)
Requests per second: 95.06 [#/sec] (mean)
Requests per second: 96.73 [#/sec] (mean)
Requests per second: 97.15 [#/sec] (mean)
Requests per second: 96.70 [#/sec] (mean)
Requests per second: 57.88 [#/sec] (mean)

Мой вопрос: может ли это быть связано с сетью AWS, и можно ли что-то изменить, чтобы получить более стабильные результаты? Я поигрался с перемещением сервера NFS в другую зону доступности, и это не повлияло на фактор несогласованности.

PS: Это происходит со всех веб-серверов.

Таким образом, есть много подвижных частей, на которые стоит обратить внимание в отношении сетевого хранилища на Amazon. Так что придется разбить этот вопрос на несколько частей. Вы можете посмотреть на iSCSI в качестве альтернативы NFS, потому что она известна своими проблемами с такими вещами, но я сделаю все возможное, чтобы помочь.

Итак, во-первых, если вы используете elb для этого экземпляра сервера NFS, то это уже сетевое хранилище. Я скажу еще раз по-другому, ваше сетевое хранилище имеет сетевое хранилище. Чтобы усложнить ситуацию, каждая AWS разделяет сеть (и уменьшает трафик с ее сети) в зависимости от размера экземпляра, поэтому при использовании M1 small вы получаете очень небольшую производительность сети, они отмечают это как "НИЗКИЙ"

Следующее, что вам также нужно отслеживать, - это кэширование на каждой из ваших машин M1.large. Поскольку это не локальный диск, сервер не знает, находится ли файл на диске, поэтому он не будет кэшировать файл в памяти на локальном компьютере, поэтому каждый веб-запрос отправляется на m1.small и получает данные, которые требуют времени, вы можете захотеть к включить кеширование но ваш пробег может сильно зависеть от развертывания кода.

Последнее, на что я бы посоветовал вам взглянуть, - это проверить настройки Apache и посмотреть, сможете ли вы их улучшить ",25 советов по настройке производительности Apache", и, возможно, играя с Работник МПМ и Предварительные вилки MPM

PS На данный момент ваш m1.small имеет 1,7 ГБ памяти, поэтому просто следите за тем, чтобы он попытался кэшировать элементы в памяти, которые поступают с диска. Я не уверен, насколько большим будет ваш сайт, но что-то нужно иметь в виду .

Я собираюсь предположить, что причина, по которой вы установили "-c" в 1, заключалась в том, что вы запустили его на двухъядерном сервере, попробуйте запустить его на другом компьютере и попробуйте установить его на 10 или большее число, если это не сработает. поместите все это под ELB, а затем возьмите другую машину и откройте много потоков, на elb есть период разминки, просто хедз-ап