我在Centos6上使用JDK7运行我的Java程序.我使用以下选项启用JMX:
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true"
Run Code Online (Sandbox Code Playgroud)
当我检查打开哪些端口时,我发现了2个额外的随机端口:
netstat -plunt | grep java
tcp 0 0 :::9123 :::* LISTEN 13295/java
tcp 0 0 :::59927 :::* LISTEN 13295/java
tcp 0 0 :::59928 :::* LISTEN 13295/java
Run Code Online (Sandbox Code Playgroud)
请注意,每次重启仅配置的端口9123保持不变,另外两个端口会更改值.
netstat -plunt | grep java
tcp 0 0 :::9123 :::* LISTEN 13331/java
tcp 0 0 :::59932 :::* LISTEN 13331/java
tcp 0 0 :::59933 :::* LISTEN 13331/java
Run Code Online (Sandbox Code Playgroud)
什么是2个额外端口以及为什么打开它们?
如何配置2个额外的随机端口?
如何配置::ffff:127.0.0.1将在JMX打开的所有端口之前显示?
为什么在与JConsole连接时不使用一个端口?
添加以澄清答案
不幸的是,附加的随机端口仍然打开为了提醒您,我使用Centos 6.我的Tomcat设置看起来像这样(Tomcat不部署任何应用程序):
CATALINA_OPTS="${CATALINA_OPTS} -XX:+DisableAttachMechanism -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true -Djava.rmi.server.useLocalHostname=true -Djava.rmi.server.useCodebaseOnly=true -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.rmi.port=9123" …Run Code Online (Sandbox Code Playgroud) 我在Sun的JVM上的Jetty 6.1.24-6上运行了一个64位的Ubuntu Server 10.10,它们都是从标准的Ubuntu存储库安装的.
我正在尝试追踪这个服务器的问题(一段时间后100%cpu,它可能与NIO的Selector上的一个已知错误有关,虽然看起来将连接器更改为旧的io SocketConnector并没有解决问题! ),并需要采取线程转储.
不幸的是我无法获得线程转储.我试图将SIGQUIT发送到进程,并尝试将JStack附加到它,但两种方法都不起作用.
我看到SIGQUIT(在Jetty生成的任何日志文件中)都没有输出,而JStack,即使以root(或jetty)和"-F"运行,也说它已附加到进程,但是然后阻止并不再产生输出!
我怎样才能获得线程转储?