問題タブ [pooling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - SpringObjectPoolingとスレッドブロッキング
Bean用にSpringをCommonsPoolTargetSource定義しています。私は、プールがどのように機能するか、そしてオブジェクトがいつ返されるかを理解しようとしています。
具体的には、プールされたオブジェクトを受け取り、そのオブジェクトに対して2つのメソッドを呼び出すワーカーがある場合、次のようになります。
私が実行したテストで確認できることから、pooledFoo実際にはのインスタンスではなくFoo、プールによって提供されるプロキシです。上記のフローは次のようになります。
- でdoStepA()を呼び出す
fooと、プールから値が取得されます(スレッドが使用できない場合は、スレッドがブロックされます)。 - doStepAはpooledFooで実行されます
- doStepAが完了すると、
pooledFooインスタンスはプールに返されます - 制御がメソッドに戻り
doWork、メソッドが続行します
これが正しい場合(正しくない場合は教えてください)、呼び出されpooledFooたときにプールから返されたものは、返されたインスタンスと同じではないと想定するのは公正ですか?doStepB()doStepA()
c# - ADO.NET 接続プールは .ASMX Web サービスとどのように連携しますか?
古いスタイルの .ASMX Web サービスを作成しましたが、組み込みの ADO.NET 接続プールがどのように動作するかを知りたいです。
Web サービスはシングルトン パターンを使用していないため、リクエストごとに新たにインスタンス化されます。私の質問は、各サービス リクエストの後に接続がプールから削除されるか、それともリクエスト間でプールに保持されるかということです。私のサービスは非常に頻繁に呼び出されますが、回避できるのであれば、毎回接続のセットアップと切断を行いたくありません。
プールが AppDomain 用に維持されていることを読みましたが、各要求が新しい AppDomain を生成するかどうかはわかりません。
この場合、Min Pool Size を (0 以外の小さな数に) 設定することが有益であるかどうかも知りたいです。
誰でも知っていますか?
sql - SSISforeachループのSQLタスク-最大プールサイズに達しましたエラー
SSISでforeachループを使用してフォルダーの内容を反復処理し、ファイルごとにSQLタスクを実行しています。
これを行うと、ループの最初の約300回は正常に機能し、その後ハングして次のように表示されます。
これは、古いタスクの終了が遅すぎることを意味していると思いますか?本当のキッカーは、失敗するタスクの前に別のSQLタスクを追加する(同じ接続を使用して、tmpテーブルに空白の文字列を挿入する)と、すべてが正常に機能することです。ただし、これは良い解決策ではありません。既知の回避策があるのか、それとも非常に愚かなことをしているのかを把握したいと思っています。
.net - 誰がプーリングからより多くの利益を得ますか?マネージド/アンマネージド?
2つの同様のアプリケーションがあります。1つは管理対象で、もう1つは管理対象外です。どちらも大きなオブジェクトに重い割り当てパターンを利用しています。つまり、彼らは(長時間実行されている)ループでそれらのオブジェクトの多くを要求しており、両方とも使用後すぐにそれらのオブジェクトを解放しています。管理対象アプリは、すぐに呼び出されるIDisposable()を使用します。アンマネージドはデストラクタを利用しています。
すべてではありませんが、一部のオブジェクトを再利用できます。したがって、実行速度を上げ、メモリの断片化のリスクを最小限に抑えるために、プールが考慮されます。
プーリングからより多くの利益を期待できるアプリケーションとその理由を教えてください。
@Update:これは数学ライブラリについてです。したがって、これらの大きなオブジェクトは値型の配列になります。ほとんどの場合、LOHには十分な大きさです。私は前向きです。プーリングにより、管理側のパフォーマンスが大幅に向上します。マネージド/アンマネージド環境用の多くのライブラリが存在します。私が知っているそれらのどれも実際にそのようなプーリングをしません。なぜだろう?
jsp - Tomcat 6とMySQLで接続プールを使用するにはどうすればよいですか?
私はWebアプリケーションを構築していますが、それに伴う利点のために「接続プール」を使用したいと思います。私はいくつかのチュートリアルを読みましたが、私は本当に何をする必要があるのか理解していません。
誰かが私に北を与えることができれば、私は感謝します。
JSP /サーブレット、MySQL、Tomcat 6、およびNetbeans6.9.1を使用しています。
よろしく、ヴァルターヘンリケ。
hibernate - DB接続が不足しています!
c3p0 を接続プールとして使用して、MySQL セットアップに接続する Spring/Hibernate を実行しています。奇妙な理由で、システムに負荷がかかっているときに接続が不足します(もちろん)。
新しいレベルのトラフィック (100 人以上の同時ユーザー) に到達するまで、サイトはかなり安定していました。その時点で、DB はメルトダウンします (CPU をペグします)。私の最初のアクションは、広範なキャッシュやクエリの最適化などを通じてパフォーマンスを向上させることでした。
現在、断続的に接続が不足しています。負荷にあまり依存していないようです。時間通りに漏れていると思いますが、私の人生では、それがどこから来ているのかわかりません.
これが私の構成です:
接続を閉じる必要がある OpenSessionInViewInterceptor を実行しています。
また、@Transactional のスプリング アノテーションも使用しています。これは、サービスを Web フロント以外のコードで再利用するためです。
ここには実際には 2 つのオプションしかありません。完了時に接続を解放するわけではありません。または、彼女のズボンに入ろうとしているかのように、db でチャットをぶらぶらしています。誰かが何かアイデアを持っているなら、私は感謝しますthx
フォローアップ:最終的に、OpenSessionInViewInterceptor を使用したために接続がリークしていたことが判明しました。私は春のセキュリティをフィルターとして実行していたので、DBに接続してそれらを閉じません。修正は、OpenSessionInViewInterceptor を OpenSessionInViewFilter に移動することでした。
database - データ プーリングのプロパティを理解する
maxPoolSize は何のためにあるのだろうと思っていました。minPoolSize とは何ですか?
データベースに使用するプロパティ値を知るにはどうすればよいですか?
編集済み
Windows OSでHibernateとbitronixに接続して、Oracle 10gを使用しています。
java - JNDI 接続プールから取得したデータベース接続設定
Websphere サーバーでデータ ソースをホストしており、アプリケーション クライアントを通じてそのデータ ソースを利用したいと考えていました。
JNDI データ ソースからデータベース接続を取得した後、接続のコミット設定を false に変更しています。その後、この接続を利用して、タスクの完了後に接続を閉じます。
閉じる前に接続のコミット設定を変更するのを忘れるとどうなりますか (接続をプールに戻すことを意味します)。他のクライアントがこのデータ ソースにアクセスし、それらが同じ接続を取得する場合、コミット設定は引き続き保持されますか、それともサーバーはこれらの接続設定をリセットしますか。
spring - Oracle Streams AQ. AQOracleSQLException をスローする session.getQueue: Exhausted Resultset
マルチスレッド/マルチアプリ環境でOracle Streams AQを使用するとAQOracleSQLException、1つのスレッドのみで約10分間操作した後、Exhausted Resultsetを受け取りました。
はAQOracleSession、次のように Spring を介してプールされます。
ファクトリ メソッドcreateAQSessionを (Scala で) 使用すると、次のようになります。
このブロックの最終行から例外がスローされました。
明らかに、私はResultSetused withinを直接扱っていませんAQOracleSession。
に関連付けられたを使用していますが、これは同じメソッドの後半までではないため、ここで問題が発生することはありません。ConnectionSession
プーリング構成が正しくなく、同じセッションでいくつかの同時操作があった可能性はありますか? 他のログにはまったく異常はありませんでした。
c# - 何がそのパフォーマンスの向上を引き起こす可能性がありますか?GCでの時間、プーリング
マルチスレッドアプリケーションは、長い計算ループを実行します。1サイクルを完了するには、平均して約29秒かかります。その間、GCの.NETパフォーマンスカウンターの%時間は8.5%になります。そのすべてが第2世代のコレクションでできています。
パフォーマンスを向上させるために、ラージオブジェクト用のプールを実装しました。100%の再利用率を達成しました。現在、全体のサイクルは平均20秒しかかかりません。「GCでの%時間」は、0.3〜0.5%の範囲を示しています。現在、GCはGen0コレクションのみを実行します。
プーリングが効率的に実装され、実行にかかる追加の時間を無視すると仮定します。パフォーマンスが約33%向上したよりも。これは、GCの以前の値である8.5%とどのように関連していますか?
私にはいくつかの仮定がありますが、それを確認、調整、修正できることを願っています。
1)「GCでの時間」(私が正しく読んだ場合)は、2つの期間の関係を測定します。
- 2GCサイクルと
- 最後の完全なGCサイクルに使用された時間。この値は、最初のスパンに含まれます。
2番目の期間に含まれないのは、ブロッキングGCのワーカースレッドを停止して再起動するオーバーヘッドです。しかし、それが全体の実行時間の20%にもなるのはなぜでしょうか。
2)GCのスレッドを頻繁にブロックすると、トレッド間に競合が発生する可能性がありますか?それはただの考えです。VS同時実行プロファイラーを介してそれを確認できませんでした。
3)それとは対照的に、ページミスの数(パフォーマンスカウンター:メモリ->ページフォールト/秒)は、プールされていないアプリケーション(25.000 /秒)の方が、GCレートが低いアプリケーションよりも大幅に多いことが確認できました。 (毎秒200)。私は想像することができました、これは同様に大きな改善を引き起こすでしょう。しかし、何がその振る舞いを説明できるでしょうか?それは、頻繁に割り当てられると、仮想メモリのアドレス空間からはるかに大きな領域が使用されるため、物理メモリに保持するのが難しくなるためですか?そして、それをどのように測定して、ここでの理由として確認することができますか?
ところで:GCSettings.IsServerGC = false、.NET 4.0、64ビット、Win7、4GB、Inteli5で実行されています。(そして大きな質問をしてすみません..;)