精华内容
下载资源
问答
  • netstat用来查看接口统计报告,还有top监控系统当前运行进程,如果要查看进程的带宽使用情况,可以使用nethogs 1.安装 yum -y install nethogs 2. nethogs用法 nethogs 3.nethogs命令行参数 -d参数...

    用命令iftop来检查带宽使用情况. netstat用来查看接口统计报告,还有top监控系统当前运行进程, 如果要查看进程的带宽使用情况,可以使用nethogs

    1. 安装

    yum  -y install  nethogs


    2. nethogs 用法

    nethogs

     

    3. nethogs 命令行参数

    -d 参数增加刷新频率参数   

    nethogs -d  5

    ·device name· 用来检测给定的设备带宽

    nethogs  eth0

     

    转载于:https://www.cnblogs.com/fengjian2016/p/10436790.html

    展开全文
  • 介绍一下 bmon,这是一个监视和调试工具,可捕获网络统计信息并使它们易于理解。-- Sandra Henry-stockerbmon是一种监视和调试工具,可在终端窗口中捕获网络统计信息,并提供了如何以易于理解的形式显示以及显示多少...
    ceded52dc0d5fb034b060c2a9d7236a4.png介绍一下 bmon,这是一个监视和调试工具,可捕获网络统计信息并使它们易于理解。-- Sandra Henry-stocker

    bmon 是一种监视和调试工具,可在终端窗口中捕获网络统计信息,并提供了如何以易于理解的形式显示以及显示多少数据的选项。

    要检查系统上是否安装了 bmon,请使用 which 命令:

    $ which bmon/usr/bin/bmon

    获取 bmon

    在 Debian 系统上,使用 sudo apt-get install bmon 安装该工具。

    对于 Red Hat 和相关发行版,你可以使用 yum install bmon 或 sudo dnf install bmon 进行安装。或者,你可能必须使用更复杂的安装方式,例如使用以下命令,这些命令首先使用 root 帐户或 sudo 来设置所需的 libconfuse

    # wget https://github.com/martinh/libconfuse/releases/download/v3.2.2/confuse-3.2.2.zip# unzip confuse-3.2.2.zip && cd confuse-3.2.2# sudo PATH=/usr/local/opt/gettext/bin:$PATH ./configure# make# make install# git clone https://github.com/tgraf/bmon.git &&ammp; cd bmon# ./autogen.sh# ./configure# make# sudo make install

    前面五行会安装 libconfuse,而后面五行会获取并安装 bmon 本身。

    使用 bmon

    启动 bmon 的最简单方法是在命令行中键入 bmon。根据你正在使用的窗口的大小,你能够查看并显示各种数据。

    显示区域的顶部将显示你的网络接口的统计信息:环回接口(lo)和可通过网络访问的接口(例如 eth0)。如果你的终端窗口只有区区几行高,下面这就是你可能会看到的所有内容,它将看起来像这样:

    lo bmon 4.0Interfaces x RX bps pps %x TX bps pps % >lo x 4B0 x0 0 0 4B 0 qdisc none (noqueue) x 0 0 x 0 0 enp0s25 x 244B0 x1 0 0 470B 2 qdisc none (fq_codel) x 0 0 x 0 0 462B 2q Increase screen height to see graphical statistics qqq Press d to enable detailed statistics qqq Press i to enable additional information qq Wed Oct 23 14:36:27 2019 Press ? for help

    在此示例中,网络接口是 enp0s25。请注意列出的接口下方的有用的 “Increase screen height” 提示。拉伸屏幕以增加足够的行(无需重新启动 bmon),你将看到一些图形:

    Interfaces x RX bps pps %x TX bps pps % >lo x 0 0 x 0 0 qdisc none (noqueue) x 0 0 x 0 0 enp0s25 x 253B 3 x 2.65KiB 6 qdisc none (fq_codel) x 0 0 x 2.62KiB 6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq (RX Bytes/second) 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 1 5 10 15 20 25 30 35 40 45 50 55 60 (TX Bytes/second) 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 0.00 ............................................................ 1 5 10 15 20 25 30 35 40 45 50 55 60

    但是请注意,该图形未显示值。这是因为它正在显示环回 “>lo” 接口。按下箭头键指向公共网络接口,你将看到一些流量。

    Interfaces x RX bps pps %x TX bps pps % lo x 0 0 x 0 0 qdisc none (noqueue) x 0 0 x 0 0 >enp0s25 x 151B 2 x 1.61KiB 3 qdisc none (fq_codel) x 0 0 x 1.60KiB 3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq B (RX Bytes/second) 635.00 ...............................|............................ 529.17 .....|.........................|....|....................... 423.33 .....|................|..|..|..|..|.|....................... 317.50 .|..||.|..||.|..|..|..|..|..|..||.||||...................... 211.67 .|..||.|..||.|..||||.||.|||.||||||||||...................... 105.83 ||||||||||||||||||||||||||||||||||||||...................... 1 5 10 15 20 25 30 35 40 45 50 55 60 KiB (TX Bytes/second) 4.59 .....................................|...................... 3.83 .....................................|...................... 3.06 ....................................||...................... 2.30 ....................................||...................... 1.53 |||..............|..|||.|...|.|||.||||...................... 0.77 ||||||||||||||||||||||||||||||||||||||...................... 1 5 10 15 20 25 30 35 40 45 50 55 60q Press d to enable detailed statistics qqq Press i to enable additional information qq Wed Oct 23 16:42:06 2019 Press ? for help

    通过更改接口,你可以查看显示了网络流量的图表。但是请注意,默认值是按每秒字节数显示的。要按每秒位数来显示,你可以使用 bmon -b 启动该工具。

    如果你的窗口足够大并按下 d 键,则可以显示有关网络流量的详细统计信息。你看到的统计信息示例如下所示。由于其宽度太宽,该显示分为左右两部分。

    左侧:

    RX TX RX TX Bytes 11.26MiB 11.26MiB Packets 25.91K 25.91K Collisions - 0 Compressed 0 0 Errors 0 0 FIFO Error 0 0 ICMPv6 2 2 ICMPv6 Checksu 0 - Ip6 Broadcast 0 0 Ip6 Broadcast 0 0 Ip6 Delivers 8 - Ip6 ECT(0) Pac 0 - Ip6 Header Err 0 - Ip6 Multicast 0 152B Ip6 Non-ECT Pa 8 - Ip6 Reasm/Frag 0 0 Ip6 Reassembly 0 - Ip6 Too Big Er 0 - Ip6Discards 0 0 Ip6Octets 530B 530B Missed Error 0 - Multicast - 0 Window Error - 0

    右侧:

    RX TX RX TX Abort Error - 0 Carrier Error - 0 CRC Error 0 - Dropped 0 0 Frame Error 0 - Heartbeat Erro - ICMPv6 Errors 0 0 Ip6 Address Er 0 - Ip6 CE Packets 0 - Ip6 Checksum E 0 - Ip6 ECT(1) Pac 0 - Ip6 Forwarded - 0 Ip6 Multicast 0 2 Ip6 No Route 0 0 Ip6 Reasm/Frag 0 0 Ip6 Reasm/Frag 0 0 Ip6 Truncated 0 - Ip6 Unknown Pr 0 - Ip6Pkts 8 8 Length Error 0 No Handler 0 - Over Error 0 -

    如果按下 i 键,将显示网络接口上的其他信息。

    左侧:

    MTU 1500 | Flags broadcast,multicast,up |Address 00:1d:09:77:9d:08 | Broadcast ff:ff:ff:ff:ff:ff |Family unspec | Alias |

    右侧:

    | Operstate up | IfIndex 2 || Mode default | TXQlen 1000 || Qdisc fq_codel |

    如果你按下 ? 键,将会出现一个帮助菜单,其中简要介绍了如何在屏幕上移动光标、选择要显示的数据以及控制图形如何显示。

    要退出 bmon,输入 q,然后输入 y 以响应提示来确认退出。

    需要注意的一些重要事项是:

    ◈ bmon 会将其显示调整为终端窗口的大小◈ 显示区域底部显示的某些选项仅在窗口足够大可以容纳数据时才起作用◈ 除非你使用 -R(例如 bmon -R 5)来减慢显示速度,否则每秒更新一次显示

    via: https://www.networkworld.com/article/3447936/viewing-network-bandwidth-usage-with-bmon.html

    作者:Sandra Henry-Stocker 选题:lujun9972 译者:wxy 校对:wxy

    本文由 LCTT 原创编译,Linux中国 荣誉推出

    77784364df1dfc6f0dccc131be7297d3.png?:还在看吗?
    展开全文
  • 一、CPU使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而..."从/proc文件系统获取cpu使用情况: cat /proc/stat在Linux的内核中,有一个全 局变量:Jiffies。 Jiffies代表时间。它的单位随硬...

    一、CPU

    使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。"

    从/proc文件系统获取cpu使用情况:    cat /proc/stat

    在Linux的内核中,有一个全 局变量:Jiffies。 Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是 1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。 CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。

    在Linux系统中,CPU利用率的计算来源在/proc/stat文件,这个文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下的不同的Jiffies,常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。

    包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

    [root@localhost LoadBalanceAlg]# cat /proc/stat

    cpu  71095 55513 76751 2545622893 303185 4160 47722 0

    cpu0 3855 1134 4284 159122519 3882 0 717 0

    cpu1 4236 770 5837 159113370 11291 6 865 0

    cpu2 4934 1142 5048 158991321 130622 362 2939 0

    cpu3 2320 14774 5177 159111528 1417 8 1138 0

    cpu4 2694 405 3086 159071174 56284 235 2477 0

    cpu5 1701 886 2560 159129034 1316 2 849 0

    cpu6 2937 450 2863 159068480 59183 228 2198 0

    cpu7 916 316 2426 159130057 1682 1 933 0

    cpu8 2543 50 3509 159122844 4467 1 2911 0

    cpu9 4761 827 6296 159118849 4490 8 1086 0

    cpu10 8517 4236 9148 159102063 9791 173 2382 0

    cpu11 22001 29737 14602 159065992 2583 6 1382 0

    cpu12 3453 150 3075 159113794 5387 1162 9276 0

    cpu13 2120 424 3403 159126526 2608 7 1199 0

    cpu14 2637 65 2663 159107796 6704 1914 14503 0

    cpu15 1462 142 2763 159127539 1470 39 2859 0

    intr 1636622296 1591605869 4 0 4 4 0 0 0 1 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1005479 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32763528 0 0 0 0 0 0 0 1697776 0 0 0 0 0 0 0 1556158 2 0 0 0 0 0 0 1598011 0 0 0 0 0 0 0 1287622 0 0 0 0 0 0 0 1522517 0 0 0 0 0 0 0 2467360 0 0 0 0 0 0 0 1116999 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    ctxt 431778894

    btime 1363058934

    processes 279394

    procs_running 1

    procs_blocked 0

    输出解释:

    CPU 以及CPU0、CPU1、CPU2、CPU3每行的每个参数意思(以第一行为例)为:

    参数 解释

    user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒

    nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)

    system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)

    idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)

    iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,

    irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)

    softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

    CPU时间=user+system+nice+idle+iowait+irq+softirq

    “intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。

    “ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。

    “btime”给出了从系统启动到现在为止的时间,单位为秒。

    “processes (total_forks) 自系统启动以来所创建的任务的个数目。

    “procs_running”:当前运行队列的任务的数目。

    “procs_blocked”:当前被阻塞的任务的数目。

    那么CPU利用率的计算方法:可以使用取两个采样点,计算其差值的办法。

    CPU利用率 = 1- (idle2-idle1)/(cpu2-cpu1)

    java中调用Linux的shell命令使用Process和Runtime

    jdk1.6 API doc:

    public class Runtimeextends Object

    每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime 方法获取当前运行时。

    应用程序不能创建自己的 Runtime 类实例。

    public abstract class Processextends Object

    ProcessBuilder.start() 和Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。

    代码:

    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.io.StringWriter;importorg.apache.log4j.Logger;/*** 采集CPU使用率*/

    public class CpuUsage extendsResourceUsage {private static Logger log = Logger.getLogger(CpuUsage.class);private static CpuUsage INSTANCE = newCpuUsage();privateCpuUsage(){

    }public staticCpuUsage getInstance(){returnINSTANCE;

    }/*** Purpose:采集CPU使用率

    *@paramargs

    *@returnfloat,CPU使用率,小于1*/@Overridepublic floatget() {

    log.info("开始收集cpu使用率");float cpuUsage = 0;

    Process pro1,pro2;

    Runtime r=Runtime.getRuntime();try{

    String command= "cat /proc/stat";//第一次采集CPU时间

    long startTime =System.currentTimeMillis();

    pro1=r.exec(command);

    BufferedReader in1= new BufferedReader(newInputStreamReader(pro1.getInputStream()));

    String line= null;long idleCpuTime1 = 0, totalCpuTime1 = 0; //分别为系统启动后空闲的CPU时间和总的CPU时间

    while((line=in1.readLine()) != null){if(line.startsWith("cpu")){

    line=line.trim();

    log.info(line);

    String[] temp= line.split("\\s+");

    idleCpuTime1= Long.parseLong(temp[4]);for(String s : temp){if(!s.equals("cpu")){

    totalCpuTime1+=Long.parseLong(s);

    }

    }

    log.info("IdleCpuTime: " + idleCpuTime1 + ", " + "TotalCpuTime" +totalCpuTime1);break;

    }

    }

    in1.close();

    pro1.destroy();try{

    Thread.sleep(100);

    }catch(InterruptedException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("CpuUsage休眠时发生InterruptedException. " +e.getMessage());

    log.error(sw.toString());

    }//第二次采集CPU时间

    long endTime =System.currentTimeMillis();

    pro2=r.exec(command);

    BufferedReader in2= new BufferedReader(newInputStreamReader(pro2.getInputStream()));long idleCpuTime2 = 0, totalCpuTime2 = 0; //分别为系统启动后空闲的CPU时间和总的CPU时间

    while((line=in2.readLine()) != null){if(line.startsWith("cpu")){

    line=line.trim();

    log.info(line);

    String[] temp= line.split("\\s+");

    idleCpuTime2= Long.parseLong(temp[4]);for(String s : temp){if(!s.equals("cpu")){

    totalCpuTime2+=Long.parseLong(s);

    }

    }

    log.info("IdleCpuTime: " + idleCpuTime2 + ", " + "TotalCpuTime" +totalCpuTime2);break;

    }

    }if(idleCpuTime1 != 0 && totalCpuTime1 !=0 && idleCpuTime2 != 0 && totalCpuTime2 !=0){

    cpuUsage= 1 - (float)(idleCpuTime2 - idleCpuTime1)/(float)(totalCpuTime2 -totalCpuTime1);

    log.info("本节点CPU使用率为: " +cpuUsage);

    }

    in2.close();

    pro2.destroy();

    }catch(IOException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("CpuUsage发生InstantiationException. " +e.getMessage());

    log.error(sw.toString());

    }returncpuUsage;

    }/***@paramargs

    *@throwsInterruptedException*/

    public static void main(String[] args) throwsInterruptedException {while(true){

    System.out.println(CpuUsage.getInstance().get());

    Thread.sleep(5000);

    }

    }

    }

    二、内存

    从/proc文件系统获取内存使用情况:   cat /proc/meminfo

    MemTotal:      8167348 kB

    MemFree:       4109964 kB

    Buffers:         35728 kB

    Cached:        1877960 kB

    SwapCached:     159088 kB

    Active:        3184176 kB

    Inactive:       672132 kB

    HighTotal:           0 kB

    HighFree:            0 kB

    LowTotal:      8167348 kB

    LowFree:       4109964 kB

    SwapTotal:    26738680 kB

    SwapFree:     26373632 kB

    Dirty:              40 kB

    Writeback:           0 kB

    AnonPages:     1872416 kB

    Mapped:          24928 kB

    Slab:           107804 kB

    PageTables:      34612 kB

    NFS_Unstable:        0 kB

    Bounce:              0 kB

    CommitLimit:  30822352 kB

    Committed_AS:  5386080 kB

    VmallocTotal: 34359738367 kB

    VmallocUsed:    276892 kB

    VmallocChunk: 34359460287 kB

    HugePages_Total:     0

    HugePages_Free:      0

    HugePages_Rsvd:      0

    Hugepagesize:     2048 kB

    内存使用率 = 1 - MemFree/MemTotal

    代码:

    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.io.StringWriter;importorg.apache.log4j.Logger;/*** 采集内存使用率*/

    public class MemUsage extendsResourceUsage{private static Logger log = Logger.getLogger(MemUsage.class);private static MemUsage INSTANCE = newMemUsage();privateMemUsage(){

    }public staticMemUsage getInstance(){returnINSTANCE;

    }/*** Purpose:采集内存使用率

    *@paramargs

    *@returnfloat,内存使用率,小于1*/@Overridepublic floatget() {

    log.info("开始收集memory使用率");float memUsage = 0.0f;

    Process pro= null;

    Runtime r=Runtime.getRuntime();try{

    String command= "cat /proc/meminfo";

    pro=r.exec(command);

    BufferedReader in= new BufferedReader(newInputStreamReader(pro.getInputStream()));

    String line= null;int count = 0;long totalMem = 0, freeMem = 0;while((line=in.readLine()) != null){

    log.info(line);

    String[] memInfo= line.split("\\s+");if(memInfo[0].startsWith("MemTotal")){

    totalMem= Long.parseLong(memInfo[1]);

    }if(memInfo[0].startsWith("MemFree")){

    freeMem= Long.parseLong(memInfo[1]);

    }

    memUsage= 1- (float)freeMem/(float)totalMem;

    log.info("本节点内存使用率为: " +memUsage);if(++count == 2){break;

    }

    }

    in.close();

    pro.destroy();

    }catch(IOException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("MemUsage发生InstantiationException. " +e.getMessage());

    log.error(sw.toString());

    }returnmemUsage;

    }/***@paramargs

    *@throwsInterruptedException*/

    public static void main(String[] args) throwsInterruptedException {while(true){

    System.out.println(MemUsage.getInstance().get());

    Thread.sleep(5000);

    }

    }

    }

    三、磁盘IO

    使用iostat:

    [root@localhost LoadBalanceAlg]# iostat -d -x

    Linux 2.6.18-238.el5 (localhost.localdomain)    2013Äê03ÔÂ30ÈÕ

    Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

    sda               0.09     0.28  0.02  0.03     0.92     2.57    60.71     0.00   63.28   3.33   0.02

    sda1              0.00     0.00  0.00  0.00     0.00     0.00    24.40     0.00    2.59   2.53   0.00

    sda2              0.09     0.28  0.02  0.03     0.92     2.57    60.76     0.00   63.36   3.34   0.02

    sdb               0.03     0.72  0.04  0.53     2.57    10.04    22.09     0.01   17.36   5.12   0.29

    sdb1              0.03     0.72  0.04  0.53     2.57    10.04    22.09     0.01   17.36   5.12   0.29

    dm-0              0.00     0.00  0.07  1.30     2.63    10.40     9.53     0.03   24.95   2.15   0.29

    dm-1              0.00     0.00  0.11  0.28     0.86     2.21     8.00     0.12  300.47   0.16   0.01

    man iostat:

    -d     The -d option is exclusive of the -c option and displays only the device utilization report.

    -x     Display extended statistics.  This option is exclusive of the -p and -n, and works with post 2.5 kernels since it needs /proc/diskstats file or a mounted sysfs to get the statistics. This option may also work with older kernels (e.g. 2.4) only if extended statistics are available in /proc/partitions (the kernel needs to be  patched for that).

    %util Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value  is close to 100%.

    一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait。

    代码:

    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.io.StringWriter;importorg.apache.log4j.Logger;/*** 采集磁盘IO使用率*/

    public class IoUsage extendsResourceUsage{private static Logger log = Logger.getLogger(IoUsage.class);private static IoUsage INSTANCE = newIoUsage();privateIoUsage(){

    }public staticIoUsage getInstance(){returnINSTANCE;

    }/*** @Purpose:采集磁盘IO使用率

    *@paramargs

    *@returnfloat,磁盘IO使用率,小于1*/@Overridepublic floatget() {

    log.info("开始收集磁盘IO使用率");float ioUsage = 0.0f;

    Process pro= null;

    Runtime r=Runtime.getRuntime();try{

    String command= "iostat -d -x";

    pro=r.exec(command);

    BufferedReader in= new BufferedReader(newInputStreamReader(pro.getInputStream()));

    String line= null;int count = 0;while((line=in.readLine()) != null){if(++count >= 4){//log.info(line);

    String[] temp = line.split("\\s+");if(temp.length > 1){float util = Float.parseFloat(temp[temp.length-1]);

    ioUsage= (ioUsage>util)?ioUsage:util;

    }

    }

    }if(ioUsage > 0){

    log.info("本节点磁盘IO使用率为: " +ioUsage);

    ioUsage/= 100;

    }

    in.close();

    pro.destroy();

    }catch(IOException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("IoUsage发生InstantiationException. " +e.getMessage());

    log.error(sw.toString());

    }returnioUsage;

    }/***@paramargs

    *@throwsInterruptedException*/

    public static void main(String[] args) throwsInterruptedException {while(true){

    System.out.println(IoUsage.getInstance().get());

    Thread.sleep(5000);

    }

    }

    }

    四、网络带宽

    从/proc文件系统获取网络使用情况:   cat /proc/net/dev

    [root@localhost LoadBalanceAlg]# cat /proc/net/dev

    Inter-|   Receive                                                |  Transmit

    face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

    lo:1402131426 15109136    0    0    0     0          0         0 1402131426 15109136    0    0    0     0       0          0

    eth0:4546168400 42535979    0    0    0     0          0        44 5610190492 8943999    0    0    0     0       0          0

    eth1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    eth3:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    __tmp945063435:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    bond0:4546168400 42535979    0    0    0     0          0        44 5610190492 8943999    0    0    0     0       0          0

    统计一段时间内Receive和Tramsmit的bytes数的变化,即可获得网口传输速率,再除以网口的带宽就得到带宽的使用率

    代码:

    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.io.StringWriter;importorg.apache.log4j.Logger;/*** 采集网络带宽使用率*/

    public class NetUsage extendsResourceUsage {private static Logger log = Logger.getLogger(NetUsage.class);private static NetUsage INSTANCE = newNetUsage();private final static float TotalBandwidth = 1000; //网口带宽,Mbps

    privateNetUsage(){

    }public staticNetUsage getInstance(){returnINSTANCE;

    }/*** @Purpose:采集网络带宽使用率

    *@paramargs

    *@returnfloat,网络带宽使用率,小于1*/@Overridepublic floatget() {

    log.info("开始收集网络带宽使用率");float netUsage = 0.0f;

    Process pro1,pro2;

    Runtime r=Runtime.getRuntime();try{

    String command= "cat /proc/net/dev";//第一次采集流量数据

    long startTime =System.currentTimeMillis();

    pro1=r.exec(command);

    BufferedReader in1= new BufferedReader(newInputStreamReader(pro1.getInputStream()));

    String line= null;long inSize1 = 0, outSize1 = 0;while((line=in1.readLine()) != null){

    line=line.trim();if(line.startsWith("eth0")){

    log.info(line);

    String[] temp= line.split("\\s+");

    inSize1= Long.parseLong(temp[0].substring(5)); //Receive bytes,单位为Byte

    outSize1 = Long.parseLong(temp[8]); //Transmit bytes,单位为Byte

    break;

    }

    }

    in1.close();

    pro1.destroy();try{

    Thread.sleep(1000);

    }catch(InterruptedException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("NetUsage休眠时发生InterruptedException. " +e.getMessage());

    log.error(sw.toString());

    }//第二次采集流量数据

    long endTime =System.currentTimeMillis();

    pro2=r.exec(command);

    BufferedReader in2= new BufferedReader(newInputStreamReader(pro2.getInputStream()));long inSize2 = 0 ,outSize2 = 0;while((line=in2.readLine()) != null){

    line=line.trim();if(line.startsWith("eth0")){

    log.info(line);

    String[] temp= line.split("\\s+");

    inSize2= Long.parseLong(temp[0].substring(5));

    outSize2= Long.parseLong(temp[8]);break;

    }

    }if(inSize1 != 0 && outSize1 !=0 && inSize2 != 0 && outSize2 !=0){float interval = (float)(endTime - startTime)/1000;//网口传输速度,单位为bps

    float curRate = (float)(inSize2 - inSize1 + outSize2 - outSize1)*8/(1000000*interval);

    netUsage= curRate/TotalBandwidth;

    log.info("本节点网口速度为: " + curRate + "Mbps");

    log.info("本节点网络带宽使用率为: " +netUsage);

    }

    in2.close();

    pro2.destroy();

    }catch(IOException e) {

    StringWriter sw= newStringWriter();

    e.printStackTrace(newPrintWriter(sw));

    log.error("NetUsage发生InstantiationException. " +e.getMessage());

    log.error(sw.toString());

    }returnnetUsage;

    }/***@paramargs

    *@throwsInterruptedException*/

    public static void main(String[] args) throwsInterruptedException {while(true){

    System.out.println(NetUsage.getInstance().get());

    Thread.sleep(5000);

    }

    }

    }

    展开全文
  • 网上有很多适用于Linux操作系统的开源网络监视工具....但是如果你想要找一个能够按进程实时统计网络带宽利用率,那么NetHogs就是你所需要的唯一工具. 1 NetHogs – 网络带宽监控 什么是NetHogs? NetHogs...

    网上有很多适用于Linux操作系统的开源网络监视工具.比如说,你可以用命令iftop来检查带宽使用情况. netstat用来查看接口统计报告,还有top监控系统当前运行进程.但是如果你想要找一个能够按进程实时统计网络带宽利用率,那么NetHogs就是你所需要的唯一工具.

    1

    1

    NetHogs – 网络带宽监控

    什么是NetHogs?

    NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率.

    来自NetHogs项目网站:

    NetHogs是一个小型的’net top’工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs NetHogs不需要依赖载入某个特殊的内核模块. 如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况.这样就很容易找出哪个程序跑飞了然后突然占用你的带宽.

    这篇文章为你讲解了如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。

    在RHEL,CentOS和Fedora下安装NetHogs:

    要安装NetHogs,你必须要启用你所用Linux下的EPEL源.然后运行下面的yum命令下载安装NetHogs包.

    
    
    1. [root@tecmint~]# yum -y install nethogs
    2.  
    3. Loaded plugins:fastest mirror,refresh-packagekit
    4. Loading mirror speeds from cached hostfile
    5. *base: mirrors.hns.net.in
    6. *epel: mirror.nus.edu.sg
    7. *extras: mirrors.hns.net.in
    8. *rpmfusion-free-updates: mirrors.ustc.edu.cn
    9. *rpmfusion-nonfree-updates: mirror.de.leaseweb.net
    10. *updates: mirrors.hns.net.in
    11. Setting up Install Process
    12. Resolving Dependencies
    13. --> Running transaction check
    14. ---> Package nethogs.i6860:0.8.0-1.el6 will be installed
    15. --> Finished Dependency Resolution
    16.  
    17. Dependencies Resolved
    18.  
    19. ===========================================================================================================
    20. Package                Arch                Version                    Repository                    Size
    21. ===========================================================================================================
    22. Installing:
    23. nethogs                i686                0.8.0-1.el6                epel                        28k
    24.  
    25. Transaction Summary
    26. ===========================================================================================================
    27. Install       1 Package(s)
    28.  
    29. Total download size:28k
    30. Installed size:50k
    31. Downloading Packages:
    32. nethogs-0.8.0-1.el6.i686.rpm                                                        |  28kB     00:00
    33. Running rpm_check_debug
    34. Running Transaction Test
    35. Transaction Test Succeeded
    36. Running Transaction
    37.   Installing :nethogs-0.8.0-1.el6.i686                                                          1/1
    38.   Verifying  :nethogs-0.8.0-1.el6.i686                                                          1/1
    39.  
    40. Installed:
    41.   nethogs.i6860:0.8.0-1.el6
    42.  
    43. Complete!

    在Ubuntu, Linux mint和Debian下安装NetHogs:

    键入apt-get命令安装NetHogs包

    
    
    1. $ sudo apt-get install nethogs

    样例输出

    
    
    1. tecmint@tecmint:~$ sudo apt-get install nethogs
    2. [sudo]password fortecmint:
    3. Reading package lists...Done
    4. Building dependency tree
    5. Reading state information...Done
    6. The following NEW packages will be installed:
    7. nethogs
    8. 0 upgraded,1 newly installed,0 to remove and 318 not upgraded.
    9. Need to get 27.1kB of archives.
    10. After this operation,100kB of additional disk space will be used.
    11. Get: 1 http://in.archive.ubuntu.com/ubuntu/ quantal/universe nethogs i386 0.8.0-1 [27.1 kB]
    12. Fetched 27.1kB in 1s (19.8kB/s)
    13. Selecting previously unselected package nethogs.
    14. (Reading database... 216058 files and directories currently installed.)
    15. Unpacking nethogs(from .../nethogs_0.8.0-1_i386.deb)...
    16. Processing triggers forman-db...
    17. Setting up nethogs(0.8.0-1)...

    NetHogs用法

    在基于RedHat系统下键入如下命令启动NetHogs工具.

    要执行NetHogs你必须拥有root权限,即如图所示用sudo命令

    
    
    1. $ sudo nethogs

    样例预览:

    2

    2

    CentOS 6.3 下的NetHogs预览

    3

    3

    Ubuntu 12.10 下的NetHogs预览

    正如上图所示, send列和received列显示的是按照每个进程的流量统计.总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令:

    NetHogs 命令行参数

    以下就是NetHogs命令行的参数,用’-d’来添加刷新频率参数,`device name` 用来检测给定的某个或者某些设备的带宽(默认是eth0).例如:设置5秒钟的刷新频率,键入如下命令即可:

    如果只用来监视设备(eth0)的网络带宽可以使用如下命令:

    
    
    1. $ sudo nethogs eth0

    如果要同时监视eth0和eth1接口,使用以下命令即可:

    
    
    1. # nethogs eth0 eth1

     或

    其他参数和用法

    NetHogs 交互控制

    以下是NetHogs的一些很有用的交互控制(键盘快捷键)

    原文发布时间为:2014-04-06

    本文来自云栖社区合作伙伴“Linux中国”


    展开全文
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs不需要...
  • 网上有很多适用于Linux操作系统...但是如果你想要找一个能够按进程实时统计网络带宽利用率,那么NetHogs就是你所需要的唯一工具。NetHogs – 网络带宽监控什么是NetHogs?NetHogs 是一个开源的命令行工具(类似于Linux...
  • 常见工作中,计算机系统的资源主要包括CPU,内存,磁盘I/O以及网络,过度使用这些资源将使系统陷入困境。当上述服务器系统资源中的任何一个遭遇瓶颈,都会带来服务器性能的下降,典型的症状就是系统运行迟缓。1.CPU...
  • 二、sarsar收集并报告操作系统中的大量系统活动, 包括I/O操作、CPU利用情况、 上下文切换和中断速率、 页换入和页换出的速率, 以及共享内存、缓冲区和网络的使用情况。基于数量和时间间隔参数的取值,sar在以秒为...
  • 你是否遇到过服务器的网络利用率很高,但是定位不到导致高网络利用率的进程情况?泰特·加尔布雷思(Tate Galbraith)介绍了一些工具可以帮助你快速准确地诊断和定位问题,许多工具都可以在没有 GUI 的情况下使用,...
  • SYSTAT能实时查看各种信息SYSTAT -pigs默认值CPUSYSTAT -iostat硬盘IOSYSTAT -swap交换分区SYSTAT -mbufs网络缓冲区SYSTAT -vmstat虚拟内存SYSTAT -netstat网络SYSTAT -icmp ICMP协议SYSTAT -ip IP协议SYSTAT - tcp ...
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs不需要...
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。 来自NetHogs项目网站:...
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs不需要...
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs不需要...
  • nethogs 查看每个进程使用的带宽

    千次阅读 2016-04-12 18:15:25
    网上有很多适用于Linux操作系统的开源...但是如果你想要找一个能够按进程实时统计网络带宽利用率,那么NetHogs就是你所需要的唯一工具. 1 NetHogs – 网络带宽监控 什么是NetHogs? NetHogs 是一个
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs不需要...
  • 推荐:更多linux性能监测与优化关注:linux命令大全 ...但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 NetHogs是一个开源的命令行工具(类似于Linux的top命令...
  • 网络管理是基础运维中一个很重要的工作,要保证业务系统稳定运行,网络运维者必须要了解网络的流量状态、使用情形、带宽利用率、是否存在瓶颈等。同时,当网络发生故障时,必须能够及时发现、定位、解决问题。本节将...
  • 但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。 来自NetHogs项目网站
  • Linux常用Shell命

    2018-01-16 16:01:03
    切割文件命令:split -l 300 large_file.txt new_file_prefix查看CPU、内存使用率、网络带宽、磁盘读写速率top #实时查询sudo nethogs #查看网络带宽利用率iostat -d -k 1 10 #查看磁盘速率查看CPU核数:# 总核数...
  • 我们平时所说的带宽,其实是数据传输,譬如内存带宽、总线带宽、网络带宽等等,都是以“字节/秒”为单位的。有时确切地知道网络中一台特定主机所使用的带宽或者一个网关所处理的通信量是非常有用的。作为一个快速...
  • 本节书摘来自华章计算机《高性能Linux服务器构建实战:系统安全、故障排查、自动化...网络性能评估主要是监测网络带宽的使用,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏...
  • 网络利用率(WLAN和以太网)。 无线链路带宽不断更新。 HDD / SSD利用率。 您还可以查看正在运行的进程的概述。 入门 我想对大多数物理设备的负载进行图形化可视化。 ubuntu中的系统监视器做得很好,但是没有显示...
  • Ntop甚至可以列出每个节点计算机的网络带宽利用率。 iftop iftop是类似于linux下面top的实时流量监控工具。 htop htop 是一个 Linux 下的交互式的进程浏览器,可以用来替换Linux下的top命令。 nmon 可以查看...
  • NetHogs监控Linux/Centos的每个进程流量

    千次阅读 2020-06-01 17:28:48
    但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 【背景】在日常运维环境中,我们肯定会遇到以下这种需求: 1、网络流量异常,不知道是哪个程序的流量爆涨? 2、日常需要...
  • ​CPU监控命令之mpstat命令1概述:dstat是可以替代vmstat,iostat,...例如,你能与IDE控制器的中断组合来对比磁盘利用率,或通过磁盘吞吐量来对比网络带宽数量2安装方法:Ubuntu/Mint和Debin系统: 本地软件库中有...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

linux查看网络带宽利用率

linux 订阅