流工作使用動作連接失敗

流工作寫入動作水槽與內存不足錯誤失敗,因為HTTP客戶端沒有得到終止。

寫的阿施施

去年發表在:2022年5月19日

問題

你有流工作寫入動作水槽,並沒有與內存不足錯誤消息。

. lang。OutOfMemoryError: GC開銷限製超過
. lang。OutOfMemoryError: Java堆空間。

症狀包括:

  • Ganglia顯示逐步增加JVM內存使用。
  • Microbatch分析顯示輸入和處理速率是一致的,這意味著源或處理沒有問題。
  • 堆轉儲顯示Java hashmap JVM堆上占據很大的空間和增加。

導致

最常見的原因為這個錯誤是你關閉動作的客戶,但你不關閉HTTP客戶端。

例如,一個新的運動客戶通常為每個分區創建。

% scala類KinesisSink延伸ForeachWriter [SinkInput]{私人var kinesisClient: kinesisClient = _覆蓋def開放(partitionId:長,版本:長):布爾= {val httpClient = ApacheHttpClient .builder () .build () kinesisClient = kinesisClient .builder () .region (Region.of(地區).httpClient (httpClient) .build()真}覆蓋def過程(價值:KinesisSinkInput):單位={/ /主要過程。}覆蓋def關閉(errorOrNull: Throwable):單位= {kinesisClient.close ()}}

這個示例代碼調用kinesisClient.close ()但它不是httpClient.close ()

這意味著HTTP客戶端被創建,打開TCP連接和使用資源,但沒有得到終止。

解決方案

確保你在不再需要時關閉HTTP客戶端。

% scala覆蓋def關閉(errorOrNull: Throwable):單位= {client.close () httpClient.close ()}


這篇文章有用嗎?