Solr 的 JMX

Java 管理扩展 (JMX) 是一种技术,使复杂的系统可以由工具控制,而系统和工具之间无需事先了解。本质上,它是一个标准接口,通过该接口可以查看和操作复杂的系统。

与 Java 世界中的任何其他良好公民一样,Solr 可以通过 JMX 接口进行控制。启用后,您可以使用 JMX 客户端(例如 jconsole)连接到 Solr。

如果您不熟悉 JMX,您可能会发现以下概述很有用: http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

配置 JMX

JMX 支持通过定义指标报告器进行配置,如 JMX 报告器部分所述。

如果在 Solr 的 JVM 中运行现有 MBean 服务器,或者如果使用系统属性 -Dcom.sun.management.jmxremote 启动 Solr,即使您没有在 solr.xml 中显式定义报告器,Solr 也会在启动时自动识别其位置。您还可以使用报告器定义中定义的参数来定义 MBean 服务器的位置。

配置 MBean 服务器

7.0 之前的 Solr 版本在 solrconfig.xml 中定义了 JMX 支持。这已更改为上面定义的指标报告器配置。报告器配置的参数允许定义现有 MBean 服务器的位置或地址。

可以通过传递系统参数 -Dcom.sun.management.jmxremote 在 Solr 启动时启动 MBean 服务器。有关启动和控制 MBean 服务器的更多可用设置,请参阅 Oracle 的文档,网址为 http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

配置到 Solr JMX 的远程连接

如果您需要将启用 JMX 的 Java 分析工具(例如 JConsole 或 VisualVM)附加到远程 Solr 服务器,则需要在启动 Solr 服务器时启用远程 JMX 访问。只需将 solr.in.shsolr.in.cmd (Windows) 文件中的 ENABLE_REMOTE_JMX_OPTS 属性更改为 true 即可。您还需要为 JMX RMI 连接器选择一个要绑定的端口,例如 18983。例如,如果您的 Solr 包含脚本设置

ENABLE_REMOTE_JMX_OPTS=true
RMI_PORT=18983

JMX RMI 连接器将允许 Java 分析工具附加到端口 18983。启用后,以下属性会在启动 Solr 时传递到 JVM

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.port=18983 \
-Dcom.sun.management.jmxremote.rmi.port=18983

我们不建议在生产环境中启用远程 JMX 访问,但在进入生产环境之前进行性能和用户验收测试时,它有时会很有用。

有关这些设置的更多信息,请参阅: http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

将 JMX 连接到 NAT 后面的机器(例如,Amazon 的 EC2 服务)并非易事。java.rmi.server.hostname 系统属性可能会有所帮助,但在服务器本身上运行 jconsole 并使用远程桌面通常是最简单的解决方案。请参阅 http://web.archive.org/web/20130525022506/http://jmsbrdy.com/monitoring-java-applications-running-on-ec2-i