2017-11-16 5 views
0

Javaアプリケーションを処理するバッチ・ファイルがあります。サービスがバースト的です。多くのファイルがいくつか取得され、しばらく処理されません。バッチファイル要求を並列処理するスレッドプールがあります。私はアイドルタイムの後の最初の処理が遅いことを観察し、速度を上げます。アプライメントは数日間ウォームアップされていますが、アプリケーションが使用されていない状態では一貫した応答時間はありません。スレッドはアイドルタイムの後に本当に「冷たく」なりますか?もしそうなら、非活動時にアプリケーションをウォーミング状態に保つ方法は何ですか? ThreadPoolExecutor内のスレッドの2種類がありますJavaバッチ・アプリケーションとアイドル・スレッド・プール

final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
     executor.setCorePoolSize(100); 
     executor.setMaxPoolSize(2000); 
     executor.setQueueCapacity(250); 
     executor.setThreadNamePrefix(prefix); 
     executor.setKeepAliveSeconds(20); 
     executor.setWaitForTasksToCompleteOnShutdown(wait); 

答えて

0

はここに私のThreadPoolTask​​Executorの初期化でコアとノンコア。 コアスレッドは常にアクティブであり、デフォルトでは終了できません。 allowCoreThreadTimeOutを使用して終了することができます。これとは対照的に、コア以外のスレッドは、アイドル状態がkeepAliveTimeより長い場合に終了します。ここには、ThreadPoolExecutor設定パラメータの包括的な説明があります。したがって、コアスレッドだけがプールを暖かく保ち、応答時間を一定に保つことができます。 ExecutorService.newFixedThreadPoolコアスレッド数を指定すると、適切なスレッドプール構成のように見えます。トレードオフは、スレッドをアクティブに保つためのOSリソースの絶え間ない使用です。

+0

ニキータ、返信いただきありがとうございます。 ThreadPoolTask​​Executorでexecutor.setCorePoolSize(100)を設定します。また、アプリケーションの非アクティブ後も処理が遅くなることがあります。 – user3140656

+0

スレッドプールが問題なのですか?たとえば、内部プールやサードパーティのフレームワークのキャッシュにすることはできますか? –

+0

アイドル時間が経過した後、100Kファイルを実行します。最初は3回実行してから次の3回まで実行します。私はキャッシュが非アクティブの間にクリアになるとは思わないでしょう。コンパイラは、非アクティブなアプリケーションに対して何らかのメモリ「最適化」を行うことができますか? – user3140656

関連する問題