Сколько стоит ведение журнала трассировки / отладки в производстве? Какова производительность при записи в файл? В этих тестах я сравниваю влияние производительности на уровни ведения журналов ( error
, warn
, info
, debug
, trace
) и добавление журналов (консольное приложение, файловое приложение) в нескольких реальных случаях использования OptaPlanner .
Методология сравнения
- Реализация ведения журнала: SFL4J
1.7.2
с Logback 1.0.9 (Logback — духовный преемник Log4J 1) - Конфигурация журнала (
logback.xml
):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < appender name = "appender" class = "ch.qos.logback.core.ConsoleAppender" > < encoder > < pattern >%d [%t] %-5p %m%n</ pattern > </ encoder > </ appender > < logger name = "org.optaplanner" level = "info" /> < root level = "warn" > < appender-ref ref = "appender" /> </ root > </ configuration > |
Что приводит к выводу, как это:
1
2
3
4
|
2015-02-23 08:07:35,310 [main] INFO Solving started: time spent (18), best score (uninitialized /0hard/0soft ), environment mode (REPRODUCIBLE), random (JDK with seed 0). 2015-02-23 08:07:35,363 [main] INFO Construction Heuristic phase (0) ended: step total (6), time spent (71), best score (0hard /-5460soft ). 2015-02-23 08:07:35,641 [main] INFO Local Search phase (1) ended: step total (1), time spent (349), best score (0hard /-5460soft ). 2015-02-23 08:07:35,652 [main] INFO Solving ended: time spent (360), best score (0hard /-5460soft ), average calculate count per second (905), environment mode (REPRODUCIBLE). |
- Аргументы VM:
-Xmx1536M -server
Программное обеспечение:Linux 3.2.0-59-generic-pae
Аппаратное обеспечение:Intel® Xeon® CPU W3550 @ 3.07GHz
- Каждый прогон решает 13 проблем планирования с OptaPlanner . Каждая проблема планирования длится 5 минут. Он начинается с 30-секундного прогрева JVM, который сбрасывается.
- Решение проблемы планирования не требует ввода-вывода (за исключением нескольких миллисекунд во время запуска для загрузки ввода). Один процессор полностью насыщен. Он постоянно создает много недолговечных объектов, и GC собирает их впоследствии.
- Тесты измеряют количество баллов, которое можно рассчитать за миллисекунду. Чем выше, тем лучше. Расчет баллов для предлагаемого решения по планированию нетривиален: он включает в себя множество вычислений, в том числе проверку на конфликты между каждым объектом и любым другим объектом.
Чтобы воспроизвести эти тесты локально, соберите optaplanner из исходного кода и запустите основной класс GeneralOptaPlannerBenchmarkApp .
Уровни ведения журнала: error
, warn
, info
, debug
и trace
Я запускал один и тот же набор тестов несколько раз с другим уровнем ведения журнала OptaPlanner :
1
|
< logger name = "org.optaplanner" level = "error|warn|info|debug|trace" /> |
Все остальные библиотеки (включая Drools ) были настроены на ведение журнала предупреждений. Детальность ведения журнала в OptaPlanner сильно различается на уровне:
-
error
иwarn
: 0 строк -
info
: 4 строки на тест, поэтому менее 1 строки в минуту . -
debug
: 1 строка за шаг, поэтому примерно 1 в секунду для поиска по Табу и более для позднего принятия -
trace
: 1 строка за ход, поэтому от 1к до 120к в секунду
Это необработанные контрольные цифры, измеряемые в подсчете вычисления среднего балла в секунду (чем выше, тем лучше):
Уровень ведения журнала | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
ошибка | 66065 | 61866 | 119230 | 32759 | 6282 | 8370 | 10330 | 7121 | 4001 | 3718 | 1248 |
предостерегать | 66943 | 62191 | 122678 | 32688 | 6297 | 8303 | 10517 | 7182 | 3942 | 3660 | 1278 |
Информация | 67393 | 63192 | 123734 | 32461 | 6188 | 8299 | 10330 | 7108 | 3944 | 3654 | 1252 |
отлаживать | 60254 | 55938 | 118917 | 32735 | 6054 | 8062 | 10310 | 7104 | 3904 | 3586 | 1244 |
след | 25159 | 25214 | 40346 | 20629 | 5585 | 7347 | 9229 | 6642 | 3360 | 3138 | 1156 |
Масштаб набора данных | 120k | 1920k | 500k | 250000k | 217k | 145k | 1705k | 1613k | 18k | 12k | 4k |
Алгоритм | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск |
Я игнорирую разницу между ошибкой, предупреждением и регистрацией информации: разница не более 4%, прогоны воспроизводимы на 100%, и я не использовал компьютер во время бенчмаркинга, поэтому я полагаю, что в разнице можно обвинить компиляция точки доступа JIT или удача процессора.
Сколько стоит включение ведения журнала отладки или трассировки в производительности (в отличие от ведения журнала информации)?
Уровень ведения журнала | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
отлаживать | -10,59% | -11,48% | -3,89% | 0,84% | -2,17% | -2,86% | -0,19% | -0,06% | -1,01% | -1,86% | -0,64% |
след | -62,67% | -60,10% | -67,39% | -36,45% | -9,74% | -11,47% | -10,66% | -6,56% | -14,81% | -14,12% | -7,67% |
Масштаб набора данных | 120k | 1920k | 500k | 250000k | 217k | 145k | 1705k | 1613k | 18k | 12k | 4k |
Алгоритм | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск |
Регистрация трассировки почти в 4 раза медленнее! Влияние ведения журнала отладки намного меньше, но все же заметно во многих случаях. Сценарии использования, использующие Late Acceptance (балансировка облачных вычислений и планирование курса), которые, следовательно, делают больше ведения журнала отладки, по-видимому, имеют более высокую потерю производительности (хотя это может быть в глазах смотрящего).
Но подождите секунду! В этих тестах используется консольный приложение. Что если они используют файловый аппендер, как в производстве?
Регистрация дополнений: добавление в консоль или файл
На рабочем сервере добавление в консоль часто означает потерю информации журнала, когда она попадает в /dev/null
. Также во время разработки консольный буфер IDE может переполниться, что приведет к потере строк журнала. Одним из способов избежать этих проблем является настройка файлового приложения. Чтобы сэкономить место на диске, я использовал приложение для добавления файлов, которое сжимает старые файлы журналов в zip-файлы размером 5 МБ:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< appender name = "appender" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file >local/log/optaplanner.log</ file > < rollingPolicy class = "ch.qos.logback.core.rolling.FixedWindowRollingPolicy" > < fileNamePattern >local/log/optaplanner.%i.log.zip</ fileNamePattern > < minIndex >1</ minIndex > < maxIndex >3</ maxIndex > </ rollingPolicy > < triggeringPolicy class = "ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy" > < maxFileSize >5MB</ maxFileSize > </ triggeringPolicy > < encoder > < pattern >%d [%t] %-5p %m%n</ pattern > </ encoder > </ appender > |
Это необработанные контрольные цифры, измеренные снова при подсчете среднего значения в секунду (чем выше, тем лучше):
Регистрация приложений и уровня | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
Информация о консоли | 67393 | 63192 | 123734 | 32461 | 6188 | 8299 | 10330 | 7108 | 3944 | 3654 | 1252 |
Информация о файле | 66497 | 63065 | 123758 | 33195 | 6302 | 8338 | 10467 | 7238 | 4022 | 3706 | 1256 |
Консольная отладка | 60254 | 55938 | 118917 | 32735 | 6054 | 8062 | 10310 | 7104 | 3904 | 3586 | 1244 |
Отладка файла | 55248 | 52261 | 122144 | 31220 | 6223 | 8241 | 10482 | 7118 | 3945 | 3589 | 1238 |
Трассировка консоли | 25159 | 25214 | 40346 | 20629 | 5585 | 7347 | 9229 | 6642 | 3360 | 3138 | 1156 |
Трассировка файлов | 10162 | 10708 | 12528 | 9555 | 4416 | 5167 | 6764 | 5532 | 2789 | 2678 | 1101 |
Сколько стоит файл appender по производительности (по сравнению с консольным приложением)?
Уровень ведения журнала | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
Информация | -1,33% | -0,20% | 0,02% | 2,26% | 1,84% | 0,47% | 1,33% | 1,83% | 1,98% | 1,42% | 0,32% |
отлаживать | -8,31% | -6,57% | 2,71% | -4,63% | 2,79% | 2,22% | 1,67% | 0,20% | 1,05% | 0,08% | -0,48% |
след | -59,61% | -57,53% | -68,95% | -53,68% | -20,93% | -29,67% | -26,71% | -16,71% | -16,99% | -14,66% | -4,76% |
Для регистрации информации это не имеет большого значения. Для ведения журнала отладки есть заметное замедление для меньшинства случаев. Регистрация трассировки выполняется почти в 4 раза медленнее! И это соответствует нашему предыдущему наблюдению: в худшем случае (переназначение компьютера B1) регистрация трассировки в файл на 90% медленнее, чем запись информации в консоль.
Вывод
Как и вся диагностическая информация, регистрация ведется за счет снижения производительности. Хорошие библиотеки тщательно выбирают уровень регистрации каждого оператора, чтобы сбалансировать диагностические потребности, многословность и влияние на производительность.
Вот моя рекомендация для пользователей OptaPlanner : В разработке используйте по умолчанию debug
(или trace
) с консольным приложением, чтобы вы могли видеть, что происходит. В производстве по умолчанию используйте ведение журнала warn
(или info
) с файловым приложением, чтобы сохранить важную информацию.
Ссылка: | OptaPlanner — Как быстро ведется регистрация? от нашего партнера JCG Джеффри Де Смета в блоге OptaPlanner . |