由Premature end of Content-Length delimited message body因發的問題排查
阿新 • • 發佈:2020-07-23
問題出現: 視訊剪輯超時
1。檢查系統日誌
發現這個報錯資訊,導致介面訪問超時獲取資料失敗。
2。經過對網上資訊梳理,發現這個超時是在用域名訪問nginx時候,有一個send_timeout超時時間,超過這個時間nginx將連線斷開了。程式碼會報錯
3。由於這個請求的資料大小隻有2M,大概四千條資料,響應不應該這麼慢,然後開始debug查詢問題。
4。看圖
這個是httpUtil的一個工具類,可以看到這行程式碼是有問題的。
原因:
使用+拼接字串的實現原理,基於jdk1.8
下面一段程式碼。把他生成的位元組碼進行反編譯,看看結果。
StringtestJoin ="testJoin";
Stringintroduce ="測試資料拼接";
Stringresult =
testJoin +","+ introduce;
反編譯後的內容如下,反編譯工具為jad。
String
testJoin="testJoin";
String introduce ="\u6BCF\u65E5\u66F4\u65B0Java\u76F8\u5173\u6280\u672F\u6587\u7AE0";
String
result= (newStringBuilder()).append(testJoin).append(",").append(introduce).toString();
通過檢視反編譯以後的程式碼,可以發現,原來字串常量在拼接過程中,是將String轉成了StringBuilder後,使用其append方法進行處理的。
改動程式碼為如下:
這樣處理資料的時候就非常快,問題看似已經解決。