요즘 Django 애플리케이션은 기본적으로 uwsgi를 사용하여 배포됩니다.
listen queue of socket "127.0.0.1:9001" (fd: 3)
이 두 가지 오류를 해결하는 과정은 아래와 같습니다.
오류 시나리오
오류 로그 가로채기
<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>
처음은 차이나유니콤 전산실의 방화벽이 잘못 설정되어 서버 출력이 제한되었기 때문입니다. 즉, 외부 패킷 전송에는 문제가 없었습니다. 그런데 서버가 외부로 패킷을 돌려보내는데 속도가 매우 느리고 거의 사용이 불가능했습니다. 이때 uwsgi 로그에
많은 오류가 나타났습니다. 동시성이 급격히 증가하고 활성 링크 수가 6000개 정도에 머물렀습니다. 이 오류는 대량으로 발생합니다.
분석
이 오류를 토대로 관련 정보를 확인했습니다. 시스템 수준 매개변수에 문제가 있는 것으로 보입니다. 자세한 내용은 Linux Man 페이지를 참조하세요. Listen(2).
lzz 참고: 각 수신 소켓에 대해 수락이 발생하기 전에 대기열 처리를 기다리는 소켓의 길이는 기본적으로 128입니다. Linux(적어도 centos6.6에서는) 컴파일된 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>
수정이 완료된 후 sysctl -p
매개변수를 다시 로드하세요
uwsgi 구성인지
조정하거나 명령줄에 옵션을 추가합니다. 예를 들어 다음 구성
<code><span>listen</span>=<span>1024</span></code>
을 .ini 파일에 추가한 후 다시 시작합니다. 응용 프로그램을 실행하고 구성을 다시 로드합니다.
요약
구성을 수정하여 이런 오류가 거의 발생하지 않았으며 시스템 처리량과 동시성이 크게 향상되었습니다. 따라서 전반적인 서비스 품질을 향상시키기 위해서는 시스템 특성과 튜닝이 매우 중요합니다.
참조
저작권 설명 : 이 기사는 orangleliu(http://blog.csdn.net/orangleliu/)의 원본 기사입니다. 기사를 재인쇄할 때 명시해 주시기 바랍니다.
위에서 관련 측면을 포함하여 소켓 fd:3 오류 분석의 청취 대기열을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.