4

CEP でメモリ不足エラーが発生しています。スレッド ダンプは、モニター上で約 32000 のスレッドがスリープ状態にあることを示しています。また、CEP JVM オプションでメモリ不足で HeapDump を生成するように指定されていても、ヒープ ダンプが生成されません。アドバイスをお願いします。(CEP JVM -Xms256m -Xmx1536m)

1) この CEP では Cassandra が無効になっています
。2) CEP のバージョンは 2.1.0 です
。3) CEP は WSO2 ESB (BAM Mediator を使用) によって前面に配置されています。
4) 実際のペイロード データを CEP に送信するのとは別に、ESB は定期的なハートビートも CEP に送信しています (15 ec ごと)。

5) また、15 分ごとに CEP (cpu/memorythreads) を監視している ESB で JMX エージェントを構成しました
。 6) -XX:HeapDumpPath= パラメータが指定されているにもかかわらず、ヒープ ダンプが見つかりません。

  • CEP は、この OOM の前に 7 日間連続して実行されました。再起動後、スレッド数が 1 日あたり約 4000 ~ 5000 スレッドの割合で着実に増加していることがわかります。

CEP ログ..

[2013-06-10 05:31:49,040] ERROR -  Thread Thread[ActiveMQ InactivityMonitor  WriteCheckTimer,5,main] died {org.apache.zookeeper.server.NIOServerCnxn}
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
at  java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
at org.apache.activemq.transport.AbstractInactivityMonitor.writeCheck(AbstractInactivityMonitor.java:153)
at org.apache.activemq.transport.AbstractInactivityMonitor$2.run(AbstractInactivityMonitor.java:117)
at org.apache.activemq.thread.SchedulerTimerTask.run(SchedulerTimerTask.java:33)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
[2013-06-10 05:31:49,040] ERROR -  Thread Thread[ActiveMQ InactivityMonitor WriteCheckTimer,5,main] died {org.apache.zookeeper.server.NIOServerCnxn}
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
at org.apache.activemq.transport.AbstractInactivityMonitor.writeCheck(AbstractInactivityMonitor.java:153)
at org.apache.activemq.transport.AbstractInactivityMonitor$2.run(AbstractInactivityMonitor.java:117)
at org.apache.activemq.thread.SchedulerTimerTask.run(SchedulerTimerTask.java:33)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

CEP で構成されたクエリの一部

<cep:query name="xxxBuildUpQuery">
<cep:expression><![CDATA[from  xxxCEPIntgDataStream[interfaceInformationInterfaceName=='xxx-xxx' or interfaceInformationInterfaceName=='xxx-xxx'or 
                               interfaceInformationInterfaceName=='xxx-xxx' or interfaceInformationInterfaceName=='xxx-xxx' or 
                               interfaceInformationInterfaceName=='xxx-xxx' or interfaceInformationInterfaceName=='xxxx-xxx' or 
                               interfaceInformationInterfaceName=='xxx-xxx' or 
                               interfaceInformationInterfaceName=='xxx-xxx' ]#window.time(60000)
insert into buildUpStream interfaceInformationInterfaceName, count(interfaceInformationxxxId) as noOfInflowMsgs group by interfaceInformationInterfaceName]]></cep:expression>
<cep:output brokerName="activemqJmsBroker" topic="xxxBuildUpInfoTopic">
  <cep:xmlMapping>
    <xxxAnalytics>
      <buildUpInfo>
        <interfaceName>{interfaceInformationInterfaceName}</interfaceName>
        <buildUpPerMin>{noOfInflowMsgs}</buildUpPerMin>
      </buildUpInfo>
    </xxxAnalytics>
  </cep:xmlMapping>
</cep:output>
</cep:query>
<cep:query name="xxxQueueDepthQuery">
<cep:expression><![CDATA[from xxxIntgrQueueDepthData_v1
insert into xxxIntgrQueueDepthStream flowName,appName, queueDepth]]>  </cep:expression>
<cep:output brokerName="activemqJmsBroker" topic="xxxIntgrQueueDepthTopic">
  <cep:xmlMapping>
    <xxxAnalytics>
      <queueDepthInfo>
        <flowName>{flowName}</flowName> 
        <appName>{appName}</appName>
        <depth>{queueDepth}</depth>
      </queueDepthInfo>
    </xxxAnalytics>
  </cep:xmlMapping>
</cep:output>
</cep:query>
<cep:query name="xxxClockDataQuery">
  <cep:expression><![CDATA[from testStream
insert into testOutClockDataStream AEDateTime]]></cep:expression>
  <cep:output brokerName="activemqJmsBroker" topic="xxxClockDataTopic">
    <cep:xmlMapping>
      <xxxClockFeed>
        <data>
          <XXDateTime>{XXDateTime}</XXDateTime>
        </data>
      </xxxClockFeed>
    </cep:xmlMapping>
  </cep:output>
 </cep:query>
 <cep:query name="xxxSimltrPaymntAvgQuery_1">
  <cep:expression><![CDATA[from xxxCEPIntgDataStream#window.time(15000)
    insert into xxxSimltrPymntAvgData avg(amount) as avgAmount, currency group by currency]]></cep:expression>
  <cep:output brokerName="activemqJmsBroker" topic="xxxAvgPaymntDetails">
    <cep:xmlMapping>
      <xxxAnalytics>
        <avgPaymentData>
          <avgAmount>{avgAmount}</avgAmount>
          <currency>{currency}</currency>
        </avgPaymentData>
      </xxxAnalytics>
    </cep:xmlMapping>
  </cep:output>

ありがとうラジブ・パチル

4

2 に答える 2

1

Siddhi Manager は、コア プール サイズとして Integer.MAX_VALUE を使用して、スケジュールされたスレッド プールを開始することがわかりました。これは、タイムアウト ポリシーなしで、すべての要求が新しいスレッドを作成することを意味します。(参照: ThreadPoolExecutor )

WSO2 がこの問題を修正するまで、このスレッド プールのサイズを変更できます。Pe さん、クラス org.wso2.siddhi.core.SiddhiManager の行を次のように変更します。

this.siddhiContext.setScheduledExecutorService(Executors.newScheduledThreadPool(Integer.MAX_VALUE));

( SiddhiManager ver 1.1.0-wso2v1 の 77 行目)

これに:

this.siddhiContext.setScheduledExecutorService(Executors.newScheduledThreadPool(100));

この変更により、100 のコア プール サイズ、Integer.MAX_VALUE の最大プール サイズが作成され、(コア プール サイズを超える) アイドル スレッドは終了するとすぐに削除されます。

于 2013-06-21T10:23:19.137 に答える
0

timeBatch ウィンドウが問題のようです。それを使用したクエリがいくつかありました...削除すると、スレッドのランプアップが停止しました。おそらく、CEP の timeBatch ウィンドウ機能には、さらにテストが必要です。

于 2013-06-21T05:43:05.010 に答える