7

如果我在 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

这里发生了什么,我能做些什么来解除这个瓶颈?

4

1 回答 1

1

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

$ scutil --set HostName $(scutil --get LocalHostName)
于 2017-06-08T07:39:46.100 回答