我的團隊有一個運行(非常簡單)的服務通過Apache駱駝運行,功能上一切都測試正常,但負載測試表明,該服務隨着時間的推移會消耗內存。深入研究堆轉儲的結果是,內存消耗來自機庫。看起來,通過路線發送的每一個交易所都被保留,但我們無法確定爲什麼在路線完成並且交易成功交付後應該保留交易所的任何理由。爲什麼駱駝在inflightrepository中保留交換?
我的團隊對問題的最初反應是膝關節內存泄漏,但我不相信這是事實 - 我們只是有一個意想不到的行爲 - 引用垃圾收集不會嘗試處理它們。
難題在於它不僅僅是交換的一個副本,它似乎被保留,它是交換生命週期中保留的每一步,而路由並不特別複雜,它實現了分離 - 聚合路線,然後誇大了問題。
我們已經考慮添加一個組件來沖洗inflightrepository中的陳舊交換,但是這沒有想到這一點。
任何人都可以解釋爲什麼駱駝表現得像這樣?
沒有代碼?我沒有看到我的路線上的這種行爲。 – Namphibian
如果不提供服務的完整代碼 - 本身就有大量的代碼,那麼提供一些代碼段就相當沒有意義。這不是問題 - 駱駝保留機上交流的原因是什麼?也許「駱駝什麼時候從inflightrepository中刪除交換?」將是一個更好的問題... – Julian
我還沒有看到這種行爲。 – Namphibian