DBにデータを挿入するためにjava 8並列ストリームを使用しています。 次は、2つの異なるインスタンス(2つのJavaの主な方法)で完了するのに要する時間【選択を実行している同じテストを1に降りてきた、それはtask.Iを完了させるために2時間以上を要しコードDB集約型タスク用の並列ストリームを使用してCPU使用率を向上させよう
customers.parallelStream().forEach(t->{
UserTransaction userTransaction = new UserTransactionImp();
try {
userTransaction.begin();
userTransaction.setTransactionTimeout(300);
//CODE to write data to DB for each customer in a global transaction using atomikos and hibernate
userTransaction.commit();
}catch(Exception e){
userTransaction.rollback();
}
});
です1つのjava intance内でスケールアップする他の方法はありませんか?私は永続性のためにAtomikos、Hibernateを使用しています。私はバッチ処理を設定していました。 しかし、私はこの間にCPUが30%以上利用されていないことに気付きました。プロセッサーを増やして拡張する方法はありません。
あなたは、接続プールを使用していますか?スレッドを互いにブロックさせている可能性のあるデータベースを作成するときに使用している他の共有リソース – Raniz
また、パラレルストリームの使用には、特にI/Oコードを実行するときに注意が必要であることに注意してください。 https://dzone.com/articles/think-twice-using-java-8 – Raniz
カスタムForkJoinPoolを使用して、並列ストリームを実行し、スレッド数を調整してみてください。 –