RuntimeMXBean.getName()在Mac OS X Sierra上挂起 - 如何修复?

时间:2017-01-06 18:59:08

标签: java macos java.lang

如果我在OS X Sierra(JDK 8u111)上运行以下命令,则需要5秒钟才能运行(而不是像Linux上的毫秒):

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

public class BeanTest {
    public static void main (String[] args) {
        RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
        System.out.println(bean.getName());
    }
}

这导致我使用的库大幅减速,其较新的版本称之为管理API的这一部分。我的第一个想法是它是一个DNS问题(计算机在本地家庭NAT上)但我尝试在shell中解析我的本地主机名或我的本地IP地址立即返回(NXDOMAIN)答案。在Java进程上运行dtruss会在5秒滞后期间不断重复这些行:

  782/0x36f5:  psynch_cvwait(0x7FEE4170B968, 0x20100000300, 0x200)       = -1 Err#316
  782/0x36f5:  gettimeofday(0x7000039B4938, 0x0, 0x0)        = 0 0

这里发生了什么,我该怎么做才能解除这个瓶颈?

1 个答案:

答案 0 :(得分:0)

我通过手动将HostName设置为LocalHostName来修复此问题,在此之前,未设置HostName:

$ scutil --set HostName $(scutil --get LocalHostName)