有没有办法以编程方式从C++获取当前的jvm统计信息,例如加载的类或当前堆大小?我知道有很多工具可以这样做,但我想将它与不时读取这些统计数据的另一个应用程序集成在一起。从C++监视jvm堆大小
回答
JVMTI使您可以将本地代理连接到一个Java应用程序,与像堆遍历,同时还包括“垃圾收集开始” &“垃圾收集完成”事件,低层次功能的负载可能作为出发点。
JNI允许您从本机代码(反之亦然)调用Java函数。我可以想象,您可以使用此技术从ManagementFactory或某些提供所需信息的类似Java类获取信息。 This post包含了一个关于如何通过JNI调用静态Java方法的完整示例,这应该是一个很好的起点。
JVMTI代理需要由jvm加载。似乎不可能将它稍后附加到jvm上。 是不是使用java代码从jvm中获取信息有点傻?您正在为jvm加载更多东西。你是在干扰监视? –
@LL .:您可以使用'com.sun.tools.attach.VirtualMachine'使用tools.jar将JVMTI代理附加到正在运行的JVM,请看这里:http://docs.oracle.com/javase/6 /docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html。 问题是,您需要另一个Java程序来将您的本地代理连接到正在运行的JVM,还没有找到一个解决方案尚未直接从本机代码连接到JVM。 –
在[我自己的问题之一](http://stackoverflow.com/questions/38588632/attach-native-application-via-jni-to-already-running-jvm-on-linux),apangin只是建议我他项目[jattach](https://github.com/apangin/jattach),它看起来很有希望从本机代码附加到正在运行的JVM。 –
- 1. Cassandra缓存大小和JVM堆大小
- 2. 从maven构建jvm堆大小错误
- 3. Weka(jvm)改变堆大小
- 4. 更改jvm堆大小 - jgrasp
- 5. Linux上的JAVA堆大小监视
- 6. JVM最小堆大小推荐原因?
- 7. 预留Java JVM最大堆大小
- 8. 监视WebSphere JVM
- 9. 如何从JVM获取堆和permgen的最大大小?
- 10. 增加JVM中的堆大小
- 11. 在JAR中指定JVM堆大小
- 12. 了解JVM堆大小(使用Eclipse时)
- 13. 如何增加Groovy的JVM堆大小?
- 14. Android中JVM的堆大小为
- 15. 增加Scala的JVM堆大小?
- 16. 关于增加JVM的堆大小
- 17. JVM堆大小动物园管理员
- 18. 如何增加JVM堆大小YouTrack 5.1
- 19. VMware客户机中的JVM堆大小
- 20. 为什么我的JVM堆大小从2gigs到8g演出?
- 21. 在Visual Studio中监视调用堆栈大小
- 22. 在JVM中监视线程
- 23. 使用SNMP监视JVM
- 24. 为什么要减小Java JVM线程堆栈的大小?
- 25. Java虚拟机“最大堆大小”与通用JVM参数Xmx
- 26. 如何设置风暴工人的JVM最大堆大小?
- 27. 的Java Webstart的最大堆大小导致JVM无法启动
- 28. JVM最大堆大小可以动态变化吗?
- 29. 了解最大JVM堆大小 - 32位和64位
- 30. 在MAC OSX中增加JVM最大堆大小10.12
所以从C++运行那些其他工具并收集输出? (如果你在正常的* NIX世界)(不回答,只是可能的解决方法) – Ped7g
大多数工具都是基于GUI的,没有命令行选项。它们似乎是用swing或者其他东西在java中构建的。 –
['jstat'](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html)是一个用于监控堆,gc,类加载和JIT编译的命令行工具。 ['jcmd'](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html)'PerfCounter.print'也可能有所帮助。 – apangin