ColdFusion:再帰が深すぎます。スタックがオーバーフローしました
-
30-09-2019 - |
質問
過去数年間、ColdFusionでスケジュールされたタスクを実行しているときに、出力ログでこのメッセージをランダムに見てきました。
再帰が深すぎます。スタックがオーバーフローしました。
呼び出されているタスク内のコードは異なる場合がありますが、この場合、データベース内のカウンターをリセットしてから電子メールを送信して、成功したことを教えてくれる非常に単純なコードです。しかし、私はそれがあらゆる種類のコードで起こるのを見てきたので、私は かなり確実な この問題を引き起こしているのはコードではありません。
空のapplication.cfm/cfcもあり、呼び出される他のコードをブロックします。
これを見るのは、CFを再起動し、サービスが完全に開始される前にページを表示しようとするときだけです。
エラーはめったに発生しませんが、今では、実行されない場合に問題を引き起こすかなり重要なスケジュールされたタスクがあります。 (したがって、私はここに助けを求めて投稿しています)
メモリの使用量は問題ありません。 80%以上の無料メモリを報告する直前に実行されたタスク。夜間のメモリを監視することでは、並んでいるスパイクが表示されません。マシンには4つのギグのメモリがあり、OSとCF以外では何も実行されていません。私たちは最近、問題を解決するためにCFを再インストールしようとしましたが、それは助けにはなりませんでした。他のいくつかのサーバーでも発生します。
これは内部サーバーなので、午前3時の使用は存在しないはずです。その時点で実行されている他のスケジュールされたタスクはありません。
CF7、CF8、およびCF9ボックス(完全にパッチされた)でこれを見てきました。
問題の現在のボックス情報:
- CFバージョン:9,0,1,274733
- エディション:エンタープライズ
- OS:Windows 2003サーバー
- Javaバージョン:1.6.0_17
- MIN JVMヒープ:1024
- Max JVMヒープ:1024
- 最小パーマサイズ:64m
- 最大パーマサイズ:384m
- サーバーメモリ:4GB
- 5%以上のCPU使用量をめったに見ないクアッドコアマシン
JVM設定:
-server -dsun.io.usecanoncaches = false -xx:permsize = 64m -xx:maxpermesize = 384m -xx:+useparallelgc -xx:+agressiveringheap -dcoldfusion.Rootdir = {Application.Home} // = {application.home} /../ lib -doracle.jdbc.v8compatible = true
昨夜実行できなかったが、何年も実行されており、明日実行される可能性が高いです。
<cfquery datasource="common_app">
update import_counters
set current_count = 0
</cfquery>
<cfmail subject="Counters reset" to="my@email.com" from="my@email.com"></cfmail>
私が何かを逃した場合、私に知らせてください。 ありがとうございました!
解決
サーバーがColdFusion 9にアップグレードされた後、しばらくこの問題が発生しました。 http://kb2.adobe.com/cps/950/950218dc.html
おそらく、テクノートに記載されているように、許可を調整する必要があります。
他のヒント
1024からヒープのサイズを800と言うために縮小してみましたか。メモリの80%以上が利用可能なままになっているので、可能であれば最大値を減らすことを検討します。
32または64ビットのOSですか?ヒープスペースを割り当てるときは、JVMのすべてのオーバーヘッド(スタック、ライブラリなど)を考慮する必要があります。これにより、プロセスのOS制限を超えないようにします。
試してみることができるのは、最小JVMヒープサイズをCF管理者の最大JVMヒープサイズ(MB)と同じに設定することです。
また、JVMを最新の(21)または少なくとも20に更新します。
過去には、通常問題が解決したので、奇抜なことが起こり始めたときはいつでもJVMをアップグレードしました。