プロジェクトに含まれるTypeファイルが多い場合、java.lang.StackOverflowErrorが発生する

フォローする

事象

MCからロボット実行時、Javaの例外である「java.lang.StackOverflowError」が発生し、
ロボットの実行が失敗する事象が確認されています。

エラーメッセージ

<MCからエラーを通知する設定をしている場合に通知されるエラー内容>
Server error from RoboServer   
Thread[RobotExecutor,5,main] 内の例外を捕捉しません。null   

<RoboServer.logに記録されるエラー内容>
2020-12-07 11:21:45,713 ERROR kapow.robot.common.task.DefaultRoboTechApplicationStartupTasks - Uncaught exception in Thread[RobotExecutor,5,main].
java.lang.StackOverflowError
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
 at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:140)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
 at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:140)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
 at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:126)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
 at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:128)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
 at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
 at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
 at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:142)
  :

※java.lang.StackOverflowErrorがどのタイミングで発生したかによりスタックの終点は異なる可能性があります。
 事例では以下48行ごとに同じスタックを繰り返し記録するような出力が確認されました。
 こちらの内容をくりかえし出力する傾向がある場合、同件である可能性が推測されます。

at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:142)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:126)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:128)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:142)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:140)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.outdflt$1(Decorators.scala:140)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$6(Decorators.scala:147)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:340)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentOutput$1.applyOrElse(RobotAnalyser.scala:314)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$5(Decorators.scala:147)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:126)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.indflt$1(Decorators.scala:128)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$3(Decorators.scala:135)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:305)
at com.kapowtech.da.language.analysis.RobotAnalyser$$anonfun$environmentInput$1.applyOrElse(RobotAnalyser.scala:272)
at org.bitbucket.inkytonik.kiama.attribution.Decorators.$anonfun$chain$2(Decorators.scala:135)
at org.bitbucket.inkytonik.kiama.attribution.AttributionCore$CachedAttribute.apply(AttributionCore.scala:56)

原因

製品内部処理に起因する問題です。
ロボットは所属するプロジェクトの全Typeのリストを持っており、ロボット動作直前にその解析処理が実施されますが、
この時プロジェクトに含まれるTypeの数が多いとRoboserverで過負荷が発生し、本事象が発生する事があります。

発生条件

1. ロボットが所属するプロジェクトに含まれるTypeの数が多い、もしくは非常に巨大なTypeファイルが存在する。
2. 1.の条件を満たすロボットを実行する。

※事例では100個近いTypeファイルを同じプロジェクト内に格納した事で発生。

対処方法

問題の解析処理はプロジェクト内のすべてのTypeファイルを対象に動作する為、
回避策といたしましては、プロジェクト内にある不要なTypeファイルを整理したり、
ロボットとロボットが利用するTypeファイルを複数のプロジェクトへ小分けにする、
などの対処を実施願います。

区分 発生Ver 改修ID 修正Ver
不具合 10.4.0.4 1263908  

 

コメント

0件のコメント

記事コメントは受け付けていません。