我已经在许多控制台(在 Linux、Mac 上……)以及许多不同网络中的许多不同机器上看到了这一点。我永远无法确定发生这种情况的确切原因:您所要做的就是通过 SSH 登录到一台机器。如果由于某种原因连接中断(为简单起见,假设网络电缆被拉出),那么有时控制台会永远挂起 - 在其他时候,它只是正常退出到父 shell。
发生这种情况时很烦人(例如,您丢失了命令历史记录。)是否有可以强制退出的秘密键盘快捷键(Ctrl-C 或 Ctrl-D 不起作用)?无论如何,所有实现中出现这个随机“错误”的原因是什么?
突然间(阅读:没有更改任何参数)我的 netbsd 虚拟机开始运行异常。症状与 ssh 隧道有关。
我从我的笔记本电脑启动:
$ ssh -L 7000:localhost:7000 user@host -N -v
Run Code Online (Sandbox Code Playgroud)
然后,在另一个外壳中:
$ irssi -c localhost -p 7000
Run Code Online (Sandbox Code Playgroud)
ssh 调试说:
debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 localhost:80 连接到(远程)Web 服务器,结果相同。
远程主机运行 NetBSD:
bash-4.2# uname -a
NetBSD host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) …
Run Code Online (Sandbox Code Playgroud) 我想分析mysql
流量。现在,所有 mysql 请求都发送到 MySQL unix 套接字:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)
我正在尝试禁用该套接字以强制 MySQL 在回送上使用网络套接字。我尝试注释掉和文件socket
中的所有指令并重新启动 MySQL,但没有任何区别。my.cnf
debian.cnf
如何禁用 MySQL unix 套接字以通过网络强制 MySQL?
其他信息:我运行MySQL 5.1
上ubuntu 10.04
。
问题的精确度
由于很多人建议启用网络套接字,我想通过指出绑定地址已经启用bind-address = 127.0.0.1
并且侦听连接可用来澄清我的问题:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
Run Code Online (Sandbox Code Playgroud)
我仍然没有看到127.0.0.1:3306
来自我的 web 应用程序(Drupal 网站)的连接尝试。
更新了答案
问题似乎确实来自mysqli
Drupal 使用的连接器(.ht_config.php
对于那些感兴趣的人)。它被设置为: mysqli://drupal:***@localhost/drupal
,更改localhost
以127.0.0.1
修复问题(即 Drupal 现在正在连接到网络套接字)。
再说一遍,我们都会犯错,而我刚刚犯了一个。
简史:当我注意到一些奇怪的行为时,我正在租用的 VPS (Debian) 上做一些事情。使用该netstat
命令,我看到了一个通过 SSH 的非授权连接。我不知道该怎么办,所以我决定使用iptables
以下命令关闭他的连接:
iptables -A INPUT -p tcp --dport ssh -s IP -j DROP
Run Code Online (Sandbox Code Playgroud)
但我累了,我写了
iptables -A INPUT -p tcp --dport ssh -j DROP
Run Code Online (Sandbox Code Playgroud)
我把自己(和其他人)踢出去了......
我该如何解决?
Nginx worker_connections
“设置了一个工作进程可以打开的最大并发连接数。这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是实际的同时连接数不能超过当前最大打开文件数限制”。我对此有几个疑问:
我有两台服务器。第一个程序需要在端口 2194 上与第二个程序通信。
我知道它不起作用,因为当我这样做时:
root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out
Run Code Online (Sandbox Code Playgroud)
server1# iptables -L -n
Chain INPUT (policy DROP)
...
...
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
...
Chain LOCALINPUT (1 references)
target prot opt source destination
...
Chain LOCALOUTPUT (1 references)
target prot opt source destination
...
Chain LOGDROPIN (1 references)
target prot opt …
Run Code Online (Sandbox Code Playgroud) 直到昨天晚上,我才能从本地机器连接到我的服务器。现在,我收到以下错误:
已成功与服务器建立连接,但在登录前握手期间发生错误。(提供程序:SSL 提供程序,错误:0 - 等待操作超时。)(.Net SqlClient 数据提供程序)
请注意,我可以毫无问题地登录到实际服务器。
昨天,我在我的机器上安装了 IIS 并使用我的 IP 地址设置了一个站点 - 不知道这是否有什么关系。
我确实遇到了这篇文章,按照步骤操作,但似乎没有帮助。
我也看了下面的文章,更改了TC/IP设置,重新启动,但没有。
也开始尝试从评论中提出建议,但当我意识到我可能会把事情搞砸时就停止了。
那么,为什么会发生这种情况/我该如何解决?
因此,如果我使用 apache 基准测试 (ab) 进行一些基准测试,并且会使用大量请求。然后有时在测试过程中我会收到此错误。
我什至不知道这是什么意思。那么我该如何解决呢?或者它只是在服务器获得太多点击时会发生的事情?问题是,如果我运行 10,000 次点击,它会完美运行。如果我再次运行它,它将达到 4000 并出现错误:
apr_socket_recv: Connection reset by peer (104)
Run Code Online (Sandbox Code Playgroud)
关于我的设置的一点:我让 nginx 接受静态请求并处理动态请求到 apache。有问题的文件由 nginx 从缓存中提供,所以我想这可能与 nginx 处理请求的方式有关?
想法?
tcpdump
在与 apache 服务器的本地连接上运行时,我发现 TCP 连接每 2 秒立即建立并关闭一次。我如何找到哪个进程负责这些?netstat -ctp
没有帮助,连接速度太快,并且没有为 TIME_WAIT 显示进程标识符。
结果证明它们是 haproxy 探针,我可以用 验证strace
,但我仍然不知道有什么方法可以首先确定 haproxy。
我有一个叫长寿命过程中的问题KUBE-代理的存在部分Kubernetes。
问题是有时连接会处于 FIN_WAIT2 状态。
$ sudo netstat -tpn | grep FIN_WAIT2
tcp6 0 0 10.244.0.1:33132 10.244.0.35:48936 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:48340 10.244.0.35:56339 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:52619 10.244.0.35:57859 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:33132 10.244.0.50:36466 FIN_WAIT2 14125/kube-proxy
Run Code Online (Sandbox Code Playgroud)
这些连接会随着时间的推移而堆积,从而使过程行为异常。我已经向 Kubernetes bug-tracker报告了一个问题,但我想了解为什么 Linux 内核没有关闭此类连接。
根据其文档(搜索 tcp_fin_timeout),处于 FIN_WAIT2 状态的连接应该在 X 秒后被内核关闭,其中 X 可以从 /proc 读取。在我的机器上它设置为 60:
$ cat /proc/sys/net/ipv4/tcp_fin_timeout
60
Run Code Online (Sandbox Code Playgroud)
所以如果我理解正确的话,这样的连接应该在 60 秒后关闭。但事实并非如此,他们在这种状态下停留了几个小时。
虽然我也明白 FIN_WAIT2 连接非常不寻常(这意味着主机正在等待来自连接远程端的一些 ACK,但它可能已经消失了)我不明白为什么这些连接没有被系统“关闭” .
有什么我可以做的吗?
请注意,重新启动相关进程是最后的手段。
connection ×10
ssh ×3
iptables ×2
networking ×2
nginx ×2
tcp ×2
apache-2.2 ×1
benchmark ×1
console ×1
firewall ×1
iis ×1
kernel ×1
linux ×1
localhost ×1
monitoring ×1
mysql ×1
netbsd ×1
redhat ×1
scalability ×1
socket ×1
sql-server ×1
ubuntu ×1