Lei,

I don't have MiNiFi setup  or a MySQL instance to test against either. I 
attempted to replicate by creating a 2-node nifi cluster
and using a GenerateFlowFile to generate the data and send over HTTP-based 
site-to-site. Stopped the processor after the
input port to see if i could duplicate the behavior. Unfortunately, though, I 
wasn't able to cause any sort of problems.

In order to understand what's happening, you'll likely have to grab a heap dump 
and analyze that.

On Jul 28, 2019, at 7:18 AM, 
[email protected]<mailto:[email protected]> wrote:

Hi Mark,

Let me describe my scenario with details.

  *     My sending  site is a MiNiFi instance,  an CaptureChangeMySQL local  to 
a remote process group.

                 The jvm option:  java.arg.2=-Xms512m    java.arg.3=-Xmx512m
                 version: minifi-0.5.0
<Catch.jpg>

  *   The remote instance is a cluster with two nodes.  The remote process 
group is configured with HTTP protocol. The cluster side:

                <Catch8314.jpg>

I stop the JoltTransfromJSON processor  deliberately,   after a while, the 
MiNiFi log shows:
    o.a.nifi.remote.client.http.HttpClient Penalizing a peer 
Peer[url=http://10.44.51.33:8080/nifi-api] due to java.io.IOException: 
Unexpected response code: 503 errCode:Port's Destination is Full 
errMessage:Received port identifier 18c0bff2-016c-1000-ffff-ffffe3eb065c, but 
its destination is full

A few minutes later:
2019-07-28 19:03:22,273 WARN [Timer-Driven Process Thread-7] 
o.apache.nifi.controller.FlowController Unable to update Remote Process Groups 
due to java.lang.OutOfMemoryError: GC overhead limit exceeded
2019-07-28 19:03:28,508 ERROR [Remote Process Group 
9b03993a-f870-3258-0000-000000000000 Thread-1] 
org.apache.nifi.engine.FlowEngine A flow controller task execution stopped 
abnormally
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC 
overhead limit exceeded
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.nifi.engine.FlowEngine.afterExecute(FlowEngine.java:100)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

Thanks,
Lei

________________________________
[email protected]<mailto:[email protected]>

From: Mark Payne<mailto:[email protected]>
Date: 2019-07-27 21:24
To: [email protected]<mailto:[email protected]>
Subject: Re: OutOfMemoryError if the remote process group down
Hello,

This is not something that should be occurring, so it's difficult to say how to 
avoid the problem. I have a few questions to help understand the scenario 
better.

What version of NiFi is the sending side running?
Is the remote instance a single NiFi instance or a cluster?
When you start seeing OutOfMemoryError, how many FlowFiles are queued up 
waiting to be sent?
Do the FlowFiles to be sent have lots of attributes or any really large 
attributes?
Is the Remote Process Group configured to send data via "Raw Socket" or HTTP 
protocol? (this can be determined by right clicking on the Remote Process Group 
and going to Configure)
How large is the NiFi heap? (set in conf/bootstrap.conf, as the -Xms and -Xmx 
parameters)

Thanks
-Mark


On Jul 27, 2019, at 9:09 AM, 
[email protected]<mailto:[email protected]> wrote:


A processor send message to a remote process group。
If the remote process group  crash or  blocked, after some time the local  nifi 
instance will throw OutOfMemoryError and hanged to die.

How can i avoid the Dying  of the local Nifi instance?


________________________________
[email protected]<mailto:[email protected]>

Reply via email to