Tag: jconsole

如何制作自定义Java / JavaFX控制台?

有必要制作自定义控制台。 我有以下代码: public class Console extends OutputStream{ private Console(ResourceBundle resourceBundle) throws IOException { FXMLLoader loader = new FXMLLoader(this.getClass().getResource(“Console.fxml”), resourceBundle); controller = loader.getController(); Scene scene = new Scene((Parent) loader.load()); stage = new Stage(); stage.setScene(scene); show(); } @Override public void write(int b) throws IOException { controller.append(b); } public static Console getInstance(ResourceBundle resourceBundle) { if (console == null) […]

如何使用Jconsole连接到EC2?

我在我的macbook上运行Jconsole并尝试连接到没有图形的ec2上的linux终端(只有命令行访问)。 我像这样运行我的代码: java -jar program.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.remote.ssl=false 我在这里读到通过EC2访问时出现问题(连接后出现问题),解决方案似乎是’ java.rmi.server.hostname to the public hostname of the instance ‘ 我对如何做到这一点感到有点困惑。 我尝试了两件事,一件是将它直接放在我的代码中(在void static main部分中): System.setProperty( “java.rmi.server.hostname” , “external_EC2_address” ); //in my real code I have the correct address here 系统接受了它(当我创建/上传runnable jar时没有错误)。 我还在我的实例上打开防火墙以允许所有TCP流量。 没运气。 我也试过上述声明作为启动程序的标志,但仍然没有运气。 有什么想法怎么做? 更新:这将显示我在Java的绿色,我更进一步(仍然无法工作),但我意识到把java -jar filename.jar,然后选项没有给我与结果相同的结果-jar在命令的末尾。 我试过了,程序尝试连接,然后说连接失败(之前它只是在登录屏幕上说它)。

在JVM上禁用本地JMX连接

我们正在编写一个java程序,它将密码保存在内存中。 不幸的是,用户可以轻松地使用jconsole或jmap创建堆转储文件并打开它以查找密码。 我认为jconsole使用本地套接字连接jvm。 我想知道,有没有办法甚至为本地用户禁用jmx? 有没有办法完全禁用堆转储? 由于用户可以访问内存段,因此无论如何都可以访问密码。 但是,我想禁用标准的方法来使行动尽可能昂贵。

诊断Java内存问题的策略

我的任务是调试Java(J2SE)应用程序,在一段时间的活动开始后抛出OutOfMemoryexception。 我是Java新手,但有编程经验。 我有兴趣就诊断这样的问题的好方法得到你的意见吗? 到目前为止,我已经使用JConsole来了解正在发生的事情。 我有预感,有些物品没有被正确释放,因此在垃圾收集过程中没有被清理干净。 我是否可以使用任何工具来获取对象生态系统的图片? 你会从哪里开始的?

查看除Jconsole之外的JMX bean的更好选项

JConsole已经安静地查看JMX发布的计数器的错误视图。 还有什么其他选择? 除了实际上使用相同视图的JVisualVM之外,我找不到任何其他内容

JVisualVM / JConsole中的System.gc()vs GC按钮

我目前正在测试我的概念certificate原型处理XML模式,并围绕一个非常耗费内存的外部库构建树自动机(我已经获得了源代码),我想绘制“真正的峰值”(堆) )随着模式大小的增加,不同运行的内存消耗(使用的度量标准适合我的purpouse并且不影响问题),或者至少是它的合理近似值。 为了给出一个数量级,对于一个真正的峰值为100MB的运行(我测试它运行几次完全相同的输入/参数配置,强制jvm内存-Xmx和-Xms减少值,我得到Exception in线程“main”java.lang.OutOfMemoryError:GC开销限制超过 <100MB,具有稳定且可重复的结果)它占用大约1.1GB,这就是为什么获取实数非常重要,因为它们差别很大! 我花了最近10天在网上和stackoverflow中阅读问题,我实际知道的是: System.gc()“建议”GC运行,不以任何方式强制它,因此不可能依赖它来检测内存使用峰值 通常建议的是计算对象占用(我看到了SizeOf项目,我尝试并且工作正常,即使它不符合我的需要),这对我来说是不可行的,因为由于创建了大量的内存分配很多收集(设置,列表和映射)迭代器在不同的方法中,被称为非常多次(对于我记忆中的10分钟,每个数百万次),因此检测所有涉及的对象将非常困难并执行总和(我用内存消耗图调试了很多次运行而不能只识别一个瓶颈) 没有办法轻易获得方法的内存占用(表示为对象内存分配的峰值) 事实上,我自己经历过System.gc()调用不可靠(例如,由于GC真的被调用而在System.gc()之后读取不同的内存),但是当我按下JVisualVM或Jconsole中的“GC按钮”它永远不会运行GC或拒绝这样做。 所以我的问题是:调用它们的按钮实现(我还没有尝试过,但是对于我现在所读到的,使用带有attach api的 jconsole.jar似乎是可行的)将不同于直接调用System.gc()从我的代码,从而解决我的问题? 如果没有,你如何解释该按钮的“确定性行为”? 到目前为止,我对10个增加的模式大小进行了实际内存峰值的手动测试(对于这种测量,模式是从单个“复杂度参数”自动生成的)并且我绘制了预期曲线,如果我将无法获得一个更好的解决方案我想将我的代码作为外部jar运行,其中-Xmx / -Xms等于略低于我对预期内存峰值的预测,捕获外部进程ErrorStream中的OutMemoryException并重新启动增加的内存直到完成运行已完成。 (如果天真的记忆预测不够健壮,我将应用适当的机器学习技术)。 我知道这不是一个优雅的解决方案,但在我的情况下(学术界)我可以花费一些额外的时间来进行这些测量。 如果您对此powershell方法有其他建议或改进,欢迎(非常)欢迎您分享。 系统信息(机器是Fedora 17,64位): java版“1.7.0_04”Java(TM)SE运行时环境(版本1.7.0_04-b20)Java HotSpot(TM)64位服务器VM(版本23.0-b21,混合模式) 在此先感谢,亚历山德罗

如何让JMX绑定到特定的接口?

我目前正在使用com.sun.management.jmxremote.*属性启动Java VM,以便我可以通过JConsole连接到它以进行管理和监视。 不幸的是,它会侦听机器上的所有接口(IP地址)。 在我们的环境中,通常情况下,同时在一台机器上运行多个Java VM。 虽然可以告诉JMX监听不同的TCP端口(使用com.sun.management.jmxremote.port ),但是让JMX使用标准JMX端口并绑定到特定的IP地址(而不是全部)会很好。他们)。 这样可以更容易地找出我们通过JConsole连接到哪个VM(因为每个VM实际上“拥有”自己的IP地址)。 有没有人想出如何让JMX监听单个IP地址或主机名?

Java非堆内存和堆栈内存有什么区别? 它们是相同的,如果不是它们之间有什么区别?

我正在使用Jconsole来监视Java应用程序。 内存选项卡显示不同的堆和非堆内存 堆内存使用情况 非堆内存使用情况 记忆池“CMS Old Gen” 记忆池“Par Eden Space” 记忆池“Par Survivor Space” 内存池“代码缓存” 内存池“CMS Perm Gen” 这些术语有什么区别。 另请提供一些信息 – 如何通过监视这些参数来查找应用程序行为中的exception。

调试JConsole连接失败

我有一个Web应用程序部署到远程树脂服务器,它已打开JMX。 我可以telnet到远程服务器即 franz@see:/tmp$ telnet 5555 Trying … Connected to . Escape character is ‘^]’. sr5javax.management.remote.message.HandshakeBeginMessage , 6profilestLjava/lang/String;Lversionq~xppt1.0^] telnet> q Connection closed. 但我无法使用我的JConsole连接到它 $JAVA_HOME/bin/java -cp $JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:pm-common/lib/jmxremote_optional-1_0_1_3.jar sun.tools.jconsole.JConsole service:jmx:jmxmp://:5555 我用以下java版本尝试了这个,但是我在两个实例上都遇到了“连接失败”。 ## where JAVA_HOME=/opt/java/64/jdk1.5.0_22 java version “1.5.0_22” Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03) Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode) ## where JAVA_HOME=/opt/java/64/jdk1.6.0_17 java […]

如何加密JConsole密码文件的密码

我正在使用JConsole访问我的应用程序MBean,并使用password.properties文件。 但根据Sun的规范,此文件仅包含明文格式的密码。 com.sun.management.jmxremote.password.file=/password.properties 现在我想加密密码并将其用于JConsole的JMX用户身份validation(Remote部分中的用户名和密码字段)。 我可以使用任何预定义的加密逻辑或我自己的加密算法。 有没有人知道任何这样的拦截将明文密码更改为加密密码,以便JMX Framework也知道加密密码? 我当前的密码文件: guest guest admin admin 使用加密它应该看起来像: guest ENC(RjqpRYbAOwbAfAEDBdHJ7Q4l/GO5IoJidZctNT5oG64=) admin ENC(psg3EnDei6fVRuqHeLwOqNTgIWkwQTjI2+u2O7MXXWc=)