Мониторинг Java-программ (локальных и удаленных) с помощью JvisualVM

Java задняя часть сервер VisualVM

0 причина

Если вам не интересно, вы можете прямо из1 Локальный мониторинг программы Javaначать смотреть

0.1 Найдите проблему

использоватьtopКоманда для проверки памяти, используемой программой Java, которая превышает установленное максимальное использование памяти. (topИнтерфейс смотрит наRESЗначение поля, способ установки максимальной памяти кучи для запуска программы Java:-Xmxметод)

Это результат моего топа, который составляет около 650 МБ.

top查看进程运行状态

Это мой сценарий для выполнения Java-программы, вы можете видеть -Xmx500m, указано 500 МБ максимальной используемой памяти кучи.

运行Java程序的运行脚本

0.2 Решение проблем

  1. Запросtopв результате командыRESКонкретный смысл поляПамять, используемая процессом, даже если она не выгружена.
  2. Запрос-XmxЗначение - максимальная память кучи, используемая программой Java.
  3. Как видно из вышеизложенного, эти два значения не соответствуют друг другу. В дополнение к памяти кучи в Java также есть память стека. Таким образом, более 500 МБ, которые мы установили, являются нормальными.

Учитывая это, как мы можем контролировать использование памяти Java-программами? После некоторых поисков я узнал о jvisualvm, который поставляется с Java, но учебник, который я нашел, следил за работой и наступил на множество ям. Вот краткое изложение всего процесса.

1 Локальный мониторинг программы Java

1.1 Запустите jvisualvm локально

существуетJDKкорневая директорияbinнашел в папкеjvisualvm, введите команду прямо в терминалеjvisualvmВы можете запустить его, и тогда вы увидите работающий интерфейс.

jVisualVM界面

Затем я случайным образом запускаю Java-программу, которая не закрывается сразу, например:

public class Main {

    public static void main(String[] args) throws InterruptedException {
        for (int i = 10000; i > 0; i--) {
            System.out.println("Hello World!");
            Thread.sleep(1000);
        }
    }
}

Затем мы видимjvisualvmинтерфейс, вы можете увидеть нашу запущенную программу справа, дважды щелкните, чтобы увидеть нашу программу справа:

Main程序在VisualVM中的展示

Конкретный контент мониторинга пока не будет представлен, и мы продолжим говорить о методе запуска.

1.2 VusalVM из IntelliJ IDEA

я используюIntelliJ Ideaразвивались в фоновом режиме. существуетIntelliJ Ideaесть плагинVusualVM Luncher

После завершения установки перезапустите IDEA, и тогда вы увидите, где она работала до этого:

Если окно jvisualvm, с которым вы экспериментировали, все еще открыто, вы можете сначала закрыть его. затем используйтеRun With VisualVMЗапустите программу, впервые появится интерфейс настройки:

Выберите корневой каталог JDK,binв папкеjvisualvmВсе, завершаем настройку, запускаем программу и можно увидеть автозагрузкуVisualVM, вы можете напрямую открыть работающее приложение под Windows, но не на Mac, вы должны дважды щелкнуть его самостоятельно.

2 Удаленный мониторинг программ Java

Серверных разработок много, и пакеты тоже разные. Мы напрямую набрали пакет Jar, а затем использовали команду jar для непосредственного запуска пакета jar. В этой статье представлен только метод запуска пакета jar. Другие, такие как война, используют Tomcat или что-то еще, вы можете искать в Интернете в соответствии с конкретной средой вашей собственной разработки. Но обратите внимание2.3Как упоминалось в этом шаге, на этом шаге я уже давно наступил на яму.

2.1 Конфигурация удаленного сервера JXM

в корневом каталоге JDK на удаленном сервере/jre/lib/managementпапка, положитьjmxremote.password.templateскопируйте файлjmxremote.password, затем откройтеjmxremote.passwordдокумент.

Раскомментируйте две строки внутри,monitorRoleиcontrolRoleэто имя пользователя,QEDиR&DЭто пароли, и, наконец, изменили пароль. Конечно, вы можете использовать тот же формат, чтобы добавить пользователей самостоятельно. Разрешения для пользователей находятся вjmxremote.accessНастроено в файле, разрешения этих двух ролей были настроены по умолчанию.Если вы добавляете пользователя самостоятельно, вам нужно добавить соответствующую конфигурацию в этот файл, мы будем использовать его на данный моментcontrolRoleЭта роль, потому что у него больше разрешений:

#monitorRole QED
#controlRole R&D

2.2 Изменить параметры запуска jar

Добавьте следующие параметры при запуске jar без новой строки:

-Djava.rmi.server.hostname=10.40.2.90 -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true

hostnameадрес хоста,portЭто номер порта, пожалуйста, убедитесь, что этот номер порта не занят.sslХотите вы шифровать или нет, среда разработки, которую я здесь привел, не будет зашифрована.authenticateНезависимо от того, хотите ли вы аутентификацию пользователя или нет, пароль учетной записиПредыдущийнастроен в.

Затем перезапустите программу.

2.3 Настройка брандмауэра

Постучите по доске, обратите внимание здесь

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

2.4 Настройка jvisualvm

слева远程щелкните правой кнопкой мыши添加远程主机:

После заполнения информации вы можете увидеть слева远程Далее есть еще один удаленный хост, затем щелкните правой кнопкой мыши и выберите添加JXM链接:

Затем свяжите ОК.

3 Как использовать VisualVM

Затем я проследил за удаленной программой через VisualVM и увидел, что память кучи используется только более чем на 300 МБ.

В интернете довольно много статей по использованию VisualVM Вот одну рекомендую, считаю не плохой, поэтому больше писать не буду:

Анализ производительности и настройка с помощью VisualVM