请求计数的增加以“错误:套接字挂断”告终

富美

当请求数增加时,后端服务/nginx 代理开始响应“错误:套接字挂起”。设置如下。

操作系统:CentOS 6

Express JS 服务 -> nginx 作为代理 -> Gunicorn 运行的 Flask 应用程序

JS 应用程序同时向其他服务发送多个请求,当请求计数超过 ~100 时,它开始返回错误响应。如果计数较低,则一切正常。

我遵循了 Gunicorn 文档中的 nginx 示例配置 + 增加超时限制 + 增加 nginx 打开文件限制。我也尝试过 keepalive 选项,但问题仍然存在。Gunicorn 没有显示任何错误。

nginx 配置片段:

upstream app_server {
    server 127.0.0.1:8000 fail_timeout=0;
    keepalive 100;
}

server {
    listen 5001;
    client_max_body_size 4G;

    keepalive_timeout 300;

    root /path/to/app/current/public; # static files

    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        # Timeouts
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        send_timeout 300;

        proxy_http_version 1.1;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app_server;
    }
}

从代理收到的错误响应:

{ RequestError: Error: socket hang up
    at new RequestError (/home/pm2deploy/apps/app-backend/source/node_modules/request-promise-core/lib/errors.js:14:15)
    at Request.plumbing.callback (/home/pm2deploy/apps/app-backend/source/node_modules/request-promise-core/lib/plumbing.js:87:29)
    at Request.RP$callback [as _callback] (/home/pm2deploy/apps/app-backend/source/node_modules/request-promise-core/lib/plumbing.js:46:31)
    at self.callback (/home/pm2deploy/apps/app-backend/source/node_modules/request/request.js:185:22)
    at Request.emit (events.js:160:13)
    at Request.onRequestError (/home/pm2deploy/apps/app-backend/source/node_modules/request/request.js:881:8)
    at ClientRequest.emit (events.js:160:13)
    at Socket.socketOnEnd (_http_client.js:423:9)
    at Socket.emit (events.js:165:20)
    at endReadableNT (_stream_readable.js:1101:12)
    at process._tickCallback (internal/process/next_tick.js:152:19)
  name: 'RequestError',
  message: 'Error: socket hang up',
  cause: { Error: socket hang up
    at createHangUpError (_http_client.js:330:15)
    at Socket.socketOnEnd (_http_client.js:423:23)
    at Socket.emit (events.js:165:20)
    at endReadableNT (_stream_readable.js:1101:12)
    at process._tickCallback (internal/process/next_tick.js:152:19) code: 'ECONNRESET' },
  error: { Error: socket hang up
    at createHangUpError (_http_client.js:330:15)
    at Socket.socketOnEnd (_http_client.js:423:23)
    at Socket.emit (events.js:165:20)
    at endReadableNT (_stream_readable.js:1101:12)
    at process._tickCallback (internal/process/next_tick.js:152:19) code: 'ECONNRESET' },
  options:
   { method: 'PUT',
     uri: 'http://localhost:5001/transformers/segmentAvg',
     qs:
      { stdMultiplier: 2,
        segmentLeft: 1509366682333,
        segmentRight: 1509367401685 },
     body: { index: [Array], values: [Array] },
     headers: {},
     json: true,
     callback: [Function: RP$callback],
     transform: undefined,
     simple: true,
     resolveWithFullResponse: false,
     transform2xxOnly: false },
  response: undefined }

添加:

在操作系统日志中记录了以下条目:

possible SYN flooding on port X. Sending cookies.
富美

内核套接字积压达到限制并在请求后下降。

原因:由于 Red Hat Enterprise Linux 中的 LISTEN 套接字缓冲区已满,内核丢弃 TCP 连接

增加内核套接字积压限制

检查当前值:

# sysctl net.core.somaxconn
net.core.somaxconn = 128

增加值:

# sysctl -w net.core.somaxconn=2048
net.core.somaxconn = 2048

再次查看以确认更改:

# sysctl net.core.somaxconn
net.core.somaxconn = 2048

坚持改变:

echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf

增加应用套接字监听积压

uWSGI的配置参数

listen=1024

此解决方案来自https://access.redhat.com/solutions/30453

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

请求期间出现“套接字挂断”错误

来自分类Dev

对外部API的https请求上的套接字挂断错误?

来自分类Dev

套接字挂断错误与多个http.get请求

来自分类Dev

发送请求时,nodejs套接字挂断

来自分类Dev

Express出现“错误:套接字挂断”

来自分类Dev

Express出现“错误:套接字挂断”

来自分类Dev

使用Node HTTP请求从GitHub API进行套接字挂断错误

来自分类Dev

MongoError:套接字挂断

来自分类Dev

Virtualbox 套接字挂断

来自分类Dev

Node.js:请求时套接字挂断

来自分类Dev

错误:套接字使用节点v0.12.0挂断

来自分类Dev

套接字挂断错误Http-Proxy NodeJS

来自分类Dev

为什么会收到“错误套接字挂断”响应?

来自分类Dev

Node.js https.request()错误:套接字挂断

来自分类Dev

异步函数抛出错误:套接字挂断

来自分类Dev

云函数返回 RequestError:错误:套接字挂断

来自分类Dev

带有 Firebase Cloud Functions 错误的 SendGrid:“套接字挂断”

来自分类Dev

错误的请求套接字python

来自分类Dev

将请求发布到Node-http-proxy Node.js时发生套接字挂断

来自分类Dev

python套接字错误请求400

来自分类Dev

python套接字错误请求400

来自分类Dev

通过节点客户端调用Google API时出现“套接字挂断”错误

来自分类Dev

带套接字的Python GET请求-400错误的请求

来自分类Dev

/node_modules/http-proxy/lib/http-proxy/index.js:120; 错误:套接字挂断

来自分类Dev

Java套接字收到HTTP / 1.1 400错误请求

来自分类Dev

Node.js 套接字在代理存在时挂断

来自分类Dev

套接字错误-python

来自分类Dev

套接字错误-python

来自分类Dev

使用套接字的HTTP请求