listen queue of socket fd: 3 錯誤分析

來源:互聯網
上載者:User

現在django的應用基本都是使用uwsgi來部署,類似下面 listen queue of socket "127.0.0.1:9001" (fd: 3) 的錯誤出現過2次,下面說下這兩次錯誤出現的解決的過程。

出錯情境

  • centos 6.6
  • uwsgi2.0
  • nginx1.6

錯誤記錄檔截取

TueJun217:33:272015 - *** uWSGIlistenqueueofsocket"127.0.0.1:9001" (fd: 3) full!!! (101/100) ***TueJun217:33:282015 - *** uWSGIlistenqueueofsocket"127.0.0.1:9001" (fd: 3) full!!! (101/100) ***
  • 第一次是因為聯通機房防火牆配置錯了,限制了伺服器output,也就是外部發包給伺服器沒有問題,但是伺服器返回包給外部的時候非常慢,幾乎不可用,這個時候uwsgi日誌中就出現了大量的錯誤

  • 第二次是並發量劇增之後,活動連結保持在6000左右的時候,大量出現這個錯誤。

分析

以這個錯誤為基礎,查詢了下相關資料,應該是系統層級參數的問題,具體可以參考 linux man page listen(2).

lzz註: 簡單的理解就是每個監聽的socket,在沒有accept之前,等待處理的socket隊列長度,linux(至少在centos6.6中)預設是128,在我這個編譯的uwsgi中預設是100,也就是說沒有調整系統參數之前,最高也就是128。

那麼怎樣才能把隊列的長度調整變長呢?
* 必須調整系統參數,使其生效
* 必須調整uwsgi配置,然後重啟應用

操作

修改系統參數

這裡直接修改設定檔了,重啟後仍然有效。

修改/etc/sysctl.conf檔案,添加或者修改這幾個參數值

#對於一個經常處理新串連的高負載 web服務環境來說,預設的 128 太小了net.core.somaxconn = 262144?#表示SYN隊列的長度,預設為1024,加大隊列長度為8192,可以容納更多等待串連的網路連接數net.ipv4.tcp_max_syn_backlog = 8192#網卡裝置將請求放入隊列的長度net.core.netdev_max_backlog = 65536

修改完成之後要記得 sysctl -p 重新載入參數

uwsgi調整

不管是配置,還是命令列加一個選項,例如 .ini 檔案中添加如下配置

listen=1024

之後重啟應用,重新載入配置。

小結

通過修改配置,這種錯誤基本沒有出現過了,系統的輸送量和並發數都大大提高了。所以系統特性和調優對於提高整個服務品質非常重要。

參考

  • somaxconn - That pesky limit.
  • listen(2) - Linux man page

著作權聲明:本文為orangleliu(http://blog.csdn.net/orangleliu/)原創文章,文章轉載請聲明。

以上就介紹了 listen queue of socket fd: 3 錯誤分析,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.