1. 程式人生 > 實用技巧 >由Premature end of Content-Length delimited message body因發的問題排查

由Premature end of Content-Length delimited message body因發的問題排查

問題出現: 視訊剪輯超時

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方法進行處理的。

改動程式碼為如下:

這樣處理資料的時候就非常快,問題看似已經解決。