我有一個應用程序在UDP端口上監聽UDP數據報。我使用UDP入站通道適配器來偵聽此端口。我的UDP通道適配器配置爲使用ThreadPoolTaskExecutor來分派傳入的UDP數據報。在我使用直接通道的UDP通道適配器之後。我的頻道只有一個用戶,即服務激活者。提高數據庫訪問的性能
該服務將傳入消息添加到存儲在內存中的同步列表中。然後,我有一個線程每5秒檢索一次列表的內容,並對MySQL數據庫進行批量更新。
我的問題:
- 消息的第一體到達。我的ThreadPoolExecutor的線程從UDP通道適配器獲取傳入消息,並將它們添加到同步列表中。假設接收並插入了10000條消息。
- 後臺線程檢索10000條消息並進行批量更新(JdbcTemplate.update(String [])。
- 此時,後臺線程等待來自數據庫的響應,但現在,因爲需要時間到數據庫執行10000 INSERT,已收到20000條消息並出現在列表中
- 後臺線程收到數據庫的響應,然後檢索20000條消息並進行批量更新(JdbcTemplate.update (String [])。
- 執行INSERT需要更多時間來執行數據庫,並且在此期間收到35000條消息並將其存儲在列表中
堆大小不斷增大,並在一段時間後導致內存執行。
我試圖找到解決方案來改善我的應用程序的性能。
感謝
問一個數據庫管理員調整/重新配置數據庫,或在SAN上(或在多個節點上)使用散列隨機文件(最終使用雙路徑) sks配置) –