1、Flink-UI截图 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 请问为什么会出现这种情况呢? thanks
|
图好像挂了看不到。是不是和这两个场景描述比较相似
[1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html [2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> wrote: > 1、Flink-UI截图 > 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; > 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; > 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 > 请问为什么会出现这种情况呢? > > thanks > > > > > > |
同问,我这里也会经常出现这种情况,我现在是写的代码自动kill,这是bug吗?
| | apache22 邮箱:[hidden email] | Signature is customized by Netease Mail Master 在2020年04月26日 11:01,Zhefu PENG 写道: 图好像挂了看不到。是不是和这两个场景描述比较相似 [1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html [2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> wrote: > 1、Flink-UI截图 > 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; > 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; > 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 > 请问为什么会出现这种情况呢? > > thanks > > > > > > |
In reply to this post by zhefu
感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。
刚才试了几种方式,图片好像都无法访问。 下面我详细介绍下异常情况 1、我的任务是从三个kafka读取,然后通过onGroup实现left join语义,然后定义了一个滑动窗口(600,10),最后通过一个CoGroupFunction进行处理具体的数据 2、异常出现在其中一个CoGruopFunction(Window(TumblingEventTimeWindows(600000), EventTimeTrigger, CoGroupWindowFunction) (15/200))报OOM,异常栈如下 java.lang.OutOfMemoryError: unable to create newnative thread at java.lang.Thread.start0(NativeMethod) at java.lang.Thread.start(Thread.java:717) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1378) at org.apache.flink.streaming.runtime.tasks.StreamTask$CheckpointingOperation.executeCheckpointing(StreamTask.java:1237) at org.apache.flink.streaming.runtime.tasks.StreamTask.checkpointState(StreamTask.java:872) at org.apache.flink.streaming.runtime.tasks.StreamTask.performCheckpoint(StreamTask.java:777) at org.apache.flink.streaming.runtime.tasks.StreamTask.triggerCheckpointOnBarrier(StreamTask.java:708) at org.apache.flink.streaming.runtime.io.CheckpointBarrierHandler.notifyCheckpoint(CheckpointBarrierHandler.java:88) at org.apache.flink.streaming.runtime.io.CheckpointBarrierTracker.processBarrier(CheckpointBarrierTracker.java:137) at org.apache.flink.streaming.runtime.io.CheckpointedInputGate.pollNext(CheckpointedInputGate.java:155) at org.apache.flink.streaming.runtime.io.StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:102) at org.apache.flink.streaming.runtime.io.StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:47) at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:135) at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:279) at org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301) at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530) at java.lang.Thread.run(Thread.java:748) 3、除了这个算子vertice为FAILED,其他vertice都为CANCELED,JobManager状态为RUNNING 正常情况下出现这个错,JM会找一台合适的机器重新把TM启起来或者多次尝试后,任务退出。 但是现在任务的运行状态为RUNNING,虽然为RUNNING但是也不写入数据到下游存储。 thanks 在 2020-04-26 11:01:04,"Zhefu PENG" <[hidden email]> 写道: >图好像挂了看不到。是不是和这两个场景描述比较相似 > >[1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html >[2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html >On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> >wrote: > >> 1、Flink-UI截图 >> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; >> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; >> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 >> 请问为什么会出现这种情况呢? >> >> thanks >> >> >> >> >> >> |
你配置的 jobmanager.execution.failover-strategy 是什么呢?如果是 region 的话,作业不会因为 Task 失败状态变为异常。
可以在WEB ui 进入作业拓扑查看单个 task 的状态 Best Weihua Hu > 2020年4月26日 11:43,yanggang_it_job <[hidden email]> 写道: > > 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。 > 刚才试了几种方式,图片好像都无法访问。 > 下面我详细介绍下异常情况 > 1、我的任务是从三个kafka读取,然后通过onGroup实现left join语义,然后定义了一个滑动窗口(600,10),最后通过一个CoGroupFunction进行处理具体的数据 > 2、异常出现在其中一个CoGruopFunction(Window(TumblingEventTimeWindows(600000), EventTimeTrigger, CoGroupWindowFunction) (15/200))报OOM,异常栈如下 > java.lang.OutOfMemoryError: unable to create newnative thread > at java.lang.Thread.start0(NativeMethod) > at java.lang.Thread.start(Thread.java:717) > at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) > at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1378) > at org.apache.flink.streaming.runtime.tasks.StreamTask$CheckpointingOperation.executeCheckpointing(StreamTask.java:1237) > at org.apache.flink.streaming.runtime.tasks.StreamTask.checkpointState(StreamTask.java:872) > at org.apache.flink.streaming.runtime.tasks.StreamTask.performCheckpoint(StreamTask.java:777) > at org.apache.flink.streaming.runtime.tasks.StreamTask.triggerCheckpointOnBarrier(StreamTask.java:708) > at org.apache.flink.streaming.runtime.io.CheckpointBarrierHandler.notifyCheckpoint(CheckpointBarrierHandler.java:88) > at org.apache.flink.streaming.runtime.io.CheckpointBarrierTracker.processBarrier(CheckpointBarrierTracker.java:137) > at org.apache.flink.streaming.runtime.io.CheckpointedInputGate.pollNext(CheckpointedInputGate.java:155) > at org.apache.flink.streaming.runtime.io.StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:102) > at org.apache.flink.streaming.runtime.io.StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:47) > at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:135) > at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:279) > at org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301) > at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406) > at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705) > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530) > at java.lang.Thread.run(Thread.java:748) > > 3、除了这个算子vertice为FAILED,其他vertice都为CANCELED,JobManager状态为RUNNING > > > 正常情况下出现这个错,JM会找一台合适的机器重新把TM启起来或者多次尝试后,任务退出。 > 但是现在任务的运行状态为RUNNING,虽然为RUNNING但是也不写入数据到下游存储。 > > > > > > > > thanks > > > 在 2020-04-26 11:01:04,"Zhefu PENG" <[hidden email]> 写道: >> 图好像挂了看不到。是不是和这两个场景描述比较相似 >> >> [1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html >> [2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html >> On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> >> wrote: >> >>> 1、Flink-UI截图 >>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; >>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; >>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 >>> 请问为什么会出现这种情况呢? >>> >>> thanks >>> >>> >>> >>> >>> >>> |
Hi yanggang,
看了你的描述,我大概知道问题在哪了。首先,我觉得你的启动配置可以优化下,你的配置 -p 200 -ys 5, 也就是说,你的 Flink 任务默认并发是 200,然后每个 TaskManger 有五个槽。 每个槽的内存是一个 TaskManager 的内存的 1 / 5。 如果默认的 TaskManager 内存是1 G 话,相当于你一个槽里面只有 200 M,这样给 JVM 堆栈真正的内存就会更少。 从你的日志中,也出现了 java.lang.OutOfMemoryError: unable to create newnative thread。因为在 Flink 中,有很多地方需要创建 Thread, 一个 Thread 在 JVM,需要有一定的栈空间,默认 1M , 现在应该是由于槽的内存太小,导致线程栈没有内存分配。 Flink 任务 Task 容错恢复时,需要将状态从 Running -> Canceling -> Canceled,最底层需要启动一个后台线程去 cancel. 但是现在由于不能够创建线程,所以会有 Task 存存在 hang 住(假死)情况,也就是一直显示 Canceling. 个人建议将参数改一下: -p 64 -ytm 2048,之后在观察一下 Best, LakeShen Weihua Hu <[hidden email]> 于2020年4月27日周一 下午6:27写道: > 你配置的 jobmanager.execution.failover-strategy 是什么呢?如果是 region 的话,作业不会因为 Task > 失败状态变为异常。 > 可以在WEB ui 进入作业拓扑查看单个 task 的状态 > > > Best > Weihua Hu > > > 2020年4月26日 11:43,yanggang_it_job <[hidden email]> 写道: > > > > 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。 > > 刚才试了几种方式,图片好像都无法访问。 > > 下面我详细介绍下异常情况 > > 1、我的任务是从三个kafka读取,然后通过onGroup实现left > join语义,然后定义了一个滑动窗口(600,10),最后通过一个CoGroupFunction进行处理具体的数据 > > 2、异常出现在其中一个CoGruopFunction(Window(TumblingEventTimeWindows(600000), > EventTimeTrigger, CoGroupWindowFunction) (15/200))报OOM,异常栈如下 > > java.lang.OutOfMemoryError: unable to create newnative thread > > at java.lang.Thread.start0(NativeMethod) > > at java.lang.Thread.start(Thread.java:717) > > at > java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) > > at > java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1378) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask$CheckpointingOperation.executeCheckpointing(StreamTask.java:1237) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.checkpointState(StreamTask.java:872) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.performCheckpoint(StreamTask.java:777) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.triggerCheckpointOnBarrier(StreamTask.java:708) > > at org.apache.flink.streaming.runtime.io > .CheckpointBarrierHandler.notifyCheckpoint(CheckpointBarrierHandler.java:88) > > at org.apache.flink.streaming.runtime.io > .CheckpointBarrierTracker.processBarrier(CheckpointBarrierTracker.java:137) > > at org.apache.flink.streaming.runtime.io > .CheckpointedInputGate.pollNext(CheckpointedInputGate.java:155) > > at org.apache.flink.streaming.runtime.io > .StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:102) > > at org.apache.flink.streaming.runtime.io > .StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:47) > > at org.apache.flink.streaming.runtime.io > .StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:135) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:279) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406) > > at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705) > > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530) > > at java.lang.Thread.run(Thread.java:748) > > > > 3、除了这个算子vertice为FAILED,其他vertice都为CANCELED,JobManager状态为RUNNING > > > > > > 正常情况下出现这个错,JM会找一台合适的机器重新把TM启起来或者多次尝试后,任务退出。 > > 但是现在任务的运行状态为RUNNING,虽然为RUNNING但是也不写入数据到下游存储。 > > > > > > > > > > > > > > > > thanks > > > > > > 在 2020-04-26 11:01:04,"Zhefu PENG" <[hidden email]> 写道: > >> 图好像挂了看不到。是不是和这两个场景描述比较相似 > >> > >> [1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html > >> [2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html > >> On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> > >> wrote: > >> > >>> 1、Flink-UI截图 > >>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; > >>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; > >>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 > >>> 请问为什么会出现这种情况呢? > >>> > >>> thanks > >>> > >>> > >>> > >>> > >>> > >>> > > |
java.lang.OutOfMemoryError: unable to create newnative thread。是哪种内存溢出了?是Xmx不够还是MaxDirectMemorySize不够?
------------------ 原始邮件 ------------------ 发件人: "LakeShen"<[hidden email]>; 发送时间: 2020年4月29日(星期三) 上午10:39 收件人: "user-zh"<[hidden email]>; 主题: Re: 任务假死 Hi yanggang, 看了你的描述,我大概知道问题在哪了。首先,我觉得你的启动配置可以优化下,你的配置 -p 200 -ys 5, 也就是说,你的 Flink 任务默认并发是 200,然后每个 TaskManger 有五个槽。 每个槽的内存是一个 TaskManager 的内存的 1 / 5。 如果默认的 TaskManager 内存是1 G 话,相当于你一个槽里面只有 200 M,这样给 JVM 堆栈真正的内存就会更少。 从你的日志中,也出现了 java.lang.OutOfMemoryError: unable to create newnative thread。因为在 Flink 中,有很多地方需要创建 Thread, 一个 Thread 在 JVM,需要有一定的栈空间,默认 1M , 现在应该是由于槽的内存太小,导致线程栈没有内存分配。 Flink 任务 Task 容错恢复时,需要将状态从 Running -> Canceling -> Canceled,最底层需要启动一个后台线程去 cancel. 但是现在由于不能够创建线程,所以会有 Task 存存在 hang 住(假死)情况,也就是一直显示 Canceling. 个人建议将参数改一下: -p 64 -ytm 2048,之后在观察一下 Best, LakeShen Weihua Hu <[hidden email]> 于2020年4月27日周一 下午6:27写道: > 你配置的 jobmanager.execution.failover-strategy 是什么呢?如果是 region 的话,作业不会因为 Task > 失败状态变为异常。 > 可以在WEB ui 进入作业拓扑查看单个 task 的状态 > > > Best > Weihua Hu > > > 2020年4月26日 11:43,yanggang_it_job <[hidden email]> 写道: > > > > 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。 > > 刚才试了几种方式,图片好像都无法访问。 > > 下面我详细介绍下异常情况 > > 1、我的任务是从三个kafka读取,然后通过onGroup实现left > join语义,然后定义了一个滑动窗口(600,10),最后通过一个CoGroupFunction进行处理具体的数据 > > 2、异常出现在其中一个CoGruopFunction(Window(TumblingEventTimeWindows(600000), > EventTimeTrigger, CoGroupWindowFunction) (15/200))报OOM,异常栈如下 > > java.lang.OutOfMemoryError: unable to create newnative thread > > at java.lang.Thread.start0(NativeMethod) > > at java.lang.Thread.start(Thread.java:717) > > at > java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) > > at > java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1378) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask$CheckpointingOperation.executeCheckpointing(StreamTask.java:1237) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.checkpointState(StreamTask.java:872) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.performCheckpoint(StreamTask.java:777) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.triggerCheckpointOnBarrier(StreamTask.java:708) > > at org.apache.flink.streaming.runtime.io > .CheckpointBarrierHandler.notifyCheckpoint(CheckpointBarrierHandler.java:88) > > at org.apache.flink.streaming.runtime.io > .CheckpointBarrierTracker.processBarrier(CheckpointBarrierTracker.java:137) > > at org.apache.flink.streaming.runtime.io > .CheckpointedInputGate.pollNext(CheckpointedInputGate.java:155) > > at org.apache.flink.streaming.runtime.io > .StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:102) > > at org.apache.flink.streaming.runtime.io > .StreamTaskNetworkInput.pollNextNullable(StreamTaskNetworkInput.java:47) > > at org.apache.flink.streaming.runtime.io > .StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:135) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:279) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301) > > at > org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406) > > at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705) > > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530) > > at java.lang.Thread.run(Thread.java:748) > > > > 3、除了这个算子vertice为FAILED,其他vertice都为CANCELED,JobManager状态为RUNNING > > > > > > 正常情况下出现这个错,JM会找一台合适的机器重新把TM启起来或者多次尝试后,任务退出。 > > 但是现在任务的运行状态为RUNNING,虽然为RUNNING但是也不写入数据到下游存储。 > > > > > > > > > > > > > > > > thanks > > > > > > 在 2020-04-26 11:01:04,"Zhefu PENG" <[hidden email]> 写道: > >> 图好像挂了看不到。是不是和这两个场景描述比较相似 > >> > >> [1] http://apache-flink.147419.n8.nabble.com/flink-kafka-td2386.html > >> [2] http://apache-flink.147419.n8.nabble.com/Flink-Kafka-td2390.html > >> On Sun, Apr 26, 2020 at 10:58 yanggang_it_job <[hidden email]> > >> wrote: > >> > >>> 1、Flink-UI截图 > >>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行; > >>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING; > >>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。 > >>> 请问为什么会出现这种情况呢? > >>> > >>> thanks > >>> > >>> > >>> > >>> > >>> > >>> > > |
Free forum by Nabble | Edit this page |