ホームページ > バックエンド開発 > PHPチュートリアル > ソケット fd の listen キュー: 3 エラー分析

ソケット fd の listen キュー: 3 エラー分析

WBOY
リリース: 2016-07-29 09:15:05
オリジナル
1073 人が閲覧しました

現在、Django アプリケーションは基本的に uwsgi を使用してデプロイされています。以下のようなエラーが 2 回発生しています。以下は、これら 2 つのエラーを解決するプロセスです。 listen queue of socket "127.0.0.1:9001" (fd: 3)

エラーシナリオ

    centos 6.6
  • uwsgi2.0
  • nginx1.6
エラーログ傍受

<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>
ログイン後にコピー
  • 1回目は、チャイナユニコムコンピュータルームのファイアウォールの設定が間違っていたため、サーバーが制限されました出力、つまり、外部パッケージをサーバーに送信するのは問題ありませんが、サーバーがパッケージを外部に返すと、非常に遅くなり、ほとんど使用できなくなります。このとき、uwsgi ログに大量のエラーが表示されます

  • 2 回目は、同時実行量が急激に増加した後、アクティブなリンクが 6000 付近に留まり、このエラーが大量に発生しました。

  • 分析

このエラーに基づいて、システムレベルのパラメータに問題があるはずです。詳細については、Linux man ページの listen(2) を参照してください。ソケットの場合、受け入れが行われる前に、処理を待機しているソケットの長さは、Linux (少なくとも centos6.6) ではデフォルトで 128 ですが、私がコンパイルした uwsgi ではデフォルトは 100 です。つまり、以前はシステムパラメータを調整します。最高は 128 です。

では、

キュー

の長さを調整するにはどうすればよいでしょうか? * 有効にするにはシステムパラメータを調整する必要があります * uwsgi 設定を調整してからアプリケーションを再起動する必要があります

操作システムパラメータを変更します

設定ファイルはここで直接変更され、再起動後も有効です。

/etc/sysctl.conf ファイルを変更し、これらのパラメータ値を追加または変更します

<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>
ログイン後にコピー

変更が完了したら、忘れずに

パラメータをリロードしてください

uwsgi調整

それが構成であっても、オプションを追加していてもたとえば、次の設定を ini ファイル

<code><span>listen</span>=<span>1024</span></code>
ログイン後にコピー
sysctl -p に追加し、アプリケーションを再起動して設定をリロードします。

まとめ

設定を変更することで、この種のエラーはほとんど発生せず、システムのスループットと同時実行性が大幅に向上しました。したがって、システムの特性とチューニングは、全体的なサービス品質を向上させるために非常に重要です。

リファレンス

somaxconn - その厄介な制限

listen(2) - Linux man page

  • 著作権表示: この記事は orangleliu によるオリジナルの記事です (http://blog.csdn.net/orangleliu/ )、記事を転載する場合は申告をお願いします。
  • 上記では、socket fd: 3 エラー分析の listen キューを、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート