Arthas — это инструмент диагностики Java с открытым исходным кодом от Alibaba. С его помощью мы можем отслеживать и устранять неполадки в программах Java. Тем не менее, он также предоставляет очень удобную функцию горячего обновления Java.
Так называемое горячее обновление Java относится к обновлению и замене кода без перезапуска проекта. Его можно использовать для обновления программ Java без простоев, особенно для тех проектов Java, запуск которых требует много времени.
Использование Arthas на самом деле очень просто.Он предоставляет нам пакет Jar.Нам нужно только загрузить Jar на локальный компьютер, а затем запустить пакет Jar, чтобы использовать его функции в обычном режиме.
Краткое описание функции Артаса
Артас может помочь вам решить (из официальных источников), когда вы сталкиваетесь со следующими похожими проблемами, и вы беспомощны:
- Из какого пакета jar загружается этот класс? Почему сообщается о различных исключениях, связанных с классом?
- Почему код, который я изменил, не выполняется? Это потому, что я не совершал? Ветвь неправильная?
- Если вы столкнулись с проблемой и не можете отладить ее онлайн, можете ли вы опубликовать ее повторно, только добавив журнал?
- Есть проблема с обработкой данных пользователя онлайн, но ее нельзя отладить онлайн или воспроизвести офлайн!
- Есть ли глобальный вид, чтобы увидеть работоспособность системы?
- Есть ли способ отслеживать рабочее состояние JVM в реальном времени?
- Как быстро найти горячие точки приложения и сгенерировать график пламени?
Arthas поддерживает JDK 6+ и поддерживает Linux/Mac/Winodws, использует интерактивный режим командной строки и предоставляет богатые функции автозаполнения вкладок для дальнейшего облегчения обнаружения и диагностики проблем.
Артас использует
Шаги по использованию Артаса следующие.
Шаг 1: Загрузите Артаса
Во-первых, давайте загрузим пакет Jar Артаса на локальный сервер, его адрес загрузки:Alibaba.GitHub.IO/art has/art is very…
Шаг 2: Запустите Артаса
Нам просто нужно использовать обычную команду запуска пакета jar:java -jar arthas-boot.jar
Чтобы запустить Arthas, рабочий интерфейс после успешного запуска выглядит следующим образом:
Как показано на рисунке выше, Arthas успешно запускается.
Советы: когда мы запускаем команду java -jar arthas-boot.jar, нам сначала нужно переключить каталог на расположение пакета jar, чтобы запустить Arthas в обычном режиме.
Шаг 3: Запустите Артаса
После того, как мы запустим Arthas, в соответствии с подсказкой на рисунке выше, нам нужно выбрать процесс Java для отладки.Например, мы вводим «4», чтобы контролировать тестовую программу Java, написанную мной.Результаты выполнения следующие:
Когда появляется логотип Arthas, это означает, что Arthas нормально загрузил процесс Java.
Шаг 4: Управляйте Артасом
Когда Артас успешно загружает процесс Java, мы можем вводить соответствующие команды для просмотра соответствующей информации.
Если мы рассматриваем локальную среду в качестве производственного сервера, нам нужно проверить, является ли запущенная программа Java последней версией.
До Артаса наши обычные шаги были такими:
- Найдите соответствующий пакет jar (или военный пакет);
- Загрузите пакет jar (или военный пакет) локально;
- Найдите соответствующий класс для распаковки;
- Затем перетащите разархивированный файл класса в компилятор Java (Idea или Eclipse), чтобы проверить, является ли это последним кодом.
Но если используется Arthas, то мы можем напрямую скомпилировать байт-код в обычный код Java с помощью команды декомпиляции, а затем подтвердить, является ли это последним кодом. нам просто нужно выполнитьjad
Команды достаточно, а пример реализации такой:
Таким образом, мы можем напрямую проверить, является ли выпущенная программа последней версией.
Мало того, мы также можем использовать Arthas для мониторинга работы всей программы, как показано на следующем рисунке:
Мы также можем использовать Arthas для просмотра некоторой информации, связанной с JVM, как показано на следующем рисунке:
Чтобы узнать больше о возможностях Arthas, посетите:Alibaba.GitHub.IO/art has/com…
Горячее обновление кода Java
Предположим, наш исходный код выглядит так:
package com.example;
import java.util.concurrent.TimeUnit;
public class App {
public static void main(String[] args) throws InterruptedException {
while (true) { // 每两秒钟打印一条信息
TimeUnit.SECONDS.sleep(3);
sayHi();
}
}
private static void sayHi() {
// 需要修改的标识
boolean flag = true;
if (flag) {
System.out.println("Hello,Java.");
} else {
System.out.println("Hello,Java中文社群.");
}
}
}
теперь мы хотимflag
переменная кfalse
Просто сделайте это так:
- Скомпилируйте новый Java-код в байт-код с помощью встроенного в память инструмента компиляции Arthas;
- Использование Артаса
redefine
Команда реализует горячее обновление.
1. Скомпилируйте байт-код
Во-первых, нам нужно скомпилировать новый Java-код в байт-код, который мы можем предоставить через Arthas.mc
выполнение команды,mc
является аббревиатурой компилятора памяти.
Пример реализации следующий:
[arthas@3478]$ mc /Users/admin/Desktop/App.java -d /Users/admin/Desktop
Memory compiler output:
/Users/admin/Desktop/com/example/App.class
Affect(row-cnt:1) cost in 390 ms.
в-d
Указывает место хранения скомпилированных файлов.
Совет: мы также можем использовать байт-код, сгенерированный javac App.java, который аналогичен этому шагу.
2. Выполните горячее обновление
Когда у нас есть файл байт-кода, мы можем использоватьredefine
Команда для достижения горячего обновления, пример реализации выглядит следующим образом:
[arthas@51787]$ redefine /Users/admin/Desktop/com/example/App.class
redefine success, size: 1
Из вышеприведенных результатов видно, что горячее обновление выполнено успешно, в это время переходим в консоль для просмотра результатов выполнения, как показано на следующем рисунке:
Это указывает на то, что выполнение горячего обновления действительно прошло успешно.
Примечания к горячему обновлению Артаса
Существуют некоторые ограничения на использование функции горячего обновления. Мы можем использовать ее только для изменения некоторых бизнес-кодов внутри метода. Если у нас есть какое-либо из следующих условий, горячее обновление не будет выполнено:
- Добавить атрибуты класса (поля класса);
- Добавить или удалить методы;
- Замените текущий метод.
Последнее нам нужно объяснить отдельно, если мы изменим приведенный выше пример на следующий код:
package com.example;
import java.util.concurrent.TimeUnit;
public class App {
public static void main(String[] args) throws InterruptedException {
while (true) { // 每两秒钟打印一条信息
TimeUnit.SECONDS.sleep(3);
boolean flag = true;
if (flag) {
System.out.println("Hello,Java.");
} else {
System.out.println("Hello,Java中文社群.");
}
}
}
}
Затем мы выполним модификацию операции горячего обновления в это время.flag
Значение , то выполнение завершается неудачно, потому что мы заменяем выполняемый метод, и код в нашем обычном примере завершается успешно, потому что мы находимся вwhile
В беспроводной петле был вызван другой метод, и этот метод использовался с перерывами, поэтому замена прошла успешно.
Суммировать
В этой статье мы говорили о концепции Arthas и конкретном процессе использования.Arthas на самом деле обычная программа Java.Мы можем использоватьjava -jar arthas-boot.jar
чтобы запустить его, а затем выберите процесс Java, которым мы хотим управлять, чтобы можно было реализовать мониторинг состояния и другие операции.
Во второй половине статьи мы представляем функцию горячего обновления Артаса, а горячее обновление, по сути, требует только использованияredefine
Команда для загрузки нового файла байт-кода для обеспечения горячего обновления, но следует отметить, что горячее обновление не может заменить работающий метод, оно может изменить только бизнес-код внутри метода, если поле класса изменено или метод класса изменен, Тогда горячее обновление не удастся.
PS: Горячие обновления какое-то время — это круто, но при реальном использовании безопасность производственной среды должна быть полностью оценена. Если вы действительно хотите его использовать, вы должны позволить соответствующему ответственному лицу разобраться с этим лично, ведь «стабильность» и «безопасность» - это первые железные законы, которым следует производственная среда.
Подпишитесь на официальный аккаунт «Java Chinese Community» и ответьте на «Галантные товары», чтобы получить 50 оригинальных галантерейных товаров.Топ-лист.