Архив метки: performance

Как создать native image с помощью GraalVM

Про GraalVM я уже рассказывал в предыдущей статье. Из набора технологий GraalVM интересным была технология предварительной компиляции Ahead-of-Time compilation (AOT compilation), которая была на время экспериментально добавлена в обычный Java JDK. В Java 17 эта функция была выпилена. Ходят слухи, что в Java 21 она снова появится.

В GraalVM функция предкомпиляции позволяет так называемые нативные приложения (native images). То есть все ваше Java-приложение вместе со всеми потрохами Java SDK заворачивается в исполняемый файл и этот файл можно запускать, на любой другой машине даже если там нет Java JDK. Разумеется, exe-файл получается внушительный, но 1) GraalVM весьма умно при компиляции понимает, что надо в него заворачивать, а что не понадобится 2) когда это нас стали пугать exe файлы размером в 11 мегабайт?

Давно хотел поиграться с этой функцией, чтобы хотя бы в общих чертах понять сам процесс. Я решил попробовать собрать простейшее тестовое Spring-приложение в native-image не меняя в нем ничего, чтобы разобраться, какие танцы с бубном понадобятся, чтобы все заработало само собой просто из коробки.

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

Читать далее

Как измерить latency с помощью tcpdump

Для элементарных замеров latency в торговых приложениях на стадии разработки и QA часто используется перехватчик пакетов tcpdump, а пакеты анализируются с помощью приложения Wireshark.

tcpdump не применяют на PROD, потому что он сам оказывает влияение на производительность системы. Тонкие замеры latency на PROD производятся другими средствами, о чем я расскажу в свое время.

В данной статье я хочу продемонстрировать технику замера latency на примере двух моих приложений SimpleFIXClient и SimpleFIXExecutor. Надеюсь, пошаговая инструкция будет достаточно понятной и не слишком запутает вас.

Читать далее

Книга: Performance Analysis and Tuning on Modern CPUs: Squeeze the last bit of performance from your application

Наткнулся на интересную книгу Performance Analysis and Tuning on Modern CPUs: Squeeze the last bit of performance from your application, которую написал Денис Бахвалов. Денис работает в Intel и отвечает за разработку C++ компиляторов, за оптимизацию и настройку различных приложений под архитектуру процессоров Intel.

Читать далее

Зачем выставлять стартовые параметры -Xmx и -Xms у JVM на одно значение

В стартовых параметрах Java есть два параметра -Xmx и -Xms, которые отвечают за то, какой объем heap вы хотите выделить вашему приложению при старте (-Xms), и какой максимальный объем памяти (-Xmx) вы хотите выделить для программы за все время ее работы.

Опыт показывает, что для улучшения производительности крупного «тяжелого» Java-приложения лучше всего этим двум параметрам давать одно и то же значение. Как выбрать конкретное значение, рассказывается в другой статье. В данной заметке я просто приведу несколько аргументов в пользу этой стратегии.

Читать далее

Утилита isolcpus для изолирования ядер процессора в Linux

В данной статье я расскажу, как на Linux изолировать ядро процессора с помощью утилиты isolcpus.

В результате изоляции планировщик ОС Linux не будет размещать на указанных ядрах никакие пользовательские процессы. Запустить нужный процесс на изолированном ядре возможно будет только с помощью утилиты taskset. В результате изоляции на выделенных ядрах будут работать потоки только вашего процесса, планировщик не будет пытаться перенести их на другие ядра, а также не будет пытаться запустить на указанных ядрах другие процессы, которые бы вытесняли и прерывали потоки исполнения вашего процесса.

Читать далее