一个Java应用程序能否在同一台Linux机器上监视另一个Java应用程序?【JAVA教程】

!
也想出现在这里? 联系我们
信息

一个Java应用程序能否在同一台Linux机器上监视另一个Java应用程序?,第1张

概述一个Java应用程序能否在同一台Linux机器上监视另一个Java应用程序?

在linux机器上,我有一个现有的第三方Java应用程序正在运行。 我可以通过进入/ proc / PID /目录(内存,线程等)知道应用程序的实时状态。 不过,我想在同一台机器上运行一个独立的Java程序,而不使用JConsole或VisualVM(如生产环境)。 我search了JMX的主题。 但是,它只返回关于它自己的程序的信息,而不是我正在监视的第三方应用程序。 我对吗? 有没有办法做到这一点(除了parsing/ proc / PID /结果)? 谢谢!

按照这个build议,我写了一个简单的程序来做本地监听。 但是,我得到以下错误。 任何想法?

String hostname = \”xx.xx.xx.xx\”; int portNum = xxxx; try { JMXServiceURL u = new JMXServiceURL(\”service:jmx:rmi:///jndi/rmi://\” + hostname + \”:\” + portNum + \”/jmxrmi\”); JMXConnector c = JMXConnectorFactory.connect(u); } catch (Exception e) { e.printstacktrace(); } ——Output—— java.io.IOException: Failed to retrIEve RMIServer stub: javax.naming.nameNotFoundException: jmxrmi at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338) at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248) at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:207) at test.main(test.java:57) Caused by: javax.naming.nameNotFoundException: jmxrmi at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:99) at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185) at javax.naming.InitialContext.lookup(InitialContext.java:392) at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1886) at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856) at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:255) … 3 more

如何聆听文件pipe理器(Explorer.exe)的目录更改和select更改?

Ganglia无法在元和受监视的节点之间进行通信

打印显示器修改和redirect到另一个打印机端口

C ++编程获取显示编号?

windows:如何更改显示器的背光亮度

如何设置多个桌面背景(双显示器)

在任何应用程序中监视select

从实时(更新)日志文件使用windows PowerShell筛选string

检测显示器上的10位颜色支持

将显示器限制在linux中的一个区域

这正是JMX的用途。 如果您运行的是Java 6或更高版本,那么每个Java应用程序都会自动公开以供JMX代理监视和管理 – 如果您使用的是早期版本,则需要在启动应用程序时设置系统属性。

您甚至可以使用JXM remote,在其他计算机上监视它,它使用RMI。

一些资源:

Oracle监视和管理指南

Visual VM文章

如果你在linux下,只需要cpu,内存和线程,你可以使用Runtime.getRuntime().exec()作为参数传递linux的命令ps -p <pID> -o pID,nlwp,pcpu,pmem –sort pcpu 。 当然,你仍然需要解析输出。 这是这样的:

PID NLWP %cpu %MEM 1765 52 4.6 11.3

NLWP是进程中的线程数。

对于我的第三方应用程序的本地监控,替换JMXServiceURL u = new JMXServiceURL(“service:jmx:rmi:/// jndi / rmi://”+ hostname +“:”+ portNum +“/ jmxrmi”); 通过JMXServiceURL u = new JMXServiceURL(“service:jmx:rmi:/// jndi / rmi://”+ hostname +“:”+ portNum +“/ server”); 解决了javax.naming.nameNotFoundException的问题:jmxrmi。 内存和线程监视工作正常。 感谢所有的投入!

总结

以上是内存溢出为你收集整理的一个Java应用程序能否在同一台Linux机器上监视另一个Java应用程序?全部内容,希望文章能够帮你解决一个Java应用程序能否在同一台Linux机器上监视另一个Java应用程序?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞154 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容