目录

MAC地址

系统版本和内核版本

内存方面

free

作用

格式

主要参数

应用实例

vmstat

作用

格式

应用实例

CPU方面

查看CPU数量

 lscpu

top

语法

内容解释: 

网络方面

查看网络流量

ifstat命令

语法格式

常用参数:

ifstat 命令结果分析:

sar命令

命令参数

应用示例

磁盘方面

iostat

命令

应用示例

Java应用方面


MAC地址

1、 ip addr show (ip address show 、ip addr ) 查看本机ip和额外的一些信息

2、ifconfig -a  其中 ether就是mac地址

3、cat /sys/class/net/eth0/address 查看eth0的mac地址

4、cat /proc/net/arp 查看连接到本机的远端ip的mac地址

系统版本和内核版本

Linux查看系统版本和内核版本

内存方面

free

作用

free命令用来显示内存的使用情况,使用权限是所有用户。

格式

free [-b -k -m] [-o] [-s delay] [-t] [-V]

主要参数

-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。

[root@localhost ~]# free --help

Usage:
 free [options]

Options:
 -b, --bytes         show output in bytes
     --kilo          show output in kilobytes
     --mega          show output in megabytes
     --giga          show output in gigabytes
     --tera          show output in terabytes
     --peta          show output in petabytes
 -k, --kibi          show output in kibibytes
 -m, --mebi          show output in mebibytes
 -g, --gibi          show output in gibibytes
     --tebi          show output in tebibytes
     --pebi          show output in pebibytes
 -h, --human         show human-readable output
     --si            use powers of 1000 not 1024
 -l, --lohi          show detailed low and high memory statistics
 -t, --total         show total for RAM + swap
 -s N, --seconds N   repeat printing every N seconds
 -c N, --count N     repeat printing N times, then exit
 -w, --wide          wide output

     --help     display this help and exit
 -V, --version  output version information and exit

For more details see free(1).

应用实例

free命令是用来查看内存使用情况的主要命令。
和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。

#free -b -s5

通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。

[root@iZbp10fstdmbee21wif5ngZ 2018-02-26]# free -m
total used free shared buff/cache available
Mem: 15886 9032 406 0 6447 6497
Swap: 0 0 0

-m参数表示按照兆字节展示。
最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。

vmstat

作用

vmstat命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

格式

vmstat 3(间隔时间) 100(监控次数)

[root@localhost ~]# vmstat --help

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see vmstat(8).
  • -a:显示活跃和非活跃内存
  • -f:显示从系统启动至今的fork数量 。
  • -m:显示slabinfo
  • -n:只在开始时显示一次各字段名称。
  • -s:显示内存相关统计信息及多种系统活动数量。
  • delay:刷新时间间隔。如果不指定,只显示一条结果。
  • count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
  • -d:显示磁盘相关统计信息。
  • -p:显示指定磁盘分区统计信息
  • -S:使用指定单位显示。参数有 k 、K 、m 、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
  • -V:显示vmstat版本信息。

应用实例

[root@localhost ~]# vmstat 3 100
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  14164 253356   3352 3047432    0    0     1    14    2    5  1  1 96  0  2
 0  0  14164 253324   3352 3047472    0    0     0     5  596  812  0  1 93  0  6
 0  0  14164 253196   3352 3047480    0    0     0    48  607  791  0  1 93  0  6
 0  0  14164 253152   3352 3047484    0    0     0     0  677  817  1  1 92  0  6
 2  0  14164 251608   3352 3047496    0    0     0   110 1205 1664  1  2 86  2  9
 2  0  14164 251844   3352 3047520    0    0     0    46  665  900  0  1 93  0  5
 0  0  14164 251716   3352 3047520    0    0     0     4  742 1011  1  1 93  0  6
 0  0  14164 251872   3352 3047520    0    0     0    17  588  813  0  1 94  0  5
 0  0  14164 251712   3352 3047520    0    0     0     3  628  803  0  1 92  0  7
 3  0  14164 219144   3352 3047520    0    0     0    51 1576 2283  6  6 77  0 11
 0  0  14164 252980   3352 3047520    0    0     0     9  803 1195  1  2 85  0 12
 0  0  14164 252980   3352 3047520    0    0     0   925  823 1083  1  1 91  0  6
 0  0  14164 253196   3352 3047520    0    0     0    39  668  887  1  1 92  1  6
 0  0  14164 252988   3352 3047524    0    0     0     0  649  870  0  1 93  0  6
 2  0  14164 238568   3352 3047524    0    0     0   119  944 1409  1  1 93  0  4

procs(进程)

  • r:当前运行队列中线程的数目,代表线程处于可运行状态,但CPU还未能执行,这个值可以作为判断CPU是否繁忙的一个指标;当这个值超过了CPU数目,就会出现CPU瓶颈了;这个我们可以结合top命令的负载值同步评估系统性能;
  • b:阻塞的IO的进程数量;如果该值一直都很大,说明IO比较繁忙,处理较慢;

memory(内存)

  • swpd:虚拟内存已使用的大小;如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能;
  • free:空闲的物理内存的大小;
  • buff:用作缓冲的内存大小;
  • cache:用作缓存的内存大小;如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小;

swap(交换空间,单位:KB);内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有时我们看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的;

  • si: 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
  • so:每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

io(单位:块/秒)

  • bi:每秒读取的块数;
  • bo:每秒写入的块数;随机磁盘读写的时候,这2个值越大,能看到CPU在IO等待的值也会越大;

system(系统);这2个值越大,会看到由内核消耗的CPU时间会越大;

  • in:每秒中断数,包括时钟中断;
  • cs:每秒上下文切换数;

cpu(以百分比表示)

  • us:用户CPU时间(user time);
  • sy:系统CPU时间(system time);
  • id:空闲 CPU时间
  • wa:等待IO时间;wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈。

经验:

  • procs:r 如果长期大于CPU的个数,说明CPU遇到瓶颈。

  • procs:b 值越高,系统压力越大。

  • swap:si 如果这个值大于0,表示物理内存不够用或者内存泄露了。

  • cpu:us 值越高,说明用户进程消耗CPU时间越多,如果长期大于50%,需要考虑优化程序。

  • cpu:sy 如果太高,表示系统调用时间长,例如是IO操作频繁。

  • 如果 us + sy 大于80%,说明可能存在CPU不足。

CPU方面

查看CPU数量

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l


查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

 lscpu

lscpu命令从sysfs、/proc/cpuinfo、或者某些适用于特定架构的库中收集数据。命令的输出会以人类易读的方式展示如下信息:cpu、线程、核心、插槽和Non-Uniform MemoryAccess (NUMA)节点的数量,也有cpu共享缓存,cpu的族号,运行模式,处理指令的速度,大小端,步进等信息

Architecture:          x86_64 //架构--这里的64指的位处理器
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian //小端法
CPU(s):                4    //cpu数量
On-line CPU(s) list:   0-3  //在线的cpu数量 有些时候为了省电或者过热的时候,某些CPU会停止运行
Thread(s) per core:    1    //每个核心的线程数
Core(s) per socket:    4    //每个插槽上有几个核心
座:                 1      
NUMA 节点:         1       //NUMA 这个太复杂,所以他的解释在下面
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              94
型号名称:        Intel(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz
步进:              3 //这个可以简单理解为版本号  也有A0这样的标识方式
CPU MHz:             900.023
CPU max MHz:           3700.0000
CPU min MHz:           800.0000
BogoMIPS:            6624.00 // MIPS是每秒百万条指令,Bogo是Bogus(伪)的意思,这里是估算MIPS值
虚拟化:           VT-x //虚拟化技术,这个我不太懂,不敢乱说
L1d 缓存:          32K //一级高速缓存 dcache 用来存储数据
L1i 缓存:          32K //一级高速缓存 icache 用来存储指令  
L2 缓存:           256K
L3 缓存:           8192K //缓存速度上 L1 > L2 > L3 > DDR(内存) 内存的理论速度在几十g一秒
NUMA 节点0 CPU:    0-3 //四个cpu在一个numa节点上
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm arat pln pts hwp hwp_notify hwp_act_window hwp_epp

 参数选型

选项:
 -a, --all               同时打印在线和离线 CPU (-e 选项默认值)  此选项只能与选项-e 或-p 一起指定
 -b, --online            只打印在线 CPU (-p 选项默认值) 此选项只能与选项-e 或-p 一起指定
 -c, --offline           只打印离线 CPU   此选项只能与选项-e 或-p 一起指定。
 -e, --extended[=<列表>] 打印扩展的可读格式  (类似表格的形式)
                如果省略该列表参数, 则在命令输出中包括所有可用数据的列
                指定列表参数时, 选项字符串、等号 (=) 和列表不能包含任何空格或其他空白。 
                结果如下:
                CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ    MINMHZ
                0   0    0      0    0:0:0:0       是     3700.0000 800.0000
                1   0    0      1    1:1:1:0       是     3700.0000 800.0000
                2   0    0      2    2:2:2:0       是     3700.0000 800.0000
                3   0    0      3    3:3:3:0       是     3700.0000 800.0000
                带list示例: lscpu -e=cpu,node
 -p, --parse[=<列表>]    打印可解析格式
                如果省略该列表参数, 则命令输出与早期版本的 lscpu 兼容。 
                在此兼容格式中, 两个逗号用于分隔 CPU 缓存列。 
                如果未标识任何 CPU 缓存, 则忽略缓存列。
                如果使用列表参数, 则缓存列将用冒号 (:) 分隔
                示例: lscpu -p=cpu,node,,L1d:L1i
                我在使用上面命令的时候,不带缓存列正常显示,带缓存列不能输出数据也没报错,迷茫
 -s, --sysroot <目录>    以指定目录作为系统根目录
                收集 lscpu 命令所发出的实例以外的 Linux 实例的 CPU 数据。
                指定的目录是要检查的 Linux 实例的系统根。
 -x, --hex               打印十六进制掩码而非 CPU 列表
 -y, --physical          print physical instead of logical IDs 
                显示所有列的物理 id。 除了由 lscpu 分配的逻辑 id 之外
                物理 id 是由内核提供的特定于平台的值。无法检索元素的物理 ID 用破折号 (-) 字符显示
                此选项不影响 CPU 逻辑编号。

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出


可用的列:
           CPU  逻辑 CPU 数量
          CORE  逻辑核心数量
        SOCKET  逻辑(CPU)座数量
          NODE  逻辑 NUMA 节点数量
          BOOK  逻辑 book 数
        DRAWER  logical drawer number   //逻辑抽屉数(不太明白,好像和book有关系)
         CACHE  shows how caches are shared between CPUs    //cpu之间如何共享缓存
  POLARIZATION  CPU dispatching mode on virtual hardware    //虚拟硬件上的CPU调度模式
       ADDRESS  physical address of a CPU //cpu物理地址
    CONFIGURED  shows if the hypervisor has allocated the CPU //管理程序是否分配了cpu
        ONLINE  shows if Linux currently makes use of the CPU //在使用的cpu
        MAXMHZ  shows the maximum MHz of the CPU    //最大频率
        MINMHZ  shows the minimum MHz of the CPU    //最小频率

top

在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。

语法

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
[root@localhost ~]# top -help
  procps-ng 3.3.15
Usage:
  top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]

参数说明

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
  • S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

Ctrl+L 擦除并且重写屏幕。 
h或者? 显示帮助画面,给出一些简短的命令总结说明。 
k       终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 
i 忽略闲置和僵死进程。这是一个开关式命令。 
q 退出程序。 
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 
S 切换到累计模式。 
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 
f或者F 从当前显示中添加或者删除项目。 
o或者O 改变显示项目的顺序。 
l 切换显示平均负载和启动时间信息。 
m 切换显示内存信息。 
t 切换显示进程和CPU状态信息。 
c 切换显示命令名称和完整命令行。 
M 根据驻留内存大小进行排序。 
P 根据CPU使用百分比大小进行排序。 
T 根据时间/累计时间进行排序。 
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

常用操作:

top   //每隔5秒显式所有进程的资源占用情况
top -d 2  //每隔2秒显式所有进程的资源占用情况
top -c  //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

top 命令重要指标:load average,表示任务队列的平均长度(1分钟、5分钟、15分钟前到现在平均值)。

经验:

这3个值的大小一般不能大于系统CPU的核数,如果长期大于CPU的核数,说明CPU很繁忙,负载很高。

例如机器有2个CPU,那么健康值为:load average < 2

[root@localhost ~]# top
top - 16:16:43 up 5 days,  5:58,  1 user,  load average: 0.06, 0.09, 0.09
Tasks: 246 total,   1 running, 245 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.6 us,  0.5 sy,  0.0 ni, 94.4 id,  0.1 wa,  0.3 hi,  0.2 si,  3.9 st
MiB Mem :   5752.2 total,    241.2 free,   2535.1 used,   2975.9 buff/cache
MiB Swap:   4060.0 total,   4046.2 free,     13.8 used.   2897.7 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                 
 246894 root      20   0 4251860 630956  16260 S   2.0  10.7  53:05.80 java                                                                    
 245985 systemd+  20   0 2643788 347664  21532 S   0.7   5.9   7:38.97 mysqld                                                                  
     11 root      20   0       0      0      0 I   0.3   0.0   7:59.16 rcu_sched                                                               
     24 root      20   0       0      0      0 S   0.3   0.0   0:01.32 ksoftirqd/2                                                             
 245816 root      20   0  865448 147152  54408 S   0.3   2.5   7:20.40 minio                                                                   
 246571 systemd+  20   0 3263308 119796   7652 S   0.3   2.0  21:30.51 beam.smp                                                                
 695063 root      20   0   68704   5148   4256 R   0.3   0.1   0:00.04 top                                                                     
      1 root      20   0  188344  16296   9152 S   0.0   0.3   0:17.51 systemd                                                                 
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.42 kthreadd                                                                
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                  
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                              
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri                                             
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                            
     10 root      20   0       0      0      0 S   0.0   0.0   0:07.02 ksoftirqd/0                                                             
     12 root      rt   0       0      0      0 S   0.0   0.0   0:00.13 migration/0                                                             
     13 root      rt   0       0      0      0 S   0.0   0.0   0:00.21 watchdog/0                                                              
     14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                                                 
     15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1                                                                 
     16 root      rt   0       0      0      0 S   0.0   0.0   0:00.58 watchdog/1                                                              
     17 root      rt   0       0      0      0 S   0.0   0.0   0:00.08 migration/1                                                             
     18 root      20   0       0      0      0 S   0.0   0.0   0:01.33 ksoftirqd/1                                                             
     20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-events_highpri                                             
     21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/2                                                                 
     22 root      rt   0       0      0      0 S   0.0   0.0   0:00.57 watchdog/2                                                              
     23 root      rt   0       0      0      0 S   0.0   0.0   0:00.08 migration/2 

内容解释: 

 PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏

第一部分 -- 最上部的 系统信息栏 :


  第一行(top):
    “16:16:43”为系统当前时刻;
    “5:58”为系统启动后到现在的运作时间;
    “1 user”为当前登录到系统的用户,更确切的说是登录到用户的终端数 --同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;

            “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;


  第二行(Tasks):
    “246 total”为当前系统进程总数;
    “1 running”为当前运行中的进程数;
    “245 sleeping”为当前处于等待状态中的进程数;
    “0 stoped”为被停止的系统进程数;
    “0 zombie”为被复原的进程数;
  第三行(Cpus):
    分别表示了 CPU 当前的使用率;

    0.6% us — 用户空间占用CPU的百分比。
    0.5% sy — 内核空间占用CPU的百分比。
    0.0% ni — 改变过优先级的进程占用CPU的百分比
    94.4% id — 空闲CPU百分比
    0.1% wa — IO等待占用CPU的百分比
    0.3% hi — 硬中断(Hardware IRQ)占用CPU的百分比
    0.2% si — 软中断(Software Interrupts)占用CPU的百分比

如果有多个CPU,希望查询每个CPU的使用率,可以在top命令的界面,按数字键1,即可看到其它CPU的使用率


  第四行(Mem):
    分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

    5752.2 total — 物理内存总量
    2535.1 used — 使用中的内存总量
    241.2 free — 空闲内存总量
    2975.9 buffers — 缓存的内存量 


  第五行(Swap):
    表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。

    4060.0 total — 交换区总量(4G)
    13.8 used — 使用的交换区总量(0M)
    4046.2 free — 空闲交换区总量(4G)
    2897.7 cached — 缓冲的交换区总量(2483M)


通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

第二部分 -- 中间部分的内部命令提示栏:

默认看不到, 中间一行空格就是--内部命令提示栏

top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:
  s - 改变画面更新频率
  l - 关闭或开启第一部分第一行 top 信息的表示
  t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
  m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
  N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)
  P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)
  M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)
  h - 显示帮助
  n - 设置在进程列表所显示进程的数量
  q - 退出 top

第三部分 -- 最下部分的进程列表栏:

以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。

<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。
但是,它的缺点是会消耗很多系统资源。
应用实例
使用top命令可以监视指定用户,缺省情况是监视所有用户的进程。
如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。

网络方面

查看网络流量

Linux: 查看网络流量_琦彦-CSDN博客

ifstat命令

ifstat命令就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。

语法格式

ifstat [参数]

常用参数:

-p优化打印
-a忽略历史记录
-e显示错误信息
-r重置历史记录
[root]# ifstat
#kernel
Interface        RX Pkts/Rate    TX Pkts/Rate    RX Data/Rate    TX Data/Rate  
                 RX Errs/Drop    TX Errs/Drop    RX Over/Rate    TX Coll/Rate  
lo                214389 0        214389 0        48159K 0        48159K 0      
                       0 0             0 0             0 0             0 0      
eth0              847884 0         1075K 0       126343K 0      18446744071519M 0      
                       0 0   

ifstat 命令结果分析:

  • RX Pkts/Rate 数据包接收流量
  • RX Errs/Drop 丢包
  • TX Pkts/Rate 数据包发送流量
  • RX Data/Rate 数据接收流量
  • TX Data/Rate 数据发送流量

sar命令

sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL }

命令参数

sar 提供六种不同的语法选项来显示网络信息。
-n选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL 。
DEV显示网络接口信息,
EDEV显示关于网络错误的统计数据,
NFS统计活动的NFS客户端的信息,
NFSD统计NFS服务器的信息,
SOCK显示套接字信息,
ALL显示所有5个开关。

应用示例

sar - n SOCK 2 10

[root@iZbp10fstdmbee21wif5ngZ 2018-02-26]# sar -n SOCK 2 10
Linux 3.10.0-514.6.2.el7.x86_64 (iZbp10fstdmbee21wif5ngZ) 02/27/2018 _x86_64_ (8 CPU)
05:07:33 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
05:07:35 PM 265 163 4 0 0 12
05:07:37 PM 265 163 4 0 0 12
  • totsck:使用的套接字总数量
  • tcpsck:使用的TCP套接字数量
  • udpsck:使用的UDP套接字数量
  • rawsck:使用的raw套接字数量
  • ip-frag:使用的IP段数量
[root@iZbp10fstdmbee21wif5ngZ 2018-02-26]# sar -n DEV 2 10
Linux 3.10.0-514.6.2.el7.x86_64 (iZbp10fstdmbee21wif5ngZ) 02/27/2018 _x86_64_ (8 CPU)
05:12:43 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
05:12:45 PM eth0 535.50 397.00 58.26 67.17 0.00 0.00 0.00
05:12:45 PM eth1 11.50 13.00 4.18 2.49 0.00 0.00 0.00
05:12:45 PM lo 1.50 1.50 0.09 0.09 0.00 0.00 0.00
  • IFACE:LAN接口
  • rxpck/s:每秒钟接收的数据包
  • txpck/s:每秒钟发送的数据包
  • rxbyt/s:每秒钟接收的字节数
  • txbyt/s:每秒钟发送的字节数
  • rxcmp/s:每秒钟接收的压缩数据包
  • txcmp/s:每秒钟发送的压缩数据包
  • rxmcst/s:每秒钟接收的多播数据包
[root@iZbp10fstdmbee21wif5ngZ 2018-02-26]# sar -n EDEV 2 10
Linux 3.10.0-514.6.2.el7.x86_64 (iZbp10fstdmbee21wif5ngZ) 02/27/2018 _x86_64_ (8 CPU)
05:13:47 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
05:13:49 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:13:49 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

IFACE:LAN接口
rxerr/s:每秒钟接收的坏数据包
txerr/s:每秒钟发送的坏数据包
coll/s:每秒冲突数
rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
txcarr/s:发送数据包时,每秒载波错误数
rxfram/s:每秒接收数据包的帧对齐错误数
rxfifo/s:接收的数据包每秒FIFO过速的错误数
txfifo/s:发送的数据包每秒FIFO过速的错误数

ethtool命令

使用内核自带的工具 ethtool 可以查看和设置网卡的网速

1.ethtool的基本用法

ethtool ethX      #查询ethX网口基本设置
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]\         #设置网口速率10/100/1000M
[duplex half|full]\           #设置网口半/全双工
[autoneg on|off]\            #设置网口是否自协商
[port tp|aui|bnc|mii]\         #设置网口类型
[phyad N]\                
[xcvr internal|exteral]\
[wol p|u|m|b|a|g|s|d...]\
[sopass xx:yy:zz:aa:bb:cc]\
[msglvl N]


2.使用ethtool查询网卡信息

# 先查询网络设备名
> ifconfig -a       #查询全部网络设备

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.136.205  netmask 255.255.255.0  broadcast 192.168.136.255
        inet6 fe80::fd2e:62ff:920a:1bd4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ca:f5:45  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 729 (729.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30  bytes 2102 (2.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 查询设备的信息
> ethtool  ens37

Settings for ens37:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

我们来解释下看到的信息:

  • Supported ports :指支持的物理接口,这里仅包含TP 还可以有 Mii和 FIBRE 等类型。TP是指 双绞线(twisted pair)
  • link modes :指连接模式,其实这是用两个参数组合构成的速度(speed)和双工(Duplex)
modespeed(Mb/s)deplex
10baseT/Half10half
10baseT/Full10full
100baseT/Hal100half
100baseT/Full100full
1000baseT/Full1000full

half 指 半双工; ful指全双工

  • Auto-negotiation :自动协商,有一个很值得思考的问题,千兆网卡就一定会跑千兆的速度吗?不一定。这个选项就是可以网线两端的网络设备相互协商来确定其运行模式(on就是开启)
  • Speed 当前网卡设置的速度
  • Duplex 当前网卡设置的双工模式
  • Port 当前网卡连接的物理接口
  • Link detected: 表示当前的连接状况 yes 就是连通

3.使用ethtool查询网卡驱动

# 查询驱动
> ethtool -i ens37

driver: e1000
version: 7.3.21-k8-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:02:05.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

> modinfo  e1000
filename:       /lib/modules/3.10.0-1127.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz
version:        7.3.21-k8-NAPI
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
retpoline:      Y
rhelversion:    7.8
srcversion:     BED5FAF40AE66C5A4A6AC4C
alias:          pci:v00008086d00002E6Esv*sd*bc*sc*i*
alias:          pci:v00008086d000010B5sv*sd*bc*sc*i*
... ...

4.使用ethtool查询网卡统计信息

# 查询驱动
> ethtool -S ens37

NIC statistics:
     rx_packets: 23
     tx_packets: 32
     rx_bytes: 2622
     tx_bytes: 2274
     rx_broadcast: 0
     tx_broadcast: 0
... ...

磁盘方面

iostat

通过iostat我们能查看到系统IO状态信息,从而确定IO性能是否存在瓶颈。

命令

[root@localhost ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

iostat 主要有三个操作,options 操作项,interval指定统计时间间隔,count总共输出次数
-c 参数,可以用来插卡部分cpu状态信息
-k 参数,某些使用block为单位的列强制使用Kilobytes为单位
-d 参数,显示设备(磁盘)使用状态

输出列表示什么意思:

  • tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。
  • “一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
  • kB_read/s:每秒从设备(drive expressed)读取的数据量;
  • kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
  • kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
  • -x 参数 ,输出更多详细信息
  • -x参数输出列意思
  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了
  • (当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
  • wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
  • rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。
  • r/s:The number of read requests that were issued to the device per second;
  • w/s:The number of write requests that were issued to the device per second;
  • await:每一个IO请求的处理的平均时间(单位是毫秒)。
  • 这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
  • %util:在统计时间内所有处理IO时间,除以总共统计时间。
  • 例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

应用示例

iostat -d -k 1 10 #查看TPS和吞吐量信息
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态

[root@iZbp10fstdmbee21wif5ngZ 2018-02-26]# iostat -d -x -k 1 10
Linux 3.10.0-514.6.2.el7.x86_64 (iZbp10fstdmbee21wif5ngZ) 02/27/2018 _x86_64_ (8 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.01 4.32 0.51 2.99 18.01 32.07 28.56 0.04 11.71 60.41 3.34 0.73 0.26

iostat 命令结果分析:

  • rkB/s 每秒读取数据量kB
  • wkB/s 每秒写入数据量kB
  • svctm I/O请求的平均服务时间,单位毫秒
  • await I/O请求的平均等待时间,单位毫秒,值越小,性能越好
  • util 1秒中有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满。

经验

  • rkB/s 和 wkB/s 的值如果长期较高,说明持续有大量数据读写,需要警惕。
  • svctm 和 await 值相近时,说明几乎没有I/O等待,磁盘性能好。如果 await 远高于 svctm,说明I/O队列等待太长,需要优化程序或更换磁盘。

Java应用方面

ps -ef | grep java 找所有有关“java”的进程
ps -efL | grep [PID] | wc -l 查看某个进程创建的线程数

PS查看进程信息,和查看tomcat内存等信息--参考--http://blog.csdn.net/fly910905/article/details/79031394


jmap -histo [pid] 按照对象内存大小排序 注意会导致full gc
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐