【当LINUX系统出现网络问题时该如何排查】

这篇具有很好参考价值的文章主要介绍了【当LINUX系统出现网络问题时该如何排查】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

具体问题具体分析,遵循相应的排查思路

因为网络问题产生的现象有无数种,但同一种现象的产生并不一定是由于网络问题引起的。比如页面卡顿,数据包无法处理这些现象,完全有可能是死锁或者进程异常终止产生的。
所以,结论不要下的太早,先问问自己,网络问题是什么,是不通,还是慢?现象是什么?一步步排除故障。

一.网络不通时需要进行的处理

1.检测链路是否连通

检查网卡与网络是否物理连通,网线是否插好且连接可用:

  1. 首先到机房里检查网线两端是否都亮灯,普通服务器的话应该是绿灯常亮为正常,交换机绿灯闪烁表示正在传输数据。
  2. 通过命令ethtool ethX来查看某一网卡的链路是否物理连通。
命令描述:
ethtool 是用于查询及设置网卡参数的命令。

使用概要:
ethtool ethx       //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等
ethtool –h        //显示ethtool的命令帮助(help)
ethtool –i ethX    //查询ethX网口的相关信息 
ethtool –d ethX    //查询ethX网口注册性信息
ethtool –r ethX    //重置ethX网口到自适应模式
ethtool –S ethX    //查询ethX网口收发包统计
ethtool –s ethX [speed 10|100|1000] [duplex half|full]  [autoneg on|off]        //设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商

ethtool -E eth0 magic 0x10798086 offset 0x10 value 0x1A  修改网卡EEPROM内容(0x1079 网卡device id , 0x8086网卡verdor id  )

ethtool -e eth0  : dump网卡EEPROM内容

【当LINUX系统出现网络问题时该如何排查】
如上所示:Speed: 这一项就指示了网卡的速度。Duplex显示了当前网络支持全双工;link detected表示当前网卡和网络的物理连接状态,yes就是正常。通常网速和全/半双工状态是主机和网络协议商自动协商的,例如这里的 auto-negotiation。

2. 网卡是否正常启用

1.一般网络物理连接故障的情况并不多见,当排除物理连接上的问题后,需要进一步查看网卡的工作状态,使用ifconfig命令检查网卡eth0状态。
  【当LINUX系统出现网络问题时该如何排查】
第3行的信息显示了对该网卡的配置,包括IP,子网掩码等,这里可以检查是否出现错配,如果这一行显示不正确,那一定是网卡没有正确配置开启。
基于Debian的Linux的(永久)网络配置文件在/etc/network/interfaces,
基于Red Hat的Linux的(永久)网络配置文件在/etc/sysconfig/network_scripts/ifcfg-<interface>

2.lspci可以看到所有连接到pci总线的设备,

lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。
PCI即Peripheral Component Interconnect,中文意思是“外围器件互联”,是由PCISIG (PCI Special Interest Group)推出的一种局部并行总线标准。
PCI总线是由ISA(Industy Standard Architecture)总线发展而来的,ISA并行总线有8位和16位两种模式,时钟频率为8MHz,工作频率为33MHz/66MHz。是一种同步的独立于处理器的32位或64位局部总线。
从结构上看,PCI是在CPU的供应商和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送。从1992年创立规范到如今,PCI总线已成为了计算机的一种标准总线。
已成为局部总线的新标准,广泛用于当前高档微机、工作站,以及便携式微机。
主要用于连接显示卡、网卡、声卡。PCI总线是32位同步复用总线。其地址和数据线引脚是AD31~AD0。PCI的工作频率为33MHz。

3.利用lsmod显示所有已加载的模块, 加载成功的模块也会在/proc/modules中显示。

	lsmod——显示已载入系统的模块
	lsmod 其实就是list modules的缩写,即 列出所有模块.
  功能说明:显示已载入系统的模块。
  语法:lsmod
	说明:执行lsmod指令,会列出所有已载入系统的模块。

总结: 一般情况下,成功加载网卡后,用ifconfig就可以看了。如果此时找不到网卡,那么应该查看物理网卡有没有连接到pci总线上,lspci检测不到的话很有可能就是网卡坏了。还有一种情况是没有加载网卡模块,先去lspci里找到对应厂商和型号:Ethernet Controller,再用modprobe尝试加载正确的模块,比如modprobe 3c509。如果出现错误,说明该模块不存在。这时候你应该找到正确的模块并且重新编译。(久修改网卡信息在/etc/sysconfig/network-scripts/ifcfg-ethX)

Linux modprobe命令用于自动处理可载入模块。

modprobe可载入指定的个别模块,或是载入一组相依的模块。
modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

3. 检测路由与网关的配置

如果网卡已经正常启动,需要确认目标网络接口是否正确配置网关,同时主机和网关之间的连接没有问题,通过route命令和ping命令结合完成这一阶段的排查。

使用route 命令查看内核路由表
【当LINUX系统出现网络问题时该如何排查】
第一行表示,访问internet的ip都通过eth0转发到网关。
第二行表示,当前网卡处于192.168.25.0网段,目的为该网段的Ip都交给eth0转发。

通过route命令查看内核路由,检验具体的网卡是否连接到目标网路的路由,之后就可以尝试ping 网关,排查与网关之间的连接。如果无法ping通网关,可能是网关限制了ICMP数据包,或者交换机设置的问题。一个很常见的问题:两块网卡分别提供内网和外网服务,如果默认网关是内网网卡,那么外网服务是访问不到的。这时需要删除再添加默认网关。用route delete/add default gw 命令。

4. DNS工作状况

通常很多网络问题是DNS故障或配置不当造成的,nslookup和dig命令能够用来排查DNS问题。
【当LINUX系统出现网络问题时该如何排查】
这里的DNS服务器 10.21.1.205 位于当前局域网内,nslookup的结果显示DNS工作正常。如果这里nslookup命令无法解析目标域名,则很有可能是DNS配置不当,到/etc/resolv.conf文件中查看是否存在域名服务器的配置,当然修改这里的配置只是临时保存,修改要去etc/sysconfig/network-scripts/ifcfg-ethX路径下(可以在/etc/networks/interfaces(基于Debian)中通过 “dns-nameservers” 字段来限制:)

5.检测是否可以正常路由到远程主机

互联网是通过大量路由器中继连接起来的,网络的访问就是在这些节点间一跳一跳最终到达目的地,想要查看网络连接,最直接最常用的命令是ping,ping得通,说明路由工作正常,但是如果ping不通,traceroute命令可以查看从当前主机到目标主机的全部“跳”的过程。traceroute和ping命令都是使用ICMP协议包。

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。
当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。
 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。
 一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,我们会在linux主机系统下,直接执行命令行:
traceroute hostname

而在Windows系统下是执行tracert的命令:
tracert hostname

【当LINUX系统出现网络问题时该如何排查】

记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间
。星号表示防火墙封掉了ICMP的返回信息。

6.检查的是远端主机的服务端口是否打开

可以用telnet和nmap来检查.
telnet IP PORT,可以查看指定远程主机是否开放目标端口,这里百度的前端服务器开放80端口是网页服务必须的。
(但是telnet 命令的功能非常有限,当防火墙存在时,就不能很好地显示结果,所以telnet无法连接包含两种可能:1是端口确实没有开放,2是防火墙过滤了连接。)
如:

1 telnet 220.181.111.188 22
2 Trying 220.181.111.188...
3 telnet: Unable to connect to remote host: Connection timed out

我们无法判断究竟是端口没有开放,还是被防火墙给拦截了,这时使用nmap工具将更加强大:

1 # nmap -p 22 220.181.111.188 
2 
3 Starting Nmap 6.40 ( http://nmap.org ) at 2015-08-10 20:45 CST
4 Nmap scan report for 220.181.111.188
5 Host is up (0.040s latency).
6 PORT   STATE    SERVICE
7 22/tcp filtered ssh

【当LINUX系统出现网络问题时该如何排查】
状态STATE是open表示开启,如果是filtered表示被防火墙过滤了,大家可以试下百度的22端口,肯定是filtered状态。
也可以查看自身的端口有没有打开,不多举例了。自身端口用的比较多的命令是netstat。
【当LINUX系统出现网络问题时该如何排查】

如果要在本地查看某个端口是否开放,可以使用如下命令:

# netstat -lnp | grep PORT
  其中,参数:

-l,显示正在监听的套接字
-p,显示套接字所属的进程ID和进程名
-n,以数字形式显示地址

其中第一列是套接字通信协议,第2列和第3列显示的是接收和发送队列,第4列是主机监听的本地地址,反映了该套接字监听的网络;第6列显示当前套接字的状态,最后一列显示打开端口的进程。

7.检查防火墙

如果网络还有问题的话就要检查iptables策略和SELinux了。定位问题前最好将SELinux关了,用iptables -L可查看iptables的规则。

 关闭SELinux的策略
[root@localhost ~]# getenforce     
    如果为disabled 就是已经关闭,如果enforce 就是强制的模式

(1)不重启的头闭 [root@localhost ~]# setenforce 0   #重启电脑后失效
(2)重启电脑的关闭 [root@localhost ~]# vi /etc/selinux/config
        把SELINUX=enforce   改成disabled就可以了,重启电脑,永久生效

二.网络较慢的排查

网络较慢的排查事实上比网络不通的排查更有挑战,因为很多时候可能是运营商、DNS等的原因,这些故障常常不在我们的控制范围之内,只能收集证据向其反馈或对其进行投诉。

如果不想受到DNS的影响,上面提到的命令可以添加 -n 选项,-n选项可以阻止试图将IP解析为主机名,从而绕过DNS。

  1. traceroute

前面提到的traceroute不仅可以查看路由的正确性,还可以查看网络中每一跳的延时,从而定位延时最高的网络区段。

  1. iftop

iftop命令类似于top命令,查看哪些网络连接占用的带宽较多

如:使用iftop命令查看连接占用的网络带宽
【当LINUX系统出现网络问题时该如何排查】文章来源地址https://www.toymoban.com/news/detail-443365.html

这里比较全地给出了一个iftop命令的实例,该命令按照带宽占用高低排序,可以确定那些占用带宽的网络连接,

  最上方的一行刻度是整个网络的带宽比例,下面第1列是源IP,第2列是目标IP,箭头表示了二者之间是否在传输数据,以及传输的方向。最后三列分别是2s、10s、40s时两个主机之间的数据传输速率。

  最下方的TX、RX分别代表发送、接收数据的统计,TOTAL则是数据传输总量。

使用 -n 选项直接显示连接的IP,上图中看到的则是解析成域名后的结果。
-i 选项可以指定要查看的网卡,默认情况下,iftop会显示自己找到的第一个网卡;
在进入iftop的非交互界面后,按 p 键可以打开或关闭显示端口,按 s 键可以显示或隐藏源主机,而按 d 键则可以显示或隐藏目标主机。
  1. tcpdump
      当一切排查手段都无济于事时仍然不能找到网络速度慢、丢包严重等原因时,往往祭出杀手锏——抓包。抓包的最佳手段是在通信的双方同时抓取,这样可以同时检验发出的数据包和收到的数据包,tcpdump是常用的抓包工具。
tcpdump有一些常用选项,便于记录,tcpdump的详细使用,这里就不介绍了,当然,图形界面用户还可以使用更为专业的分析工具WireShark。

复制代码
1 # tcpdump -n port N    //只捕捉特定端口的流量
2 # tcpdump -n port N1 or port N2    //捕获多个端口的流量
3 # tcpdump -w output.pcap    //数据包转储,将原始数据包保留到output.pcap
4 # tcpdump -C 10 -w output.pcap    //限制每个转储文件的上限,达到上限后将文件分卷(以MB为单位)
5 # tcpdump -C 10 -W 5 -w output.pcap    //不仅限制每个卷的上限,而且限制卷的总数
6 # tcpdump -r output.pcap    //重播已经保存的数据包记录
此外,

  鸟哥的Linux私房菜中也提供了一些类似的网络排查思路:

  1. 网卡是否工作,包括硬件和驱动:lspci,dmesg

  2. IP参数是否正确设置:ifconfig

  3. 局域网内通信是否正常:ping

  4. 路由信息是否正常:route -n

  5. DNS状态:dig, nslookup

  6. 路由节点状况与延时:traceroute

  7. 服务监听端口:netstat -lnp

  8. 防火墙:iptables, SELinux

到了这里,关于【当LINUX系统出现网络问题时该如何排查】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux下系统问题排查基本套路

    top 查找cpu占用高的进程 ps 找到对应进程的pid top -H -p pid 查找cpu利用率较高的线程 printf ‘%xn’ pid 将线程pid转换为16进制得到 nid jstack pid |grep ‘nid’ -C5 –color 在jstack中找到对应堆栈信息进行分析 cat jstack.log | grep “java.lang.Thread.State” | sort -nr | uniq -c 对jstack有一个综合的把握

    2024年02月11日
    浏览(25)
  • Linux系统中负载高问题排查思路与解决方法

    Load 是对计算机干活多少的度量,Load Average 是一段时间(1分钟、5分钟、15分钟)内平均Load。 一、Load分析: 情况1:CPU高、Load高 通过top命令查找占用CPU最高的进程PID; 通过top -Hp PID查找占用CPU最高的线程TID; 对于java程序,使用jstack打印线程堆栈信息(可联系业务进行排查定

    2024年02月16日
    浏览(23)
  • Linux系统CPU占用率较高问题排查思路

    作为工程师,在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行,带来企业损失。 对于CPU过载问题通常使用以下两种方式即可快速定位: 方法一 第一步:使用 top命令,然后按shift+p按照CPU排序 找到占

    2024年02月07日
    浏览(25)
  • Navicat连接linux虚拟机上的MySQL可能遇到的问题以及如何排查

    很大一部分原因是因为网上找不到比内容较全的文章作为一个小白解决所面临的问题 关于Navicat连接Linux上的MySQL为什么出现以下报错 这个报错很有可能是你的linux的防火墙不允许你连接到MySQL服务器导致的具体怎么排查,后面会详细说明。 这个报错有可能是以下原因 1、MySQ

    2024年02月02日
    浏览(41)
  • win10电脑出现网络问题时,如何解决?

    我们的Windows可能会出现各种网络连接问题: 尝试连接Wi-Fi网络时出现错误: Windows无法连接到此网络 ; 可以通过Wifi访问互联网,但通过电缆访问以太网却无法正常工作; 尝试通过电缆连接互联网时出现错误: Windows以太网没有有效的 IP 配置 ; 计算机已连接到Wi-Fi,但没有

    2024年02月16日
    浏览(31)
  • JVM笔记 —— 出现内存溢出错误时时如何排查

    内存溢出错误分为StackOverflowError和OutOfMemoryError,前者是栈中出现溢出,后者一般是堆或方法区出现溢出,简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的,无限递归导致超出栈内存(-Xss)限制时就会抛出StackOverflowError。这种情况直接根据异常

    2024年02月13日
    浏览(32)
  • 当项目出现oom异常,应该如何去排查定位

    当项目出现OOM(Out of Memory)异常时,表示Java应用程序耗尽了可用的内存资源。解决OOM问题通常需要进行仔细的排查和定位。以下是一些常用的排查步骤: 查看OOM错误信息: 首先,查看控制台或日志中的OOM错误信息。它通常会提供有关哪个部分的代码或哪个对象导致了内存溢

    2024年01月24日
    浏览(23)
  • Linux服务器出现异常和卡顿排查思路和步骤

    Linux 服务器出现异常和卡顿的原因有很多,以下是一些常见的原因: 1、CPU 占用率过高:当 CPU 占用率过高时,系统的响应速度会变慢,甚至出现卡顿现象。常见的原因包括进程的死循环、CPU 密集型的任务等。 2、内存使用过高:当内存使用过高时,系统会使用交换分区(s

    2024年02月04日
    浏览(30)
  • Android webview只加载10%且出现白屏问题排查解决

    有一个主页面,布局里是包含的一个Webview,页面跳转进入第二个页面也会加载一个新的WebView,但新的webView加载页面不成功,加载进度走到10%就不动了也没有报错信息。         首先出现的是主页面的webView一直加载不出来,但当时没有多想一直以为是网络的问题,杀死进程或

    2023年04月21日
    浏览(27)
  • 【Kubernetes】当K8s出现问题时,从哪些方面可以排查

    前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写 。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 📕作者简介

    2024年02月14日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包