You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 胡松 <hs...@qq.com> on 2020/08/18 12:05:22 UTC

回复: flink 1.10.1 跑批任务 OutOfMemoryError: Metaspace

@Xintong Song
我们dump文件&nbsp;这个driver是由ParentFirstClassloader加载的,存在DriverManager的registeredDrivers里,存在对ParentFirstClassloader的强引用。我们初始化mysql的代码如下,难道需要手动卸载下driver,然后各位有知道怎样手动卸载么或者有使用HikariDataSource没问题的么,而且我们用的是批处理,每10分钟执行次?
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;




&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.config = new HikariConfig();
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setDriverClassName("com.mysql.jdbc.Driver");
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setJdbcUrl(config.getConnectString());
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setUsername(config.getUsername());
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setPassword(config.getPassword());




&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setMinimumIdle(config.getCpMinimumIdle());
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setMaximumPoolSize(config.getCpMaximumPoolSize());
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setIdleTimeout(config.getCpIdleTimeout());
&nbsp; &nbsp; &nbsp; &nbsp; this.config.setMaxLifetime(config.getCpMaxLifetime());


&nbsp; &nbsp; &nbsp; &nbsp; this.config.setAutoCommit(false);
&nbsp; &nbsp; &nbsp; &nbsp; this.source = new HikariDataSource(this.config);


&nbsp; &nbsp; &nbsp; &nbsp; return true;



------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <tonysong820@gmail.com&gt;;
发送时间:&nbsp;2020年8月18日(星期二) 下午5:04
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: flink 1.10.1 跑批任务 OutOfMemoryError: Metaspace



按你的描述,应该是存在类加载泄露的问题。也就是说,由于某些原因,导致之前作业加载的类,没能被释放掉,致使类元数据积累越来越多,metaspace
空间不足。
具体泄露的原因还是需要根据 dump 分析,通常是作业用到的第三方依赖导致的,这种情况 flink 是没法强行清除加载类的。

Thank you~

Xintong Song



On Mon, Aug 17, 2020 at 6:38 PM 胡松 <hs-cs@qq.com&gt; wrote:

&gt; hi all
&gt; &amp;nbsp; &amp;nbsp;使用flink 1.10.1 每10分钟跑一个批任务,但是跑一天后重复复现报错
&gt; 2020-08-15 19:32:59
&gt; org.apache.flink.runtime.JobException: Recovery is suppressed by
&gt; NoRestartBackoffTimeStrategy
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.handleFailure(ExecutionFailureHandler.java:110)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.getFailureHandlingResult(ExecutionFailureHandler.java:76)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.scheduler.DefaultScheduler.handleTaskFailure(DefaultScheduler.java:192)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.scheduler.DefaultScheduler.maybeHandleTaskFailure(DefaultScheduler.java:186)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.scheduler.DefaultScheduler.updateTaskExecutionStateInternal(DefaultScheduler.java:180)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.scheduler.SchedulerBase.updateTaskExecutionState(SchedulerBase.java:498)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.jobmaster.JobMaster.updateTaskExecutionState(JobMaster.java:384)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.GeneratedMethodAccessor250.invoke(Unknown Source)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Method.java:498)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:282)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:197)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:74)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleMessage(AkkaRpcActor.java:150)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.japi.pf
&gt; .UnitCaseStatement.applyOrElse(CaseStatements.scala:21)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.actor.Actor$class.aroundReceive(Actor.scala:517)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.actor.AbstractActor.aroundReceive(AbstractActor.scala:225)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.actor.ActorCell.receiveMessage(ActorCell.scala:592)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.actor.ActorCell.invoke(ActorCell.scala:561)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:258)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.dispatch.Mailbox.run(Mailbox.scala:225)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at akka.dispatch.Mailbox.exec(Mailbox.scala:235)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
&gt; akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
&gt; Caused by: java.lang.OutOfMemoryError: Metaspace. The metaspace
&gt; out-of-memory error has occurred. This can mean two things: either the job
&gt; requires a larger size of JVM metaspace to load classes or there is a class
&gt; loading leak. In the first case 'taskmanager.memory.jvm-metaspace.size'
&gt; configuration option should be increased. If the error persists (usually in
&gt; cluster after several job (re-)submissions) then there is probably a class
&gt; loading leak which has to be investigated and fixed. The task executor has
&gt; to be shutdown...
&gt;
&gt; 使用MemoryAnalyzer分析,dump 700m 的文件就70多m,没定位到原因。
&gt;
&gt;
&gt; 请问各位有碰到批任务这种问题的么?