能 ping 通但连不进去是什么情况

525 views
Skip to first unread message

Bojie Li

unread,
Nov 6, 2013, 9:08:49 AM11/6/13
to USTC_LUG
blog 服务器连不进去了,症状是能 ping 通,TCP 连接能建立,但后续的包只能以很小的概率收到,因此 ssh 很难连进去,http 也无法访问。好不容易连进去一次,sudo init 6,新的命令提示符也出来了,不过到现在也没有重启。

两小时前,重启换了新内核 3.2.0-4-amd64,Debian wheezy 标配。系统是前几天 dist-upgrade 过的。问题是突然出现的,当时我和 zsj 都在 ssh,终端突然就卡住了。

谁能猜测这是什么原因?一种可能是 nf_conntrack table full,不过 sysctl 设成了 655360 entry,应该够用了吧。

Zhang Cheng

unread,
Nov 6, 2013, 9:23:26 AM11/6/13
to USTC LUG
如果能ping通、部分tcp端口能连上,但是收不到任何数据,这可能是kernel panic了。(有些时候kernel panic会出现这种现象。)

你说的这个情况看上去能连上去,那说明没有kernel panic,至少还能fork出bash进程来。

一个bash会突然卡住甚至掉线,说明有几种可能:
* CPU被吃满,调度不到bash。这种情况会导致操作响应慢,但是不应该会导致进程被干掉。(当然也不是完全不可能,例如可能由于没有响应,TCP超时了,不过总体上来说这种可能行很小)
* 还有可是内存被吃满,导致一些程序被oom kill。我碰到过线上某个软件有bug,不断的fork进程,产生了类似于fork炸弹的东西,把系统里的内存给吃光了,无法fork新进程,或者导致一些进程被oom kill了。不过oom kill一般会有提示,而且ssh登上去如果由于内存原因创建不了新进程,那么终端上也会输出一些错误信息。
* 最有可能的还是网络问题。那问题的原因可能就很多了。你说的nf_conntrack table full是一种可能性,还有例如服务器受到攻击,网卡中断占满了一个CPU(一般的网卡不支持多队列,一个队列发出的中断都会送到同一个CPU上,这个CPU成为整个系统网络通信的瓶颈),这种情况一般DoS无法达到,更可能是DDoS。如果攻击更猛烈,可能会导致内核网络协议栈的某些资源被耗光,导致内核直接丢弃一些网络包(我们在对服务器压测的过程中也出现这种情况,压力很大,但是应用看到的请求数却很少,有大量的possible SYN flooding attack, sending cookies日志,每秒150w条,我们猜测可能是内核直接丢了许多请求,但是还没有仔细去查究竟是什么资源满了,应该可以通过调一些参数来增大容量)。


2013/11/6 Bojie Li <boj...@gmail.com>
blog 服务器连不进去了,症状是能 ping 通,TCP 连接能建立,但后续的包只能以很小的概率收到,因此 ssh 很难连进去,http 也无法访问。好不容易连进去一次,sudo init 6,新的命令提示符也出来了,不过到现在也没有重启。

两小时前,重启换了新内核 3.2.0-4-amd64,Debian wheezy 标配。系统是前几天 dist-upgrade 过的。问题是突然出现的,当时我和 zsj 都在 ssh,终端突然就卡住了。

谁能猜测这是什么原因?一种可能是 nf_conntrack table full,不过 sysctl 设成了 655360 entry,应该够用了吧。

--
-- 来自USTC LUG
请使用gmail订阅,不要灌水。
更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en
 
---
You received this message because you are subscribed to the Google Groups "USTC_LUG" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ustc_lug+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
Cheng,
Best Regards

Bojie Li

unread,
Nov 6, 2013, 9:34:47 AM11/6/13
to USTC_LUG
2013/11/6 Zhang Cheng <steph...@gmail.com>
如果能ping通、部分tcp端口能连上,但是收不到任何数据,这可能是kernel panic了。(有些时候kernel panic会出现这种现象。)

Kernel Panic 了为什么还能连上?内核网络协议栈还能工作?

现在的情况变成了能 ping 通;TCP 22 发 SYN 能收到 SYN+ACK,但后续有时是没有回复,有时是过一两秒回复 FIN+ACK Connection Closed,发 FIN+ACK 能收到 ACK;TCP 80 Connection Reset。这是不是 kernel panic 的症状?

Bojie Li

unread,
Nov 6, 2013, 9:50:20 AM11/6/13
to USTC_LUG
真奇怪,ping 202.141.160.99 和 2001:da8:d800:95::110(eth0)都很正常(延迟 0~1ms),但 ping 202.141.176.99(eth1)就偶尔能收到回复,而且延迟都是 2~10ms 不等。这不是开玩笑吗?


2013/11/6 Bojie Li <boj...@gmail.com>

Guo, Jiahua

unread,
Nov 6, 2013, 9:56:04 AM11/6/13
to ustc...@googlegroups.com
2013/11/6 Bojie Li <boj...@gmail.com>
2013/11/6 Zhang Cheng <steph...@gmail.com>
如果能ping通、部分tcp端口能连上,但是收不到任何数据,这可能是kernel panic了。(有些时候kernel panic会出现这种现象。)

Kernel Panic 了为什么还能连上?内核网络协议栈还能工作?
具体情况我不清楚,不过 panic 函数调用之后,中断还会保留。
 

现在的情况变成了能 ping 通;TCP 22 发 SYN 能收到 SYN+ACK,但后续有时是没有回复,有时是过一两秒回复 FIN+ACK Connection Closed,发 FIN+ACK 能收到 ACK;TCP 80 Connection Reset。这是不是 kernel panic 的症状?

--

Bojie Li

unread,
Nov 6, 2013, 10:56:20 AM11/6/13
to USTC_LUG
21:16   终端卡住应该就是这时候。syslog 里出现 task sshd:29487 blocked for more than 120 seconds。blog 从 ganglia 监控里消失(之前各项指标都正常)。named 不能正常工作,查不到域名,系统邮件也发不出去。
21:18   又出现一次 blocked for more than 120 seconds
21:25   /usr/sbin/mysqld: Normal shutdown(谁干的?)
21:27   mysqld: InnoDB: Unable to lock ./ibdata1, error: 11
mysqld: InnoDB: Check that you do not already have another mysqld process
mysqld: InnoDB: using the same InnoDB data or log files.
这些信息几乎每秒重复一次。
21:28, 21:30   task blocked for more than 120 seconds
21:35   kernel: dig[23174]: segfault (dig 怎么会 segfault?)
21:36   auth.log 显示我 ssh 进去了,执行了 sudo init 6。5秒后(这么久)syslog 出现 init: Switching to runlevel: 6。但确实没有重启。
22:52   jameszhang 重启虚拟机,从 21:27 开始重复出现的 mysqld 错误信息终于消失了
23:04   出现从0开始的 kernel 信息,重启正常。

根据 task blocked for more than 120 seconds 的初始错误信息,看起来像 fork 炸弹,不过没有看到 oom。
另外 mysqld 这么多错误信息是怎么回事?为什么 init 6 不管用?


2013/11/6 Guo, Jiahua <gjh...@gmail.com>

Zhang Cheng

unread,
Nov 6, 2013, 11:03:27 AM11/6/13
to USTC LUG
如果是blocked for more than 120 seconds这种信息,那么应该就不是fork炸弹了。这种情况应该是由于某个内核bug导致了某种资源被死锁了,大量的进程都因为锁而无法被调度。我也碰到过几次这样的情况,一般似乎是在做IO操作的时候,但还没有找到特定的规律。似乎也不于特定的软件相关。而且内核版本跨度还挺远的,从ubuntu 11.04到debian unstable的内核,我都碰到过这种情况,不能肯定的说是内核的bug,但一定是有某种内核级别的代码出了问题。


2013/11/6 Bojie Li <boj...@gmail.com>



--
Cheng,
Best Regards

Bojie Li

unread,
Nov 6, 2013, 11:08:13 AM11/6/13
to USTC_LUG
会不会是换内核导致的?出这个问题离换上新内核(Debian wheezy 标配的 3.2)才一个半小时。

刚收到 21:13 的两封相隔十几秒的 monit 邮件,说 loadavg(1min) = 36.6, loadavg(5min) = 10.1。Ganglia 里没有记下任何异常数据点(10秒 probe 一次),而是从 21:13 直接消失了。也就是事发突然,连报警邮件都来不及发就死锁了?


2013/11/7 Zhang Cheng <steph...@gmail.com>

Zhang Cheng

unread,
Nov 6, 2013, 11:09:59 AM11/6/13
to USTC LUG
这种问题肯定难以简单复现的,否则肯定早被修复了。我遇到这些问题都是很难得的,机器多了,所以才会碰到过几次,但总的来说概率很低。


2013/11/7 Bojie Li <boj...@gmail.com>



--
Cheng,
Best Regards

Bojie Li

unread,
Nov 6, 2013, 11:45:09 PM11/6/13
to USTC_LUG
更正:昨晚 23:04 不是 jameszhang 重启的,而是 21:36 发出的 init 6 命令的效果。

jameszhang:我看到该虚拟机在昨天9:00pm-11:00pm之间cpu利用率是100%,同时占用的网络带宽也比较多,此后已经恢复正常。

内核 bug 还能导致发出大量数据包?


2013/11/7 Zhang Cheng <steph...@gmail.com>

Bojie Li

unread,
Nov 7, 2013, 2:53:28 AM11/7/13
to USTC_LUG

接收网络包是中断驱动的,那么一个包经过那么复杂的网络协议栈,包括 TCP 自动回复 ACK,都在中断处理程序里?

Reply all
Reply to author
Forward
0 new messages