鬧心的Broken pipe

林子大了什麼鳥都有,程序猿做久了什麼bug都有。

bug描述

  1. 出現在excel導入的時候
  2. 線上有問題,本地不可重現
  3. 數據量少的時候沒問題,excel基本超過1500行就出現問題
  4. 查看日誌

解決

  1. 看日誌,應該是失去客戶端連接。猜測應該是導入操作的http請求超時。
  2. 在導入方法添加日誌,發現後臺導入邏輯還在執行時候ajax已經返回超時了。猜測導入操作的ajax時長設置有問題。
  3. 查看代碼,導入操作$.ajax({})提交,設置timeout:0,測試,依然超時。後臺使用springboot+easypoi,猜測springboot有設置http超時時長。
  4. 修改springboot配置server.connection-timeout=120000爲兩分鐘,測試,依然超時,但是發現一個有趣的地方,每次都是到1分鐘時候超時,因此問題肯定不在以上兩個地方
  5. 全局搜60、1min等無果
  6. 再對比本地和線上環境,本地IDE運行,線上多個服務通過fegin相互調用,最終通過nginx代理到外網,對,nginx代理
  7. 修改nginx配置如下,問題解決
location /guanli {
            root           html;
            index          index.html index.htm;
            proxy_set_header Host $host;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
        proxy_send_timeout 1200s;
          # nginx接收upstream server數據超時, 默認60s, 如果連續的60s內沒有收到1個字節, 連接關閉
        proxy_read_timeout 1200s;
          # nginx與upstream server的連接超時時間
        proxy_connect_timeout 1200s;
          # 發送數據至客戶端超時, 默認60s, 如果連續的60s內客戶端沒有收到1個字節, 連接關閉
        send_timeout 1200s;
            proxy_pass     http://adminService;
        }

ps:

可能有童鞋提出導入時間太長,這個也作爲優化的一個角度,可是數據再多的時候,也可能2分鐘都不夠~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章