长时间运行该应用程序(即使没有任何重大处理),通常会观察到OOM错误。
进行堆转储后,我发现由于线程数量的稳定增长,内存消耗也在稳定增长。另外,我检查了几个处于等待状态的线程(我想它将全部处于等待状态)。
创建的此类线程数= 26,805,并且正在稳定增长。
一目了然的详细信息:
对象/堆栈框架java.lang.Thread @ 0x655b26fa8 名称池891340-thread-2 浅堆120 保留堆19,648 上下文类加载器org.apache.spark.util.MutableURLClassLoader @ 0x640009d80 守护进程是否为假 总计:6个条目 线程堆栈
pool-891340-thread-2 在sun.misc.Unsafe.park(ZJ)V(本机方法) 在java.util.concurrent.locks.LockSupport.park(Ljava / lang / Object;)V(LockSupport.java:175) 在java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await()V(AbstractQueuedSynchronizer.java:2039) 在java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take()Ljava / util / concurrent / RunnableScheduledFuture; (ScheduledThreadPoolExecutor.java:1081) 在java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take()Ljava / lang / Object; (ScheduledThreadPoolExecutor.java:809) 在java.util.concurrent.ThreadPoolExecutor.getTask()Ljava / lang / Runnable; (ThreadPoolExecutor.java:1067) 在java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava / util / concurrent / ThreadPoolExecutor $ Worker;)V(ThreadPoolExecutor.java:1127) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run()V(ThreadPoolExecutor.java:617) 在java.lang.Thread.run()V(Thread.java:745)
SPARK版本为2.1.0
任何避免此类问题的帮助都将非常有帮助。谢谢。