node.js - nginx tcp SYN 数据包未收到 ACK

标签 node.js linux sockets nginx tcp

我的服务器设置是 nginx 直接连接到 node.js 服务器(nginx 和 node.js 在同一个 Node 中,nginx 将请求转发到 Node :127.0.0.1:8000)。症状是有时nginx日志中有一些504日志。并且 node.js 日志没有显示任何收到请求的迹象。 然后我使用 iptables 启用了 tcp 日志,它将所有 tcp 数据包记录到端口 8000。检查 tcp 日志后,nginx 似乎试图与 node.js 服务器建立 tcp 连接,但它从未成功。它一直在重试发送 SYN 数据包,然后被 nginx 超时。这是一个示例(tcp + nginx 日志):

13:44:44 sp:48103 dp:8000 SYN
13:44:45 sp:48103 dp:8000 SYN
13:44:47 sp:48103 dp:8000 SYN
13:44:51 sp:48103 dp:8000 SYN
13:44:59 sp:48103 dp:8000 SYN
13:45:15 sp:48103 dp:8000 SYN
13:45:44 nginx 504

期间CPU负载很轻,内存<50%,每分钟传入请求不到50个。其他请求均正常处理。

服务器是 Ubuntu 14.04.2 LTS

知道发生了什么事吗?似乎是操作系统级别的问题?提前谢谢你。

最佳答案

检查环回接口(interface)上的 TCP 端口 8000 上是否确实正在运行某些东西。尝试一些命令,例如:

lsof -P -n -i tcp:8000
fuser 8000/tcp
ss -4lnt
netstat -4lnt

这些应该会给你一些提示,让你知道是否有东西在听。或者它可能只在特定接口(interface)/地址上监听而不是您的环回。

关于node.js - nginx tcp SYN 数据包未收到 ACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43950558/

相关文章:

javascript - node.js 服务器端的监听器太多?

node.js - 如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接

linux - 如果权限已修改,如何自动结束/销毁用户现有的已连接 Putty session (任何 telnet 或 ssh)

linux - 为什么两个单独的进程可以bind()到同一个TCP端口,但不能同时监听?

java - 与 Jetty 的 TIME_WAIT 连接过多

javascript - 为什么我能够在 Node/Jest 中访问 WebSocket native 浏览器对象?

linux - Unix/Linux shell 变量问题

javascript - NPM 环境变量在 Windows 中不起作用?

javascript - 如何使用 NeDB 获取数据库中特定记录的 id?

node.js - 如何在 ASP.Net Core Web 项目中从 TypeScript 引用 Node 模块