2016-07-25 5 views
0

У меня есть приложение java tomcat, интенсивно использующее I/O, где я хочу выполнить htmlunit-тесты в более современной кластерной среде. Поэтому я также принял во внимание докер, который может обеспечить интересные функции, применив рой и т. Д.Интенсивное java-приложение i/o ускоряет работу на докере на ограниченных ресурсах

Тестирование выполняется против oracle db и создает трафик также для локального ввода-вывода. Мне просто интересно узнать один вопрос:

Когда я запускаю тесты, используя обычную установку продукта с ограниченными ресурсами (коэффициент нагрузки15 поднимается выше 2 на 1 процессорную систему), время выполнения теста составляет ~ 35% медленнее, чем на одной и той же среде (ограниченные ресурсы) с использованием докционированного подхода к выполнению теста. Если для поддержания коэффициента нагрузки ниже 1 (в системе с 1 процессором) достаточно ресурсов, время работы между простой установкой и установкой докеры практически одинаково.

Я ищу способы объяснить это. Это о некоторых механизмах кэширования файловых систем наложения? Где посмотреть, когда это нужно?

+1

Точный ответ потребует полного анализа системы, но пример того, как это может произойти, заключается в том, что вы создаете много операций ввода-вывода параллельно. Если вы столкнулись с ограничениями на процессор, ваш ввод/вывод будет более сериализован и, следовательно, быстрее. Или в более общих терминах: профили деградации производительности будут варьироваться в зависимости от того, какое узкое место попало. – biziclop

ответ

1

Этот ответ очень специфичен для вашего приложения, поэтому все, что вы можете сделать, это проверить различные настройки хранилища докеров.

Сначала проверьте приложение с помощью local data volume. Либо local volume, либо mounting a local directory as a volume. Это устраняет большую часть накладных расходов и должно быть как можно ближе к скорости ввода-вывода, так как вы получите.

Если ваше приложение работает на полной скорости, вероятно, docker storage driver является виновником, поэтому вы можете попробовать альтернативные варианты демона докеров, чтобы увидеть, что работает лучше всего.

  • Не используйте devicemapper в режиме цикла, когда-либо! --storage-driver==devicemapper \ --storage-opt dm.loop*
  • AUFS --storage-driver==aufs
  • OverlayFS --storage-driver==overlay2 или overlay на предварительно ядра 4.x.
  • Непосредственно LVM --storage-driver==devicemapper \ --storage-opt dm.datadev=/dev/dockervg/datalv \ --storage-opt dm.metadatadev=/dev/dockervg/metadatalv
    Для этого требуется некоторая установка lvm.

Испытание с каждым водителем.
Данные вашего контейнера будут уничтожены при каждом обмене данными.
Затем используйте лучший драйвер.

Установка локального тома, вероятно, будет самой быстрой, если вы выберете ее, то вы будете иметь дело с данными, хранящимися за пределами контейнера.

+0

Спасибо, что ответили. Я очень сожалею об этом, но я его перепутал: это докционированный подход, который на 35% быстрее при выполнении теста над простой установкой на ограниченных ресурсах ... Я просто хочу понять, почему. – ferdy

+0

@ferdy О, я понимаю, что вы имеете в виду ... но это странная ситуация. Опять же, это очень специфично для вашего приложения и вашей системы, поэтому вы не можете получить хороший ответ. Не могли бы вы добавить более подробную информацию о настройке ограниченных ресурсов по сравнению с другой настройкой? – Matt

+0

Вы можете получить дополнительную помощь в переносе этого вопроса на сайт стека unix или, возможно, сбой сервера, как только вы добавите детали системы. – Matt