如何获取当前正在使用的内存,不。在 Tomcat 或 Jetty 上运行的 Java 应用程序的线程数、CPU 使用率、负载指标等。如果应用程序过载或未充分利用等,我需要这些指标来查找应用程序的当前状态,并且我想从应用程序本身获取此信息。请指导。
1 回答
top
面向 Unix 的操作系统(macOS、BSD、Linux 等)提供命令行工具top
来查看当前运行的进程。您可以查看 Java 进程的内存使用情况等。
在 macOS 中,Apple 应用程序活动监视器在 GUI 中提供此功能。请参阅用户指南。其他平台可能有类似的工具。
跟踪
DTrace是一种在运行时对操作系统(内核)和应用程序进行全面动态跟踪的技术,对性能的影响非常小。
各种操作系统都采用了这种技术。在macOS中,Apple 将 DTrace 包装为他们的Instruments工具。一些BSD风格还内置了 DTrace。
我相信 DTrace 可以用来监控正在运行的 JVM,但我不记得细节了。
调试器
一些IDE能够将调试器附加到在Tomcat或Jetty中运行的 Web 应用程序。对开发和测试有用,但不适用于部署。
飞行记录仪和任务控制
Flight Recorder是一个用于在运行的 JVM 中进行分析和事件收集的工具。参见JEP 328:飞行记录器。
Mission Control是一套工具,用于详细分析Flight Recorder收集的大量数据。见维基页面。请参阅Oracle 的此页面,但我没有检查它是否是最新的。
Flight Recorder和Mission Control以前是 Oracle 的商业产品,现在作为开源和免费项目存放在OpenJDK项目中。
JMX
你说:
我想从应用程序本身获取此信息。
那么JMX适合您。
Java Management Extensions (JMX)是一个框架,用于以基于标准的方法将当前运行时条件信息从您的应用程序内导出到外部工具。
您可以使用您选择的各种监控工具来查看运行时信息。这包括基于简单网络管理协议 (SNMP)标准构建的工具。
您可以编写自己的符合 JMX 的托管 Bean (MBean)类来报告您自己的信息。请参阅Oracle 的教程。
➥ Tomcat 与它自己的 MBean 捆绑在一起。请参阅文档,监控和管理 Tomcat。