最近公司某台服务器的网络占用经常达到99%,好像最高就是这么多。使得很多服务受到影响,下面就分享一下如何通过windows自带的一些工具排查网络高占用异常。

  首先最简单的是资源管理器,这个通过工具栏右键资源管理器,或者Ctrl+Alt+Del就可以调出来,然后点到联网这一个标签页。在最下面列出了机器的所有网卡,包括虚拟网卡,的线路速度和网络使用率。如下图,可以看到,这台服务器上有3个网络适配器,实际上这台服务器上插了两个网卡。

pic1

    可以看到“本地连接”和“本地连接2”都有流量占用,这里比较关心的是“本地连接”这个网卡上的应用占用流量情况。于是需要找出这两张网卡对应的本地IP地址。

    打开命令行控制台,输入IPConfig即可列出本机所有网卡及IP地址信息,如下:

pic2

    可以看到,“本地连接”这个网卡对应的IP地址是“192.168.1.8”这个地址。

    接下来,我们可以使用命令查看那些应用连接到了“192.168.1.8”上。通过命令行:netstat -a -o -n |findstr 192.168.1.8

pic3

    这里第二列是所有从外部连到192.168.1.8这台机器的目标机器。我们可以从中找出已经的连接和未知的异常连接。可能这个还不够清晰,没有列出来所有那些app占用了多少带宽,没关系,接下来使用资源管理器能够看得更清晰。

     在命令行中输入:perfmon –res 即可调出资源管理器,这是最方便的方式,这个命令也比较好记,perform monitor resource 拼在一起就是了。

    pic4

     在这个里面,我们可以看到网络活动的进程,按照中字节数排一下序,就可以看到那个占用的流量或者带宽最大。

    需要特别注意的是,这里的“字节/秒 Byte per second”和任务管理器里面的“线路速度Mbps”有区别。线路速度里面的bps表示“bits per second 位每秒”,1个字节Byte=8位bits比特,所以100Mbps 100兆比特每秒,换成我们平常能够感知到的就是100/8=12.5MBps,就是12.5M字节每秒,即12.5*10^6字节每秒。这也是为什么我们比如装个宽带百兆宽带,最大下载速度可能只有12.5M字节每秒的原因,因为单位不一样。

    假如我们在这里看到的是526482字节每秒,那么换成兆比特每秒,计算方法就是: (字节每秒/10^6)*8,先换成兆字节每秒,然后再换成兆比特每秒,即526482/10^6*8= 4.21 Mbps,嫌麻烦,也可以直接在网上转换

   可以看到,仅java.exe这一项就占用了19.4*10^6字节每秒的带宽,其次是DateFeedGateway,占用了5*10^6字节每秒带宽(将近二分之一的本地连接带宽量),接下来是两个接近0.1*10^7字节每秒带宽,这个可以忽略不计,所以大头是两个,一个是java.exe一个是DateFeedGateway,所以下面重点是找出这两个进程分别是对应的那几个应用。

   在上图中,勾选“java.exe” 和“DataFeedGateway.exe”前面的复选框,我们仅仅查看着两种应用的网络使用情况。可以看到第二项和第三项仅列出了这两种应用的网络使用情况(截图时网络占用已经降下来了,这里仅为了演示)。

    pic5

    从中间第二个图中可以看到,具体的连接到这台机器上的每台计算机的IP地址,总的收发字节数。根据这里的地址,基本上就能确定出来,是哪台机器上的java.exe或者DataFeedGateWay在占用网络带宽了。

  针对这台计算机的实际情况,可以知道,java对应的是这个服务器上装了一台ActiveMQ,这个java.exe就是ActiveMQ使用到的java进程。DataFeedGateWay是服务器上安装的从ActiveMQ读取数据的程序。Win-JAJ5TQN0C1J,是这台服务器的计算机名称。可以看到这两个应用程序占了这台机器的大部分带宽。具体的是哪个网卡,可以根据各自程序的配置监听的IP地址就可以确定出来。

     以上,就是在一个不需要安装其他额外软件的情况下,仅通过Windows自带的应用查找网络带宽占用情况的一例,希望对大家遇到类似问题提供一定帮助。