接到有客戶回報,在批量putobject時,發現上傳到一定數量後應用卡住了,同時句柄數增加明顯。
客戶表示
1.使用10個worker線程進行put操作。
2.每個線程獨立使用OssClient。
3.OssClient沒有執行shutdown
根據客戶的描述,寫了一個類似的程式來進行複現
開啟五個線程,每個線程上傳10000次object來測試
測試5W次上傳請求正常。
而在增加callback後出現了問題

看到上傳确實卡住了。減少到1個線程,依然如此,看來并非是線程導緻。
在putobject上傳的時候,同時也會看到javaw程序的句柄數不斷增加。
通過和OSS後端同學确認,在putobject時,如果沒有callback是不需要句柄開銷的。但如果
PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
即使不顯性的read,那麼也會産生句柄開銷。而目前的句柄數是1000,當句柄數用完也就無法配置設定新的句柄導緻程式卡住。需要增加
putObjectResult.getCallbackResponseBody().close();
添加後測試,測試OK