程序在啓動時發現耗時很長,通過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 中設置的主機名不一致導致的,修改爲一致就可以了