Архив за месяц: Июнь 2019

DevOps Amsterdam Meetup 2018 at Optiver — Low-latency Linux [video]

Отличное видео о настройке Linux для low-latency торговых систем.

Реклама

Чистый код как культура программирования

Поднятая недавно тема парадокса «разбитых окон» привела к рождению данного поста. Как говорится, «чисто не там, где убирают, а там, где не сорят«. О важности чистого кода написана Робертом Мартином (Uncle Bob) замечательная книга Clean Code, которую я очень рекомендую почитать, а также посмотреть его видео-лекции на тему чистого кода: умно, кратко, понятно, по делу и с юмором.

Ну, а как же сделать так, чтобы команда в коде не сорила? Помимо устного свода правил, обучения новичков, проверки кода, есть некотоые инструменты, которые помогают каждому программисту в команде автоматически следить за качеством своего и чужого кода и замечать на ранних этапах следы «ржавчины», «разбитые окна» и мусор в коде, еще до того, как наросли сверху слои нового мусора и ржавчины. Чем раньше и быстрее вы будете убирать мусор, тем явнее будет виден новый мусор, тем труднее будет в чистом коде сорить вам и другим разработчикам в команде.

Читать далее

Все дистрибутивы Java на одной странице

Хорошие люди собрались и сделали полезную страницу со ссылками на все известные дистрибутивы Java. Теперь любой разработчик легко может пройти по ссылкам и скачать любую JVM, чтобы пощупать, померять, сравнить.

Low-latency оптимизации JVM

Данная статья является частью более общей статьи об оптимизациях торговой системы на всех уровнях.

JVM предназначена для запуска широкого спектра Java-приложений. Для общего случая параметры, используемые JVM по умолчанию, вполне подойдут. Но если мы хотим добиться определенных результатов производительности, требуется тонкая настройка JVM с помощью определенных стартовых параметров.

Не существует «волшебных» параметров, которые делают в момент ваше приложение быстрее, секретных параметров, которые подходят для всех приложений и ситуаций. Каждый выбранный параметр и измененное значение в нем следует проверять на специальной тестовой платформе. По нескольку раз. По нескольку часов. А потом долго думать, почему результаты тестов показывают снижение или улучшение производительности.

Каждая новая версия Java приносит новые параметры и удаляет другие. Каждая новая версия или билд Java может влиять на производительность в лучшую или худшую сторону. Так что при каждом обновлении версии все замеры производительности надо производить заново.

Следует отметить, что и изменения на уровне железа и операционной системы также могут сказываться на производительности JVM. Какой-то параметр JVM, который улучшал производительность приложения до изменения в ОС, может привести к ухудшению производительности после патча ядра ОС или после изменения какой-то настройки в ней. Так что при каждом обновлении ОС или изменении настройки ОС все замеры производительности надо опять производить заново.

Все приведенное ниже не гарантирует, что в конкретно в вашей ситуации ваше приложение будет работать быстрее. Не следует надеяться, что криво написанное приложение заработает автоматически быстрее при включении тех или иных «волшебных» параметров JVM или настроек ОС. Для достижения low-latency само приложение должно писаться с учетом low-latency.

Параметры приведены для Java 8 HotSpot JVM.

Все настройки JVM можно разбить условно на четыре группы:

  • настройки heap
  • настройки сборщика мусора
  • настройки JIT-компилятора
  • прочие настройки

Читать далее