赞
踩
程序在启动时发现耗时很长,通过jstack 进程号 发现卡在获取进程名上,用了30秒
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
runtimeMXBean.getName();
getName用了30秒
于是写了一个测试类放在服务器上执行,并在此jstack 进程号获取堆栈信息
- public class Test {
-
- public static void main(String[] args) {
- System.out.print("start");
- RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
- System.out.print("name:"+runtimeMXBean.getName());
-
- }
-
- }
发现卡在at java.net.Inet6AddressImpl.lookupAllHostAddr 这句
"main" #1 prio=5 os_prio=0 tid=0x00002b2450009800 nid=0x1a2c9 runnable [0x00002b244ca75000]
java.lang.Thread.State: RUNNABLE
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
at java.net.InetAddress.getLocalHost(InetAddress.java:1501)
- locked <0x0000000580163720> (a java.lang.Object)
at sun.management.VMManagementImpl.getVmId(VMManagementImpl.java:140)
at sun.management.RuntimeImpl.getName(RuntimeImpl.java:59)
at test.Test.main(Test.java:11)
猜想是和网络主机设置有关
最后发现 cat /etc/hosts 中设置的ip对应的主机名和 /etc/sysconfig/network 中设置的主机名不一致导致的,修改为一致就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。