我有一個賬單守護進程,必須以非常快速的方式處理成千上萬的數據。我實施了ExecutorSerivce
進行並行處理。它確實增加了速度,但不是很多。大約需要2.5-3小時處理100,000條記錄。如何在半小時內處理這些數據的速度更快?如何更快地創建Java應用程序?
我已經寫了執行設置如下:
-Xms2048M -Xmx2048M -XX:MaxPermSize=256m
我試圖實現與1對生產者和消費者4生產者消費者模式。每個列表可以包含10,000條記錄。
ArrayBlockingQueue<BillableList> list =new ArrayBlockingQueue<BillableList>(10);
ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Consumer("pool1", list));
threadPool.execute(new Consumer("pool2", list));
threadPool.execute(new Consumer("pool3", list));
threadPool.execute(new Consumer("pool4", list));
Future producerStatus = threadPool.submit(new Producer("Producer", list));
producerStatus.get();
threadPool.shutdown();
在更新記錄到數據庫時,我也收到很多「超出數據庫鎖定等待超時」異常。是否由於不同的消費者在同一時間嘗試同一用戶?我如何讓不同的消費者從ArrayBlockingQueue
的列表中獲取不同的數據?
第1步:找出爲什麼它很慢。記錄高級操作的執行時間,使用分析器,執行GC日誌記錄以查看是否正在損壞內存...... – millimoose 2013-05-04 18:14:32
爲數據庫獲取非常快速的SSD陣列。 – 2013-05-04 18:14:48
也〜purrrrformance ~~~~ – 2013-05-04 18:14:52