首頁  >  文章  >  後端開發  >  listen queue of socket fd: 3 錯誤分析

listen queue of socket fd: 3 錯誤分析

WBOY
WBOY原創
2016-07-29 09:15:051061瀏覽

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

出錯場景

  • centos 6.6
  • uwsgi2.0
  • nginx1.6

錯誤錯外部發包給伺服器沒有問題,但是伺服器回傳包給外部的時候非常慢,幾乎不可用,這個時候uwsgi日誌中就出現了大量的錯誤

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

  • 分析

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

lzz註: 簡單的理解就是每個監聽的socket,在沒有accept之前,等待處理的socket

隊列

長度,linux(至少在centos6.6中)預設是128,在我這個編譯的uwsgi中預設是100,也就是說沒有調整系統參數之前,最高也就是128。

那麼怎麼才能把隊列的長度調整變長呢?

* 必須調整系統參數,使其生效

* 必須調整uwsgi配置,然後重新啟動應用操作

修改系統參數

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

修改/etc/sysctl.conf檔,新增或修改這幾個參數值

<code><span>Tue</span><span>Jun</span><span>2</span><span>17</span>:<span>33</span>:<span>27</span><span>2015</span> - *** <span>uWSGI</span><span>listen</span><span>queue</span><span>of</span><span>socket</span><span>"127.0.0.1:9001"</span> (<span>fd</span>: <span>3</span>) <span>full</span><span>!</span><span>!</span><span>!</span> (<span>101</span>/<span>100</span>) ***
<span>Tue</span><span>Jun</span><span>2</span><span>17</span>:<span>33</span>:<span>28</span><span>2015</span> - *** <span>uWSGI</span><span>listen</span><span>queue</span><span>of</span><span>socket</span><span>"127.0.0.1:9001"</span> (<span>fd</span>: <span>3</span>) <span>full</span><span>!</span><span>!</span><span>!</span> (<span>101</span>/<span>100</span>) ***</code>

修改完成之後要記得

sysctl -p

重新載入參數

uwsgi調整是不管配置,或是命令列不管配置選項,例如.ini 檔案中新增如下配置

<code><span>#对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了</span>
net<span>.core</span><span>.somaxconn</span> = <span>262144</span>
?<span>#表示SYN<strong>队列</strong>的长度,默认为1024,加大<strong>队列</strong>长度为8192,可以容纳更多等待连接的网络连接数</span>
net<span>.ipv</span>4<span>.tcp</span>_max_syn_backlog = <span>8192</span><span>#网卡设备将请求放入<strong>队列</strong>的长度</span>
net<span>.core</span><span>.netdev</span>_max_backlog = <span>65536</span></code>

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

小結

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

參考

somaxconn - That pesky limit.

listen(2) - Linux man page
  • 版權聲明:本文為orangleliu(http://blogo.轉載請聲明。
以上就介紹了 listen queue of socket fd: 3 錯誤分析,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn