今天测试spark 本地任务的时候,发现程序每次启动的时候都要等好久,才能开始正常进入启动程序,严重干扰了Debug的节奏。那就开始把~~
加上Yourkit的启动参数,其中 tracing 参数表示启动的时候就开始进行 tracing 级别的CPU profiling,其他几种 profiling级别可以根据需要调整。
spark.driver.extraJavaOptions -agentpath:/Applications/YourKit-Java-Profiler-2019.8.app/Contents/Resources/bin/mac/libyjpagent.dylib=exceptions=disable,delay=100,tracing
看下程序启动的堆栈,发现卡的还是java的net包工具类,顺便看了一眼源代码,那就写个测试类来测试一下是不是确实是这里卡掉了。
本地测试程序:
object IpTest extends Logging {
def main(args: Array[String]): Unit = {
logInfo("begin getCanonicalHostName")
val address = InetAddress.getLocalHost
println(address.getCanonicalHostName)
logInfo("end getCanonicalHostName")
}
}
20/03/04 00:21:53 INFO IpTest: begin getCanonicalHostName
192.168.0.194
20/03/04 00:22:23 INFO IpTest: end getCanonicalHostName
测试结果符合预期。
想了一下,看到堆栈最顶层竟然是Inet6AddressImpl
的实现类的问题。
感觉肯定是DNS 解析服务出问题了。
进入路由器,关闭IPv6 无效果。
没有办法了,强制在路由器中指定DNS解析服务器,搞定~~
20/03/04 00:51:59 INFO IpTest: begin getCanonicalHostName
192.168.0.194
20/03/04 00:51:59 INFO IpTest: end getCanonicalHostName