Linux 查看 cpu, mem, disk 和 network 信息

对于一个 Linux 服务器来说,cpu 的主频以及占用率,内存的大小以及占用率,磁盘 I/O 速率和网卡 I/O 速率极大地影响着服务器的性能。在 Linux 系统下,开发者提供了/proc 文件系统来提供系统相关的进程信息

1.查看 cpu 主频和占用率

Linux 下 CPU 的主频有两种获取方式,一种是通过读取 /proc/cpuinfo 文件,另外一种是利用 CPU 主频的计算原理编写程序获取。此处只介绍前一种方式。即使用命令 cat /proc/cpuinfo 。从下方图片可以看到,本人的电脑是双核 CPU,主频都为 2.60GHz。

Lance# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Pentium(R) Dual-Core  CPU      E5300  @ 2.60GHz
stepping        : 10
microcode       : 0xa0b
cpu MHz         : 1200.000
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
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 lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti tpr_shadow vnmi flexpriority dtherm
bugs            : cpu_meltdown spectre_v1 spectre_v2
bogomips        : 5186.86
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Pentium(R) Dual-Core  CPU      E5300  @ 2.60GHz
stepping        : 10
microcode       : 0xa0b
cpu MHz         : 1200.000
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
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 lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti tpr_shadow vnmi flexpriority dtherm
bugs            : cpu_meltdown spectre_v1 spectre_v2
bogomips        : 5186.86
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

Linux 下 CPU 的使用状态可分为用户态、系统态以及空闲态。CPU 占用率可以用如下公式计算

                            CPU占用率 = CPU执行非系统空闲进程时间/CPU执行总时间

/proc/stat 文件对 CPU 的使用情况进行了实时的记录,如下图所示:

Lance# cat /proc/stat
cpu  525228 16439 390034 139932703 224352 0 2010 0 0 0
cpu0 265224 6822 197250 70017169 60063 0 74 0 0 0
cpu1 260004 9617 192784 69915534 164289 0 1936 0 0 0
intr 126884204 43 2 0 0 0 0 0 1 0 3 0 0 4 0 0 0 124 0 2 1404563 0 0 0 0 955106 514 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 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 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 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 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 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 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 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 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 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 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 0
ctxt 193899569
btime 1536131324
processes 268172
procs_running 1
procs_blocked 0
softirq 101783843 10 36600014 116255 1002291 1058479 0 263 35993177 0 27013354

其中首行的 10 个参数含义如下:

user    nice    system  idle    iowait  irq softirq steal   guest   guest_nice
user:用户态的CPU时间
nice:低优先级程序所占用的用户态的cpu时间。
system:系统态的CPU时间
idle:CPU空闲的时间
iowait:等待IO响应的时间
irq:处理硬件中断的时间
softirq:处理软中断的时间
steal: 处理其他所花的时间
guest:运行时间为客户操作系统下的虚拟CPU控制
guest_nice:访客的低优先级程序所占用的用户态的cpu时间

余下的参数中:

intr: 第一个参数表示的是自系统启动以来,发生的所有中断的次数;其他的数对应一个特定中断发生的次数

ctxt: cpu自系统启动以来发生的上下文交换次数

btime: 系统启动到现在的时间 UTC 秒

processes: 表示系统启动以来创建的进程个数

procs_running: 当前运行进程的个数

procs_blocked: 当前被阻塞的进程个数

softirq: 显示软中断情况

要计算 CPU 在某段时间内的占用率,可以分别记录下 t1 和 t2 时刻的 CPU 总的状态和空闲状态,因此:

                            CPU占用率 = 1 - ( idle2 - idle1 ) / (total2 - total1)

其中 total 表示 10 个参数之和。

2. 查看内存大小及占用率

/proc/meminfo 记录了内存信息。

Lance# cat /proc/meminfo
MemTotal:        4003752 kB
MemFree:          517464 kB
MemAvailable:    3144816 kB
Buffers:          257152 kB
Cached:          2289308 kB
SwapCached:            0 kB
Active:          1455916 kB
Inactive:        1487740 kB
Active(anon):     277376 kB
Inactive(anon):   174624 kB
Active(file):    1178540 kB
Inactive(file):  1313116 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       6253564 kB
SwapFree:        6253564 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:        395168 kB
Mapped:           207872 kB
Shmem:             54808 kB
Slab:             460364 kB
SReclaimable:     425200 kB
SUnreclaim:        35164 kB
KernelStack:        5376 kB
PageTables:        22064 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8255440 kB
Committed_AS:    2553704 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:      2048 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      113216 kB
DirectMap2M:     4044800 kB

其中:

MemTotal:表示系统可支配内存

MemAvailable:表示应用程序可用的内存

因此,内存占用率可以用如下公式计算:

                                  MEMU sedPerc = (MemTotal - MemAvailable)/MemTotal

3.查看磁盘 I/O占用率

安装 sysstat 工具,它的子工具 iostat 可以显示 I/O 占用率。%util 参数表示 1s内用于 I/O 请求所用时间的比例,%util 值越高,I/O 占用率越高,可直接使用这个参数来代表 I/O 占用率

Lance# iostat -x
Linux 4.13.0-32-generic (Lance)         2018年09月13日  _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.37    0.01    0.28    0.16    0.00   99.17

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00   21.41    0.00   0.00     2.44     0.00  20.89   0.00
loop1            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00   44.62    0.00   0.00     1.69     0.00  11.38   0.00
loop2            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00   19.93    0.00   0.00     9.65     0.00  12.31   0.00
loop3            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00   41.81    0.00   0.00    14.23     0.00  18.88   0.00
loop4            0.01    0.00      0.01      0.00     0.00     0.00   0.00   0.00    6.61    0.00   0.00     1.12     0.00   0.50   0.00
loop5            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     1.60     0.00   0.00   0.00
sda              0.24    0.52      3.45     14.18     0.17     0.56  41.05  51.90    3.56   31.99   0.02    14.40    27.51   4.51   0.34

4. 查看网络带宽使用率

/proc/net/dev 文件中记录了网络相关的使用情况,其中分别记录了发送和接收的数据包总数、收发的错误包数以及收发的丢失包数等。取单位时间内发送和接 收 的 数 据 包 总 包 数 ( totalPackets ), 除 以 网 络 的 基 本 带 宽 ( bandWidth ),
                                  pnet = 100%*totalPackets/bandWidth

Lance# 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: 2729345   46942    0    0    0     0          0         0  2729345   46942    0    0    0     0       0          0
enp2s0: 558026941  723202    0 11733    0     0          0    105753 23827630  275738    0    0    0     0       0          0

bytes: 接口发送或接收的总字节数

packets: 接口发送或接收的总数据包数

errs: 有设备驱动程序检测到的发送或者接收错误的总数

drop: 设备驱动程序丢弃的数据包总数

fifo: FIFO 缓冲区错误的数量

frame: 分组帧错误的数量

colls: 接口上检测到的冲突数

compressed: 设备驱动程序发送或接收的压缩数据包数

carrier: 由设备驱动程序检测到的载波损耗的数量

multicast: 设备驱动程序发送或接收的多播帧数

你可能感兴趣的:(Linux)