Tag: 监控

JMX端口动态分配

我有16个Java进程,在一台机器上运行相同的主方法和参数。 我希望通过JConsole远程监控这些。 像-Dcom.sun.management.jmxremote.port=5000这样的硬编码端口号将无法工作,因为这些进程使用相同的配置,并且无法使用相同的端口。 JVM是否可以为16个进程中的每个进程动态选择不同的端口?

java cache hashmap每日到期

我想有一个HashMap ,每天午夜,缓存都会过期。 请注意它是J2EE解决方案,因此多个线程可以访问它。 在Java中实现它的最佳方法是什么?

用于监视Hibernate缓存使用情况的工具

是否有任何工具可以监控Hibernate二级缓存的使用? 我知道我可以使用Hibernate API来检索这些信息。 但是当我的应用程序没有读取信息本身时,我该怎么办?我无法修改它? 有没有办法从应用程序外部读取缓存统计信息?

JVM内存:为什么任务管理器上的内存与JProbe(或JConsole工具)不同

我遇到的问题是我的应用程序使用的内存只有100MB,之后它减少了50MB,但是在Window Task Manager上显示150MB并且始终保持或增加但不减少,我们如何减少任务管理器上的内存(私有工作集)?

是否可以使用java代码监控文件夹?

有没有人知道如何使用java监控文件夹? 或者任何人都可以给我一个指示,我怎么能开始这个。 这是我的想法。 启动一个线程来扫描文件夹更改,这可能是创建,删除,更新此文件夹中的文件或其他事情发生,如上次更新。 但在这种情况下,你必须控制线程循环。 如果这个线程循环不能很好地控制,那么它将浪费cpu并可能导致致命的问题。 或者,是否有任何框架或一些演示代码来执行此操作? 希望我们能找到更好的方法来做到这一点。 非常感谢。

是否可以通过编程方式启用远程jmx监控?

我需要以编程方式启动一个新的java进程并动态设置JMX端口。 所以不要这样做 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9995 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 我想做以下几点 System.setProperty(“java.rmi.server.hostname”, “127.0.0.1” ); System.setProperty(“com.sun.management.jmxremote”, “true” ); System.setProperty(“com.sun.management.jmxremote.authenticate”, “false” ); System.setProperty(“com.sun.management.jmxremote.ssl”, “false” ); System.setProperty(“com.sun.management.jmxremote.port”, “9995” ); 但它不起作用。 知道为什么吗?

jps无法连接到远程jstatd

我正在尝试使用jstatd使用jps查询远程JVM,以便最终使用VisualVM监视它。 我使用以下安全策略运行jstatd: grant codebase “file:${java.home}/../lib/tools.jar” { permission java.security.AllPermission; }; jstatd在64位Linux机器上运行,其中包含1.6.0_10版本的HotSpot vm。 jstatd命令是: jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true 我正在尝试从Windows 7机器运行jps。 由于防火墙的限制,我正在通过SSH隧道将RMI数据隧道传输到我的Windows机器,以便jps命令行是: .\jps.exe -m -l rmi://localhost 当我运行jps时,我在jstatd日志中看到了连接尝试,如下所示: Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja va.lang.String)] 但在jps方面,我收到以下错误: Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is: java.net.ConnectException: […]

找出当前Java VM中打开的网络套接字

我正在编写一个端到端测试,我的Java程序发布了它的所有资源 – 线程,服务器套接字,客户端套接字。 它是一个库,因此通过退出JVM释放资源不是一种选择。 测试线程的释放很容易,因为你可以向ThreadGroup询问其中的所有线程,但是我还没有找到一个很好的方法来获取当前JVM正在使用的所有网络套接字的列表。 有没有办法从JVM获取所有客户端和服务器套接字的列表,类似于netstat? 我在Java 7上使用Netty和OIO (即java.net.ServerSocket和java.net.Socket )。该解决方案需要在Windows和Linux上运行。 我的第一个偏好是使用纯Java从JVM中询问它。 我试图寻找一个MX Bean或类似的,但没有找到任何。 另一个选择可能是连接到JVM的分析/调试API并询问Socket和ServerSocket的所有实例,但我不知道如何做到这一点以及是否可以在没有本机代码的情况下完成(AFAIK, JVMTI仅限本机) )。 此外,它不应该使测试变慢(即使我最慢的端到端测试只有0.5秒,其中包括启动另一个JVM进程)。 如果询问JVM不起作用,第三个选项是创建一个设计,在设置时跟踪所有套接字。 这样做的缺点是可能会遗漏一些创建套接字的地方。 由于我使用Netty,它似乎可以通过包装ChannelFactory和使用ChannelGroup来实现 。

从应用程序内请求Java堆转储(核心转储)

我需要一种方法来从应用程序中请求堆转储。 基本原理:当我遇到特定的错误情况时,我想转储堆,这样我就能看到内存中的内容。 但是我想自动执行此操作(例如,当我检测到某些特定情况已经发生时。或者当看门狗不再获得它的ping时。当某些测试失败时)。 因此,我需要一种从应用程序本身转储堆的方法。 我似乎无法用MX bean找到它。 虽然MX Beans可以提供非常好的堆栈跟踪以及监视器和“可拥有的同步器”信息,死锁和争用信息,但我似乎找不到请求堆转储的方法。 有没有这样的方式? 或者通过一些间接方式,例如,这些JVisualVM事情是如何做到的? 人们可以告诉JVM在OutOfMemoryExceptions上转储核心..?

Tomcat 6,JMX和动态端口问题

在阅读并尝试了很多之后,我不得不问是否有人能解决我的问题。 我试图在防火墙后面设置一些Tomcats(V6)。 这没什么大不了的 – 但我想通过JMX监控它们。 我阅读了TC文档并遇到了JMXRemoteLifecycleListener 。 我的测试TC安装完全按照上面的链接进行设置。 因此,我没有从我们网络中的一个主机到另一个主机的连接。 另外,每次启动TC时都会打开第三个随机端口。 在我的server.xml中,监听器被激活 catalina.out说一切都好。 2011-06-14 16:46:48,819 [main] INFO org.apache.catalina.mbeans.JmxRemoteLifecycleListener- The JMX Remote Listener has configured the registry on port 8050 and the server on port 8060 for the Platform server 端口是开放的,我可以通过telnet从任何其他主机连接到它们。 我可以在本地连接到vm( service:jmx:rmi://:8xxx/jndi/rmi://:8xxxx/jmxrmi ) Netstats输出如下: tcp6 0 0 :::8080 :::* LISTEN 11291/java tcp6 0 0 :::8050 :::* […]