🚅 jCuDoS
jCuDoS – это набор CLI-команд для упрощения и автоматизации применения AppCDS ко множеству различных приложений на Spring Boot (как правило, к парку микросервисов одного проекта). Команды могут вызываться как по отдельности, так и все вместе в определенном порядке. В последнем случае они реализуют приведенный ниже алгоритм.
Алгоритм подготовки AppCDS для парка микросервисов
Предусловия
- Имеется множество “толстых” JAR от микросервисов на Spring Boot
- Все JAR-файлы имеют общий корень файловой системы
- Все микросервисы были хотя бы раз запущены с опцией
-XX:DumpLoadedClassList
Входные данные
- Glob к спискам классов, полученным опцией
-XX:DumpLoadedClassList
- Glob к “толстым” JAR
- Путь к общей выходной директории (желаемый, например,
_appcds
)
Процесс
A. Обработка списков классов
- Выявить общую часть
- Сохранить ее в
_appcds/_shared/list/classes.list
0️⃣
B. Обработка каждой “толстой” JAR
Определить имя стартового класса.
Если определить не удалось, пропустить обработку архива.
Запомнить имя приложения как “голое” имя класса в нижнем регистре (далее –
<appName>
)Сохранить имя стартового класса в
_appcds/<appName>/start-class.txt
1️⃣Распаковать либы каждой толстой JAR в
_appcds/<appName>/lib/
Сконвертировать толстую JAR в
_appcds/<appName>/lib/<appName>.slim.jar
2️⃣
C. Создание общего архива
Выявить общую часть либ по листингам директорий в
_appcds/<appName>/lib/
Скопировать все выявленные либы в
_appcds/_shared/lib/
Составить файл
_appcds/_shared/list/classpath.arg
5️⃣ из абсолютных путей к скопированным либамЗапомнить список абсолютных путей к общим либам 3️⃣
Перейти в директорию
_appcds
и выполнить там:java -Xshare:dump \ -XX:SharedClassListFile=_shared/list/classes.list \ -XX:SharedArchiveFile=_shared/jsa/classes.jsa \ @_shared/list/classpath.arg &> log/dump.log
Здесь пригодятся:
_appcds/_shared/list/classes.list
0️⃣ и_appcds/_shared/list/classpath.arg
5️⃣
D. Подготовка к запуску микросервисов
Удалить из директорий
_appcds/<appName>/lib/
либы по именам, взятым из списка общих либ 3️⃣Составить файл
_appcds/<appName>/appcds.arg
4️⃣ из:опции
-XX:SharedArchiveFile=_appcds/_shared/jsa/classes.jsa
опции
-classpath
, состоящей из:списка общих либ 3️⃣
списка своих либ, взятого из листинга директории
_appcds/<appName>/lib/
Туда должна будет входить и тонкая JAR
_appcds/<appName>/lib/<appName>.slim.jar
2️⃣стартового класса 1️⃣
Запуск микросервиса с AppCDS (за рамками автоматизации)
- Заменить в скрипте запуска опцию
-jar <appName>.jar
на@appcds.arg
4️⃣
Статус проекта
Основная разработка jCuDoS завершена, я опробовал его на тестовом парке микросервисов и получил предварительные результаты. Для полноценного применения его необходимо более тщательно протестировать и снабдить документацией. Однако эти работы не ведутся.