2

Coldfusionのより興味深い「機能」の1つは、外部リクエストを処理する方法です。その基本的な要点は、クエリが外部ソースに対して、<cfquery>またはその他の外部要求を介して行われる場合、外部要求を特定のドライバーに渡し、その時点でCF自体がそれを一時停止できないことです。クエリまたはcfsettingでタイムアウトが指定されている場合でも、すべての外部要求でタイムアウトは完全に無視されます。

http://www.coldfusionmuse.com/index.cfm/2009/6/9/killing.threads

そのことを念頭に置いて、私たちが遭遇した問題は、CFサーバーとmySQLサーバー間の通信がうまくいかず、ハングしたスレッドが残ることがあるということです。以下の特徴があります。

  1. ハングしたスレッドはCFに表示され、FusionReactorから強制終了することはできません。
  2. mySQLにハングしたスレッドは表示されず、アクティブな実行中のクエリもありません(通常のスリープのみ)
  3. データベースは他の呼び出しに応答しており、正しく動作しているように見えます。
  4. DBまたはユーザーの最大接続数に達していません。

私には、CFが何らかの形でリクエストを行っており、mySQLがそのリクエストに応答しているが、CFが​​無視し、mySQLからの応答を待ってスレッドを開いたままにしておくという回答しか考えられないようです。これは、データベースに問題の兆候が見られない理由を説明しますが、CFはスレッドを開いたままにして謎の答えを待ちます。

通常、これらのハングしたスレッドは、他の方法で機能しているスクリプト(ニュース記事へのコメントの投稿など)にランダムに表示されます。そのスクリプトに対して1つのスレッドがハングしている場合でも、そのスクリプトに対する他の要求は実行されます。これは、スクリプトに必ずしも障害があるのではなく、スクリプトの実行時に直面した状態を意味します。

mysqlによって生成されたmax_connectionsエラーではないことを確認するためにいくつかのテストを実行しました...ユーザーを作成し、それに1つの最大接続を与え、その接続をsleep(1000)クエリと結び付け、別のクエリを実行しました。残念ながら、ハングしたスレッドを生成せずに正しくエラーになりました。

だから、私はこの時点で何が悪いのか全く手がかりがないままになっています。サーバー間の通信がうまくいかない原因となる可能性のある他の接続制限またはタイムアウトはありますか?

4

3 に答える 3

0

確認し始める必要があることの1つは、2つのサーバー間のハードウェアです。たまにパケットをドロップしているルーター、ブリッジ、またはNICがある可能性があります。これにより、mySQLボックスは、CFサーバーがそこにあり、完全な応答を無期限に待機している間にタスクを完了したと見なし、ハングしたスレッドを作成する可能性があります。

3comには、パケット損失のテストに関する詳細があります:http ://support.3com.com/infodeli/tools/netmgt/tncsunix/product/091500/c11ploss.htm#22128

于 2010-09-02T11:20:19.910 に答える
0

要するに、原因は Coldfusion の CF8 画像処理によるものだと思います。それはただのバグだったのですが、今では CF9 でその問題を二度と見たことはありません。

于 2011-11-01T04:28:16.313 に答える
0

MS SQL サーバーでも同様の問題がありました。そこでは、根本的な原因は既知の問題であり、何らかの理由でサーバーがシャットダウンしていると認識し、スレッドがハングします (サーバーは明らかにシャットダウンしていません)。

問題を解消することはできませんでしたが、プールされた DB 接続をオフにし、接続のリフレッシュ レートを調整することで問題を軽減することができました。(私はそのラベルを正しく取得したと思います -- 私の新しい雇用では管理者へのアクセス権はありません。) どちらも管理者の接続プロパティにあります。

注意: 問題は完全に CF にあるわけではありません。この問題は明らかに、すべての Java アプリに影響します。これは、私がこれによってどれほどイライラするかを決して軽減しません.

于 2010-09-02T12:54:43.697 に答える