問題タブ [fail-fast]
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.
multithreading - Spring Batch: OutOfMemoryError が飲み込まれた
大規模なアプリケーションの一部として、チャンク指向のタスクレット (リーダー、プロセッサー、ライター) だけで構成される Spring Batch ジョブをセットアップしました。ジョブはメイン スレッドでは実行されません。
時折、タスクレット コードが OutOfMemoryError をスローします。そこで、スレッドの UncaughtExceptionHandler を設定して、このようなエラーに対応できるようにし、アプリケーションを単純に終了させました。
しかし、OutOfMemoryError がスレッドの UncaughtExceptionHandler に到達することはありません。よくわからなくても、OutOfMemoryError はおそらく AbstractStep によって「飲み込まれた」と言えます。RepeatTemplate には確かに役割があります。OutOfMemoryError について一部の RepeatListeners に通知できる可能性がありますが、デフォルトではリスナーは登録されておらず、タスク定義の通常のタグを使用してそれらを登録することはできないようです。
いずれにしても、OoME が飲み込まれているため、OutOfMemoryError の後でも JVM は実行を続けます。これは、アプリケーションが実際にクラッシュしたことを明示しないため、好ましくありません。
では、Spring Batch がそのような種類のエラーを飲み込み、それらを処理する可能性を防ぐ方法について何かアドバイスはありますか?
もちろん、OoME の修正にも取り組んでいますが、エラーが発生した場合に JVM が単にクラッシュするだけでも安全だと思います。
Spring Batch 3.0.1 を使用しています。
java - Junit を使用した Web サービスの機能/統合テスト
質問は、私よりも優れた解決策を見つけることを目的としています。
統合テストには次の要件があります。
- 各統合テストは、単一のテスト クラスに実装されます。
- テスト クラスのメソッドは、順番に実行する必要があります。
- 各メソッドは、統合/機能テストの 1 つのステップです。
- テスト メソッドが失敗した場合、テスト クラス内の他のすべてのテスト メソッドをスキップする必要があります。これは、後続のエラーを見つける意味がないためです。
私のソリューションは次のようになります。
抽象テスト クラスからすべてのテスト クラスを継承するだけです。
誰かがより良いアイデアを持っていますか? 私の問題:クラス名がスキップを通知するため、このようなテストクラスを複数回並行して実行できません...
いいえ!重複ではありません! さまざまな (Web) サービスを特定の順序で使用する機能テストを作成しようとしています。質問「サーブレットをテストするにはどうすればよいですか?」かなり違います!
ともかく。TestNGに切り替えました。TestNG は、私が持っているすべての要件をサポートし、魅力的に機能します。グルーコードはもう必要ありません!
java - サイズ変更機能でハッシュマップのフェイルファストが発生しないのはなぜですか? (複数スレッドの競合状態の問題)
全体として、ハッシュマップのサイズ変更機能のマルチスレッド競合状態の問題を理解しようとしていました。
ここから読むと。競合状態の問題により、エントリ リストの無限ループ リンクが発生します。
Hashmap
複数のスレッドがアクセスするのを即座に停止するフェイルファストメカニズムがあることはすでに知っていました。次のコードはそれを示しています。
私の質問は、サイズ変更機能でフェイルファストが機能しないのはなぜですか? 私がデバッグするコードは以下のとおりです。(jdk1.7)
for
を使用しないため、Iterator
?
更新しました
Put*
または、サイズ変更関数が、値を変更するメソッドを使用Remove*
しないためですか? それを確認するのを手伝ってください.(悪い英語を許してください.)Clear*
modCount
ありがとう。
c# - 破損状態の例外を適切に処理する
この質問に関連して、.NET 4.5.2 アプリが破損状態の例外をキャッチできるように CLR を強制したいと思います。これは、それらをログに記録してからアプリケーションを終了するという唯一の目的のためです。catch (Exception ex)
アプリの周りにいくつかの場所がある場合、これを行う正しい方法は何ですか?
したがって、<legacyCorruptedStateExceptionsPolicy>
属性を指定した後、正しく理解していれば、すべてのcatch (Exception ex)
ハンドラーが例外をキャッチAccessViolationException
し、喜んで続行します。
ええ、それcatch (Exception ex)
が悪い考えであることは承知していますが、CLR が少なくとも正しいスタック トレースをイベント ログに記録してくれるなら、喜んで顧客に説明したいと思います。彼のサーバー アプリは午前 1 時に急速に失敗し、しばらくの間オフラインになっています。夜は良いことです。しかし残念なことに、CLR は無関係な例外をイベント ログに記録してからプロセスを終了するため、実際に何が起こったのかを知ることができません。
問題は、これを実現する方法、プロセス全体です。
(アップデート)
言い換えれば、これはおそらく単純なアプリのほとんどの例外で機能します。
ただし、次の場合は機能しません。
- 未処理のアプリ ドメイン例外 (つまり、非フォアグラウンド スレッドでスローされる)
Main
Windows サービス アプリ (実際のエントリ ポイントを持たない)
この作業を行う唯一の方法のように思え<legacyCorruptedStateExceptionsPolicy>
ますが、その場合、CSE をログに記録した後に失敗する方法がわかりませんか?