[comment]: # ({00e36b2a-00e36b2a})
# 5. Java gateway

[comment]: # ({/00e36b2a-00e36b2a})

[comment]: # ({79079175-02637e76})
#### Обзор

Java gateway Zabbix можно установить из [исходного кода](/manual/installation/install#installing-java-gateway) или [пакетов](/manual/installation/install_from_packages).

Нативная поддержка мониторинга приложений JMX существует в виде демона Zabbix под названием "Zabbix Java gateway".
Zabbix Java gateway — это демон, написанный на Java.
Чтобы узнать значение определенного счетчика JMX на узле сети, сервер Zabbix выполняет запрос к Zabbix Java gateway, который использует [JMX management API](http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/) для удаленного запроса к нужному приложению.
Для приложения не требуется установка дополнительного ПО, его достаточно запустить с параметром `-Dcom.sun.management.jmxremote` в командной строке.

Java gateway принимает входящие подключения от сервера Zabbix или прокси и может использоваться только как "passive proxy".
В отличие от прокси Zabbix, его также можно использовать из прокси Zabbix (прокси Zabbix нельзя объединять в цепочку).
Доступ к каждому Java gateway настраивается непосредственно в файле конфигурации сервера Zabbix или прокси, поэтому для каждого сервера Zabbix или прокси можно настроить только один Java gateway.
Если у узла сети будут элементы данных типа *JMX agent* и элементы данных другого типа, только элементы данных типа *JMX agent* будут передаваться в Java gateway для получения.

[comment]: # ({/79079175-02637e76})

[comment]: # ({8421b0c9-05197937})
Когда элемент данных должен быть обновлен через Java gateway, сервер Zabbix или прокси подключится к Java gateway и запросит значение, которое Java gateway, в свою очередь, получит и передаст обратно серверу или прокси.
Таким образом, Java gateway не кэширует никакие значения.

Сервер Zabbix или прокси имеет специальный тип процессов, которые подключаются к Java gateway; их количество определяется параметром `StartJavaPollers`.
Внутри Java gateway запускает несколько потоков, количество которых определяется [параметром](/manual/appendix/config/zabbix_java) `START_POLLERS`.
На стороне сервера, если подключение занимает более "Timeout" секунд, оно будет завершено, но Java gateway при этом может все еще быть занят получением значения из счетчика JMX.
Чтобы решить эту проблему, в Java gateway есть параметр `TIMEOUT`, который позволяет задать тайм-аут для сетевых операций JMX.

[comment]: # ({/8421b0c9-05197937})

[comment]: # ({2f10b469-475ef799})
Сервер или прокси Zabbix будет по возможности объединять запросы к одной цели JMX в общие пакеты (это зависит от интервалов элементов данных) и отправлять их в Java gateway в одном соединении для повышения производительности.

Рекомендуется, чтобы значение `StartJavaPollers` было меньше или равно `START_POLLERS`; в противном случае могут возникать ситуации, когда в Java gateway не будет доступных потоков для обработки входящих запросов.
В таких случаях Java gateway использует `ThreadPoolExecutor.CallerRunsPolicy`, что означает, что основной поток будет обрабатывать входящий запрос и временно не будет принимать новые запросы.

Если вы пытаетесь отслеживать Java-приложения на базе Wildfly с помощью Java gateway Zabbix, установите последнюю версию `jboss-client.jar`, доступную на [странице загрузки Wildfly](https://www.wildfly.org/downloads/).

[comment]: # ({/2f10b469-475ef799})
