Jarboot
❤️
Jarboot — это платформа для управления, мониторинга и диагностики локальных и удалённых Java-процессов. Она позволяет управлять, поддерживать и контролировать запуск, остановку и состояние процессов.
В тестовой среде и ежедневной сборке интеграционной среды можно поместить серию скомпилированных выходных файлов jar в согласованный каталог. Jarboot предоставляет дружественный пользовательский интерфейс браузера и HTTP-интерфейс для унифицированного управления запуском, остановкой и состоянием процессов, а также для выполнения команд для отладки целевых процессов.
Английская версия доступна в README.md.
📚 Документация: https://www.yuque.com/jarboot
🍏 Лучшие практики 🔥: пример использования Jarboot с Spring Cloud Alibaba ⭐️
🐳 Расширение: поддержка JDK SPI и Spring SPI, поддержка разработки плагинов.
📦 Загрузка установочного пакета: https://gitee.com/majz0908/jarboot/releases
📺 Видеодемонстрация: видео на Bilibili
Jarboot использует технологии Java Agent и ASM для внедрения кода в целевые Java-процессы. Введённый код не вмешивается в бизнес-логику, он предназначен только для взаимодействия с сервисом Jarboot для выполнения команд. Некоторые команды модифицируют байт-код класса для его расширения. Система команд похожа на систему Arthas. Например, получение информации о JVM, мониторинг состояния потоков, получение информации о стеке потоков и т. д.
Подробная информация об архитектуре доступна в jarboot-server/README.md.
Интерфейс пользователя разработан с использованием Vue3. Серверная часть основана на SpringBoot и предоставляет HTTP-интерфейсы и проксирование статических ресурсов. Через WebSocket сервер отправляет информацию о процессе в интерфейс пользователя в режиме реального времени и поддерживает длительное соединение с запущенным Java-процессом для мониторинга его состояния.
Chrome >=87 Firefox >=78 Safari >=14 Edge >=88
— Скачать с GitHub: https://github.com/majianzheng/jarboot/releases
Использование Docker:
# Сборка образа Docker
mvn clean install -P prod
sh build/docker-push.sh
# Запуск контейнера
sudo docker run -itd --name jarboot -p 9899:9899 mazheng0908/jarboot
При использовании сжатых файлов или Docker этот шаг можно пропустить.
Компиляция исходного кода Jarboot:
# Сначала необходимо подготовить среду разработки JDK17+ и nodeJS16+, затем выполнить:
$ mvn clean install -P prod
Если используется Docker, этот шаг можно опустить.
# Выполнить startup.sh для запуска, в системе Windows использовать startup.cmd.
$ sh startup.sh
Войдите в систему, начальное имя пользователя: jarboot, пароль по умолчанию: jarboot. Когда был добавлен spring-boot-starter-jarboot, будут добавлены 2 Spring отладочные команды: spring.bean и spring.env
$ spring.bean — использование:
$ spring.env <имя> — использование:
Демонстрация того, как использовать обычное не SpringBoot приложение.
<dependency>
<groupId>io.github.majianzheng</groupId>
<artifactId>jarboot-api</artifactId>
<scope>provided</scope>
<version>${jarboot.version}</version>
</dependency>
/**
* Используйте аннотацию Name для определения имени команды
*/
@Name("demo")
@Summary("The command summary")
@Description("The command usage detail")
public class DemoCommandProcessor implements CommandProcessor {
@Override
public String process(CommandSession session, String[] args) {
return "demo SPI command result.";
}
}
public class DemoApplication {
public static void main(String[] args) {
// do something
try {
// Notify completion
JarbootFactory.createAgentService().setStarted();
} catch (Exception e) {
log(e.getMessage());
}
}
}
Просмотр байт-кода класса, использование:
jarboot$ bytes io.github.majianzheng.jarboot.demo.DemoServerApplication
ClassLoader: org.springframework.boot.loader.LaunchedURLClassLoader@31221be2
------
getUser
L0
LINENUMBER 27 L0
...
ILOAD 1
ILOAD 2
IADD
IRETURN
L8
Включите или отключите отображение в реальном времени стандартного вывода (по умолчанию включено), которое будет отображаться на интерфейсе Web UI, включая вывод кода System.out.println, System.err.println и информацию журнала, такую как logger.info("hello").
Примечание: механизм реализации этой функции тщательно разработан, рекомендуется всегда включать её, она не влияет на производительность и может ускорить запуск.
# Включить стандартный вывод в реальном времени
jarboot$ stdout on
# Отключить стандартный вывод в реальном времени
jarboot$ stdout off
# Получить текущий статус, запуск или отключение
jarboot$ stdout
Панель данных в реальном времени текущей системы, нажмите кнопку, чтобы отменить
Декомпиляция
jarboot$ jad [-c] java.lang.String
Просмотр информации о свойствах процесса JVM
jarboot$ jvm
Поиск классов, уже загруженных в JVM
$ sc -d org.springframework.web.context.support.XmlWebApplicationContext
class-info org.springframework.web.context.support.XmlWebApplicationContext
code-source /Users/xxx/work/test/WEB-INF/lib/spring-web-3.2.11.RELEASE.jar
name org.springframework.web.context.support.XmlWebApplicationContext
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name XmlWebApplicationContext
modifier public
annotation
interfaces
super-class +-org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
+-org.springframework.context.support.AbstractRefreshableConfigApplicationContext
+-org.springframework.context.support.AbstractRefreshableApplicationContext
+-org.springframework.core.io.DefaultResourceLoader
``` **Текст запроса написан на языке Java.**
**Перевод текста запроса:**
«+++java.lang.Object
class-loader +++org.apache.catalina.loader.ParallelWebappClassLoader
+++java.net.URLClassLoader@6108b2d7
+++sun.misc.Launcher$AppClassLoader@18b4aac2
+++sun.misc.Launcher$ExtClassLoader@1ddf84b8
classLoaderHash 25131501
### trace
Метод выполнения мониторинга:
```bash
jarboot$ trace io.github.majianzheng.jarboot.demo.DemoServerApplication add
Affect(class count: 2, method count: 1) cost in 63 ms, listenerId: 2
`---ts=2021-06-15 23:34:20;thread_name=http-nio-9900-exec-3;id=13;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@4690b489
`---[0.053485ms] io.github.majianzheng.jarboot.demo.DemoServerApplication:add()
Данные мониторинга выполнения метода:
Наблюдение за выполнением метода io.github.majianzheng.jarboot.demo.DemoServerApplicatio#add
, вывод только при возникновении исключения.
jarboot$ watch io.github.majianzheng.jarboot.demo.DemoServerApplicatio add {params[0], throwExp} -e
Press Ctrl+C to abort.
Affect(class-cnt:1, method-cnt:1) cost in 65 ms.
ts=2018-09-18 10:26:28;result=@ArrayList[
@RequestFacade[org.apache.catalina.connector.RequestFacade@79f922b2],
@NullPointerException[java.lang.NullPointerException],
]
Просмотр информации о текущем потоке и стеке потоков:
jarboot$ thread -n 3
"nioEventLoopGroup-2-1" Id=31 cpuUsage=0.37% deltaTime=0ms time=880ms RUNNABLE
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:448)
at impl.cmd.io.github.majianzheng.jarboot.core.ThreadCommand.processTopBusyThreads(ThreadCommand.java:209)
at impl.cmd.io.github.majianzheng.jarboot.core.ThreadCommand.run(ThreadCommand.java:120)
at basic.io.github.majianzheng.jarboot.core.EnvironmentContext.runCommand(EnvironmentContext.java:162)
at cmd.io.github.majianzheng.jarboot.core.CommandRequestSubscriber.execute(CommandDispatcher.java:35)
at server.io.github.majianzheng.jarboot.core.JarbootBootstrap$1.onText(JarbootBootstrap.java:94)
at io.github.majianzheng.jarboot.core.ws.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:83)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
"C2 CompilerThread1" [Internal] cpuUsage=3.14% deltaTime=6ms time=4599ms
"C2 CompilerThread0" [Internal] cpuUsage=2.28% deltaTime=4ms time=4692ms
#### Classloader
Просмотр дерева наследования classloader, URL, информации о загрузке классов:
```bash
jarboot$ classloader
name numberOfInstances loadedCountTotal
org.springframework.boot.loader.LaunchedURLClassLoader 1 3929
BootstrapClassLoader 1 2623
io.github.majianzheng.jarboot.agent.JarbootClassLoader 1 1780
sun.misc.Launcher$AppClassLoader 1 59
sun.reflect.DelegatingClassLoader 58 58
sun.misc.Launcher$ExtClassLoader 1 18
Affect(row-cnt:6) cost in 35 ms.
Дамп кучи Java, аналогично функции heap dump команды jmap:
jarboot$ heapdump
Просмотр системной информации о процессе:
# Получить все
jarboot$ sysprop
# Получить конкретное свойство
jarboot$ sysprop user.home
Мы используем инструменты Jetbrains для разработки и сборки проекта.
— Электронная почта: 282295811@qq.com — Группа QQ: 663881845 — Группа QQ заполнена, код QR-кода группы WeChat скоро истечёт, пожалуйста, следите за нами в Douyin, присоединяйтесь к группе фанатов после того, как будете следовать за нами. — Номер Douyin: 1077242754
1: Можно настроить уровень приоритета, начиная с целочисленного значения 1, чем больше значение, тем раньше запускается и останавливается в обратном порядке. 2: В разработке можно использовать GitLab». runner, Jenkins и другие подобные инструменты автоматически создают сборку, после чего через скрипт копируют её в указанный каталог Jarboot. Jarboot отслеживает обновления файлов и автоматически перезапускает сервис. В каталоге реализовано противоударное проектирование (в течение определённого времени многократные обновления запускают перезапуск только один раз).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )