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 yanggang_it_job <ya...@163.com> on 2020/04/26 02:57:41 UTC
任务假死
1、Flink-UI截图
我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
请问为什么会出现这种情况呢?
thanks
回复:任务假死
Posted by 酷酷的浑蛋 <ap...@163.com>.
同问,我这里也会经常出现这种情况,我现在是写的代码自动kill,这是bug吗?
| |
apache22
邮箱:apache22@163.com
|
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 <ya...@163.com>
wrote:
> 1、Flink-UI截图
> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
> 请问为什么会出现这种情况呢?
>
> thanks
>
>
>
>
>
>
回复: 任务假死
Posted by "蒋佳成(Jiacheng Jiang)" <92...@qq.com>.
java.lang.OutOfMemoryError: unable to create newnative thread。是哪种内存溢出了?是Xmx不够还是MaxDirectMemorySize不够?
------------------ 原始邮件 ------------------
发件人: "LakeShen"<shenleifighting@gmail.com>;
发送时间: 2020年4月29日(星期三) 上午10:39
收件人: "user-zh"<user-zh@flink.apache.org>;
主题: 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 <huweihua.ckl@gmail.com> 于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 <yanggang_it_job@163.com> 写道:
> >
> > 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。
> > 刚才试了几种方式,图片好像都无法访问。
> > 下面我详细介绍下异常情况
> > 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" <pengzf0802@gmail.com> 写道:
> >> 图好像挂了看不到。是不是和这两个场景描述比较相似
> >>
> >> [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 <yanggang_it_job@163.com>
> >> wrote:
> >>
> >>> 1、Flink-UI截图
> >>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
> >>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
> >>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
> >>> 请问为什么会出现这种情况呢?
> >>>
> >>> thanks
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
>
>
Re: 任务假死
Posted by LakeShen <sh...@gmail.com>.
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 <hu...@gmail.com> 于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 <ya...@163.com> 写道:
> >
> > 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。
> > 刚才试了几种方式,图片好像都无法访问。
> > 下面我详细介绍下异常情况
> > 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" <pe...@gmail.com> 写道:
> >> 图好像挂了看不到。是不是和这两个场景描述比较相似
> >>
> >> [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 <ya...@163.com>
> >> wrote:
> >>
> >>> 1、Flink-UI截图
> >>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
> >>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
> >>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
> >>> 请问为什么会出现这种情况呢?
> >>>
> >>> thanks
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
>
>
Re: 任务假死
Posted by Weihua Hu <hu...@gmail.com>.
你配置的 jobmanager.execution.failover-strategy 是什么呢?如果是 region 的话,作业不会因为 Task 失败状态变为异常。
可以在WEB ui 进入作业拓扑查看单个 task 的状态
Best
Weihua Hu
> 2020年4月26日 11:43,yanggang_it_job <ya...@163.com> 写道:
>
> 感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。
> 刚才试了几种方式,图片好像都无法访问。
> 下面我详细介绍下异常情况
> 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" <pe...@gmail.com> 写道:
>> 图好像挂了看不到。是不是和这两个场景描述比较相似
>>
>> [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 <ya...@163.com>
>> wrote:
>>
>>> 1、Flink-UI截图
>>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
>>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
>>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
>>> 请问为什么会出现这种情况呢?
>>>
>>> thanks
>>>
>>>
>>>
>>>
>>>
>>>
Re:Re: 任务假死
Posted by yanggang_it_job <ya...@163.com>.
感谢您的回复,这个问题和您刚才给我的场景有些相似,但还是有些许差异。
刚才试了几种方式,图片好像都无法访问。
下面我详细介绍下异常情况
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" <pe...@gmail.com> 写道:
>图好像挂了看不到。是不是和这两个场景描述比较相似
>
>[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 <ya...@163.com>
>wrote:
>
>> 1、Flink-UI截图
>> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
>> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
>> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
>> 请问为什么会出现这种情况呢?
>>
>> thanks
>>
>>
>>
>>
>>
>>
Re: 任务假死
Posted by Zhefu PENG <pe...@gmail.com>.
图好像挂了看不到。是不是和这两个场景描述比较相似
[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 <ya...@163.com>
wrote:
> 1、Flink-UI截图
> 我任务的启动配置是 -p 200 -ys 5,也就是说会有40个TM运行,之前正常运行的时候确实是40个TM,而现在只有1个TM在运行;
> 同时通过观察数据的同步时间,任务已经在两天前停止写入数据了,但是查看任务的状态却是RUNNING;
> 我的理解是当tm申请失败,那么当前任务就会退出并把状态设置为FINISHED,但是真实情况却是上面描述那样。
> 请问为什么会出现这种情况呢?
>
> thanks
>
>
>
>
>
>