RuntimeMXBean getName 耗時長

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章