質問

過去数年間、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をアップグレードしました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top