引言

操作系统中/etc/resolv.conf配置文件中的内容一般为空,如果该文件配置不正确,将导致ssh、route、netstat命令响应慢的问题。

在/etc/resolv.conf添加错误地内容,导致涉及域名解析相关的命令响应慢,是维护工作中较常遇到的问题。

相关案例

现象:使用其他机器ssh连接一机器,响应很慢,需要10多秒时间才有输入密码的提示响应。

问题解决:

被连接机器的/etc/resolv.conf文件中包含了以下内容:

XXXXX:~ # cat /etc/resolv.conf
nameserver 202.102.152.3
search XXX

由于配置了/etc/resolv.conf文件,该机器成为DNS Client,而DNS Server为202.102.152.3这个ip对应的机器。

执行ssh时,该主机会根据以上配置进行域名解析,由于202.102.152.3这台机器ip不可达,主机将尝试多次域名解析,直到达到超时次数。

route/netstat命令输出慢

执行route和netstat命令时,也会进行域名解析,像以上那样错误地配置/etc/resolv.conf文件,也会导致route、netstat命令输出缓慢。

而执行route –n和netstat –n时则不会有缓慢的问题,因为加了-n选项,命令执行时将输出XXX.XXX.XXX.XXX点分十进制的ip地址,不进行域名解析。

strace跟踪分析

《自助Linux之问题诊断工具strace》一文中,介绍了strace的用法,像这类命令执行相应慢或执行出错的问题,使用strace进行问题分析再适合不过了。

下面我们将大脑清空,“忘记”上文内容,来学习如何使用strace来分析ssh登陆慢的问题。

首先,我们在使用ssh的机器上使用strace跟一下ssh命令:

linux198 /root# strace -o ssh.strace -fT ssh 10.71.171.140

可以看到输出文件ssh.strace中,ssh命令在底层的一个select调用阻塞了15s:

……
 write(, ) =  <0.000010>
 , [], NULL, NULL, NULL)  =  (]) <15.098772>
……

尽管select系统调用本身是非阻塞的,ssh仍等待select的返回再往下执行。除此之外没有获得其他有用信息。

这时我们再在被ssh登陆慢的、有问题的机器,跟一下sshd进程,先查找sshd进程的pid:

slot10-sles10sp2:~ # ps aux | grep sshd | grep -v grep
root         ?        Ss   :   : /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
root           ?        Ss   :   : sshd: root@pts/     

再使用-p选项对运行中的进程使用strace跟踪:

slot10-sles10sp2:~ # strace -o sshd.strace -fT -p
Process  attached - interrupt to quit

以上命令执行时会挂住,等待ssh连接的到来。这时我们在另一台机器上使用ssh 10.71.171.140命令连接该机器。

使用ssh成功登陆之后,ctrl+c将strace命令停止,我们可以看到sshd.strace文件中有以下输出:

 open("/etc/resolv.conf", O_RDONLY) = 4 <0.000026>
 fstat(, {st_mode=S_IFREG|, st_size=, ...}) =  <0.000023>
 mmap(NULL, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -, ) = 0x2b0eb8dbf000 <0.000024>
 read(4, "nameserver 202.102.152.3\nsearch "..., 4096) = 40 <0.000028>
 read(, )                 =  <0.000023>
 close()                          =  <0.000024>
 munmap()      =  <0.000026>
 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 <0.000027>
 connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("202.102.152.3")}, 28) = 0 <0.000025>
 fcntl(, F_GETFL)                 = 0x2 (flags O_RDWR) <0.000024>
 fcntl(, F_SETFL, O_RDWR|O_NONBLOCK) =  <0.000023>
 poll([{fd=, events=POLLOUT, revents=POLLOUT}], , ) =  <0.000024>
 sendto(, , , NULL, ) =  <0.000117>
 , events=POLLIN}], , ) =  <5.000046>
 poll([{fd=, events=POLLOUT, revents=POLLOUT}], , ) =  <0.000024>
 sendto(, , , NULL, ) =  <0.000035>
 , events=POLLIN}], , ) =  <4.999760>
 close()                          =  <0.000028>

从以上输出可以看到,当有连接到来的时候,sshd进程会打开并读取/etc/resolv.conf文件的内容,对其中的DNS nameserver建立socket,然后调用poll函数,每个poll调用5s后超时返回。

进一步地,我们了解/etc/resolv.conf文件的作用,查看/etc/resolv.conf文件的配置,从而解决问题。

小结

本文讨论了/etc/resolv.conf文件配置错误,导致ssh登陆慢(包括从其他机器跳转慢、使用putty等软件登陆慢)、reoute/netstat命令执行慢的问题。

通过问题的复现,使用strace进行问题分析,我们也小试了一下牛刀,熟悉了strace的使用方法。

resolv.conf文件配置相关的案例的更多相关文章

  1. Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题【转】

    CentOS 6.7/Linux下设置IP地址 1:临时修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改网关地址 # route add defa ...

  2. CentOS7.6 鲜为人知的/etc/resolv.conf 之 /etc/resolv.conf.save (保持/etc/resolv.conf不被修改:/etc/dhcp/dhclient-enter-hooks 无效之/etc/resolv.conf被清空的特殊案例)

    目的: 用户可以自定义/etc/resolv.conf内容,且不被系统修改. 常规方法1: /etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件中增加PEE ...

  3. Apache 中httpd.conf文件配置详解(转载)

    httpd.conf文件配置详解   Apache的基本设置主要交由httpd.conf来设定管理,我们要修改Apache的相关设定,主要还是通过修改httpd.cong来实现.下面让我们来看看htt ...

  4. CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置

    国内服务器在运行命令yum -y install wget的时候,出现: Could not retrieve mirrorlist http://mirrorlist.centos.org/?rel ...

  5. /etc/resolv.conf文件自动恢复的解决方法

    /etc/resolv.conf文件自动恢复的解决方法: service NetworkManager stop #后台进程关闭 chkconfig NetworkManager off #配置关闭, ...

  6. 漫画:Linux中/etc/resolv.conf文件和puppet工具解析

    今天办公室里来了一个程序员妹子飞鸟,小鱼是给她分配的导师,初次见面~ 午饭时间 Linux目录结构 resolv.conf文件 nameserver 唯一的必选关键字.表明DNS 服务器的IP 地址, ...

  7. Ubuntu 中/etc/resolv.conf 文件修改丢失的解决方案

    方法一 1.需要创建一个文件/etc/resolvconf/resolv.conf.d/tail sudo vi /etc/resolvconf/resolv.conf.d/tail 2.在该文件中写 ...

  8. Ubuntu 下 /etc/resolv.conf文件总是自动清除问题的解决方案

    最近学习Linux,在虚拟机中安装的是Ubuntu操作系统,用了几天发现Ubuntu无法上网,打开命令终端,输入命令: ping www.baidu.com -c2 结果显示名称无法识别,而直接与宿主 ...

  9. /etc/resolv.conf文件中的search项作用

    resolv.conf文件中有search项时,主机名解析规则顺序: DNS配置文件如下: # vi /etc/resolv.conf # Generated by NetworkManager se ...

随机推荐

  1. java 及 Jquery中的深复制 浅复制

    发现问题:最近 遇到由于复制对象之后,改变复制后的新变量,原先被复制的对象居然会跟着变. EX:java中: //holidayConfig.getEnd_time()会随着sTime的改变而改变 s ...

  2. os.path.dirname(__file__)

    os.path.dirname(__file__) 返回脚本的路径 描述: 必须实际存在的.py文件,如果直接在命令行执行,则会引发异常NameError: name 'file' is not de ...

  3. C语言学习书籍推荐《明解C语言》下载

    柴田望洋 (作者), 管杰 (译者), 罗勇 (译者) <明解C语言>是日本的C语言经典教材,自出版以来不断重印.修订,被誉为“C语言圣经”.作者在日本IT界家喻户晓,出版过一系列极富影响 ...

  4. 【AI】Android Pie中引入的AI功能

    前言 “无AI,不未来”,绝对不是一句豪情壮语,AI早已进入到了我们生活当中.去年Google发布的Android Pie系统在AI功能方面就做了重大革新,本文就对Google在新系统中引入的AI功能 ...

  5. Asp.net之实现自定义跨域

    跨域是指在浏览器的同源策略下导致前端和接口部署在不同域下导致无法直接访问的问题. 针对跨域有多种解决方案常见的有: JSNOP: 可参考Jquery实现,缺点是需要后端支持:   Access-Con ...

  6. MDX查询SSAS结果--通过adomd.net展示到客户端

    SSAS多维模型建好之后,除了在excel客户端直接链接ssas源拖拽pivot分析使用外,还可以讲要展示的结果集通过MDX语句查询出来,嵌入到程序中,通过运行程序跑出完整的报表.如图所示:

  7. python介绍、安装及相关语法、python运维、编译与解释

    1.python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多.范罗苏姆创造,第一版发布于1991年.可以视 ...

  8. 浅谈ActiveMQ与使用

    一.什么是消息中间件 消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送 二.什么是ActiveMQ ActiveMQ是一种开源的基于JMS(Java Message Servie)规 ...

  9. TensorFlow高效读取数据的方法——TFRecord的学习

    关于TensorFlow读取数据,官网给出了三种方法: 供给数据(Feeding):在TensorFlow程序运行的每一步,让python代码来供给数据. 从文件读取数据:在TensorFlow图的起 ...

  10. 个人永久性免费-Excel催化剂功能第55波-Excel批注相关的批量删除作者、提取所有批注信息等

    Excel里的批注,许多人很喜欢用,但批注真的值得我们大量使用吗?批注的使用场景在哪里?这些问题可能更值得花时间来思考下.同样因为不规范地使用批注,也带出了一大堆的后续擦屁股的事情来,从批注中找回有价 ...