Linux为什么卡住了?
来源:互联网 发布:智能停车app软件 编辑:程序博客网 时间:2024/04/27 23:09
10秒钟的时间并不算长,吃个薯片喝口咖啡就过去了。但是作为强迫症患者,我还是容不得它的存在,因此便决定写篇文章,向大家演示一下怎样用Wireshark一步步解决这个问题。
- 在Linux服务器上启动抓包。
- 从笔记本SSH到Linux服务器,输入用户名并回车。
- 等待10秒左右,直到登录界面提示输入密码。
- 停止抓包。
这样就可以得到一个涵盖该现象的网络包了。一般在实验室中没有干扰流量,不用过滤也可以分析,不过我们最好在做实验时就养成过滤的习惯,以适应生产环境中抓到的包。因为我们是通过SSH协议登录的,所以可以直接用“ssh”来过滤,如图所示。SSH包都是加密了的,因此我们看不出每个包代表了什么意思,不过这并不影响分析。从图2中可以看到,21号包和25号包之间恰好就相隔10秒。
这两个包之间所发生的事件,可能就是导致这个现象的原因。于是我再用“frame.number> 21 && frame.number< 25”过滤,结果如图所示。
从图中可以看到,Linux服务器当时正忙着向DNS服务器查询10.32.200.23的PTR记录(即反向解析),试图获得这个IP地址所对应的域名。该IP属于我们测试所用的笔记本,但由于DNS服务器上没有它的PTR记录,所以两次查询都等了5秒钟还没结果,总共浪费了10秒钟。
我们由此可以推出,这台Linux服务器在收到SSH访问请求时,会先查询该客户端IP所对应的PTR记录。假如经过5秒钟还没有收到回复,就再发一次查询。如果第二次查询还是等了5秒还没回复,就彻底放弃查询。我们甚至可以进一步猜测,如果DNS查询能成功,就不用白等那10秒钟了。
为了验证这个猜测,我在DNS服务器中添加了10.32.200.23的PTR记录,如图所示,然后再次登录。
这一次果然立即登录进去了。从图的Wireshark截屏可见,DNS查询是成功的,所以21号包和26号包之间几乎是没有时间停顿的。
明白了DNS查询就是问题的起因,接下来就知道怎么进一步研究了。只要在Google搜索“ssh dns”,第一页出来的链接都是关于这个问题的。随便挑几篇阅读一下,就连我这样的Linux初学者都能把这个问题研究透了。原来这个行为是定义在“/etc/ssh/sshd_config”文件中的,默认配置是这样的:
[root@Linux_Server ~]# cat /etc/ssh/sshd_config |grep -i usedns#UseDNS yes
改成下面这样就可以解决了,不用去动DNS服务器上的配置:
[root@Linux_Server~]# cat /etc/ssh/sshd_config |grep -i usednsUseDNS no本文转载自:http://www.linuxprobe.com/linux-connect-slowly.html免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/
- Linux为什么卡住了?
- 为什么httpclient老是卡住
- mfc 多线程卡住了
- ubuntu突然卡住了
- Ubuntu 卡住了怎么办
- wordcount程序卡住了
- Linux Tomcat 启动卡住
- Linux下安装flash卡住
- 红旗LINUX 为什么没有新版本更新了?
- uva 165 卡住了一下午!
- 小米3的卡槽,卡住了
- 是什么卡住了大数据的应用?
- myeclipse加载卡住了,怎么解决?
- 解决mysqladmin 点 结构 卡住不动了
- idea创建maven+webapp时,卡住了
- linux中Deploying web application directory 卡住
- 为什么越来越多的用户放弃了Linux?
- 为什么我的Linux ls命令不能用了?
- Codeforces--366A--Dima and Guards
- Java设计模式-建造者模式
- C#学习笔记之多态之抽象类
- Linux压缩那些事儿
- Android之AlarmManager
- Linux为什么卡住了?
- Android高级UI ProgressBar实现各种效果的圆形进度
- Android开发中遇到的问题之XML
- (飛飛四十八)简单的运算符重载
- nyoj 1237 最大岛屿 第八届河南省程序设计大赛
- java BIO NIO AIO 理论篇
- 地铁译:Spark for python developers ---Spark与数据的机器学习
- First
- 【相机选型】 相机选型指标参数