Linux 系统环境监测
阅读原文时间:2023年07月08日阅读:2

Linux系统环境主要监测CPU、内存、磁盘I/O和网络流量。

1. CPU

(1) 查看CPU的负载情况:uptime

可以通过uptime查看系统整体的负载情况。

如果服务器的CPU为1核心,则1分钟的系统平均负载 >=3 说明负载过高,如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高。

root@ubuntu1804:~# uptime
09:57:53 up  7:17,  2 users,  load average: 0.10, 0.03, 0.01

09:57:53                        # 当前时间
up  7:17                        # 主机已运行时间
2 users                         # 当前登录用户数
load average: 0.10, 0.03, 0.01  # 系统负载,即任务队列的平均长度。 三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值

(2)linux中查看cpu的逻辑数量:

ehigh@ubuntu:~$ grep -c 'processor' /proc/cpuinfo
8

CPU:central processing unit,中央处理器。

插槽:表示电脑上插了几个物理cpu
内核:表示这个物理cpu有几个核心,一个核心就是一个cpu
逻辑处理器:逻辑上的处理器数量,通过超线程技术将一个处理器模拟出两个处理器出来。
超线程技术:在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程

cpu发展历程:

刚开始一个物理cpu只有一个核心,通过提高核心的工作频率来提高性能,但是会产生过多的热量。
后面因特尔发明了超线程技术,在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程
后面采用多核架构,在一个物理cpu里面放多个核心,好似一辆汽车放多个发动机。

例如:服务器上面插了一个物理cpu是4核8线程。表示的是这个cpu又4个核心,支持超线程技术,逻辑cpu就是8个。

并发

(3)查看系统中使用CPU最多的进程:top

使用top命令,按下大写的P,可以按cpu使用率排序

PID     USER      PR   NI     VIRT     RES     SHR    S     %CPU     %MEM     TIME+     COMMAND
720     root      20   0     473464    22060   19128  S      1.7      0.2   119:55.14   sunloginclient
3590    emqx      20   0     3483576   201492  74484  S      1.3      2.0   64:39.37    beam.smp
984     root      20   0     2754328   50696   5192   S      1.0      0.5   77:32.96    taosd

进程的cpu占用能否超过100%?

如果你的4核心的cpu,你可以运行400%

判断CPU当前忙不忙?

要结合cpu使用率和队列一起看,如果一分钟内cpu的队列数超过3并且cpu的使用率也很高,说明当前cpu很忙。

(4)查看cpu的使用率:

使用top命令,然后按数字1就可以显示每个cpu的详细信息

top - 10:48:44 up 5 days,  1:15,  1 user,  load average: 0.10, 0.14, 0.10
Tasks: 398 total,   1 running, 397 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  3.4 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   9952.6 total,   5473.8 free,   2145.3 used,   2333.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   7477.7 avail Mem 

# 96.6 id -- 表示cpu的空闲率是96.6%

2. 内存

(1)查看内存的大小和使用量:

root@ubuntu:~# free -h
              total        used        free      shared  buff/cache   available
Mem:          9.7Gi       2.1Gi       5.4Gi        49Mi       2.3Gi       7.3Gi
Swap:            0B          0B          0B

#选项:
# -h 表示系统会根据值的大小来选择合适的单位,默认是byte

# aotal          总计物理(swap)内存的大小
# used          已使用物理内存(swap)的大小
# free          可用的物理内存(swap)大小
# shared      多个进程共享的内存总额
# buff/cache  磁盘的缓存大小
# available      可以被新应用程序使用的内存大小

# Mem:物理内存的大小
# Swap:交换分区的大小,交换分区就是使用磁盘的一部分空间来模拟内存,当物理内存占用满的时候就将一部分不常用的数据移动到交换分区中。交换分区是临时充当内存的作用,性能很低。

(2)查看系统使用内存最多的进程:

使用top命令然后按大写M就可以按照内存的使用率来进行排序,按e可以按M,G,T 这些单位来显示

PID   USER      PR  NI    VIRT    RES    SHR   S  %CPU   %MEM      TIME+ COMMAND
1377  mysql     20   0    4.8g    0.8g   0.0g  S   0.7   7.8       67:01.24 mysqld
977   root      20   0    7.7g    0.3g   0.0g  S   0.0   3.4       32:34.83 java
3590  emqx      20   0    3.3g    0.2g   0.1g  S   0.7   2.0       64:48.04 beam.smp
446   root      19  -1    0.3g    0.2g   0.2g  S   0.0   2.0       1:59.99 systemd-journ

3. 磁盘IO

(1)查看对磁盘读写最多的进程

oot@ubuntu1804:~# iostat -dkp
Linux 4.15.0-156-generic (ubuntu1804)     12/03/2022  _x86_64_    (4 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          8          0
sda               0.64        16.17        58.90     487458    1775844
sda1              0.01         0.20         0.00       5893         96
sda2              0.00         0.00         0.00          4          0
sda5              0.00         0.11         0.00       3312          0
sda6              0.63        15.79        58.90     476129    1775748
scd0              0.00         0.07         0.00       2056          0

# kB_read/s   每秒从磁盘读入的数据量,单位为K.
# kB_wrtn/s    每秒向磁盘写入的数据量,单位为K.
# kB_read    读入的数据总量,单位为K.
# kB_wrtn    写入的数据总量,单位为K.

# -d 仅显示磁盘统计信息
# -k 以K为单位显示每秒的磁盘请求数,默认单位块.
# -p device | ALL 用于显示块设备及系统分区的统计信息.

服务器很卡,查看CPU使用率不高,内存也够用,但就是卡,尤其是打开新程序或文件时,更卡。此时是哪出问题了?

一般是磁盘IO到达了瓶颈,还企业级ssd可以提高性能瓶颈。

(2)查看哪个进程使用磁盘读写最多

root@ubuntu1804:~# iotop -o

Total DISK READ :       5.79 M/s | Total DISK WRITE :       2.28 M/s
Actual DISK READ:       5.79 M/s | Actual DISK WRITE:       4.64 M/s

TID    PRIO  USER     DISK READ      DISK WRITE    SWAPIN     IO>      COMMAND
17238  be/4  tom      5.79 M/s       0.00 B/s      0.00 %     64.19 %  find /
17092  be/4  root     0.00 B/s       0.00 B/s      0.00 %     12.71 %  [kworker/u256:0]
476    be/3  root     0.00 B/s       2.28 M/s      0.00 %      5.45 %  [jbd2/sda6-8]

# Total DISK READ:总的磁盘读取速度。  Total DISK WRITE:总的磁盘写入速度。
# Actual DISK READ:实际磁盘读的速度   Actual DISK WRITE:实际磁盘写的速度

# TID:进程pid值。
# PRIO:优先级。
# USER:用户。
# DISKREAD:磁盘读取速度。
# DISK WRITE:磁盘写入速度。
# SWAPIN:从swap分区读取数据占用的百分比。
# IO:I/O占用的百分比。
# COMMAND:消耗I/O的进程名。  

#命令选项:
# -o, -only 只显示在读写硬盘的程序
# -d SEC, -delay=SEC  设定显示时间间隔。 刷新时间
# 退出,按q或ctrl+C

4. 网络

(1)使用nload监控总体带宽使用情况

tom@ubuntu1804:~$ nload -u h  # -u:指定数据的单位 h表示写哦那个会根据数值的大小自动选择单位 例如M G等
Device eth0 [10.0.0.18] (1/2):
==

Incoming:#进来的网络流量
Curr: 558.33 kBit/s   #当前流量
Avg: 297.12 kBit/s    #平均流量
Min: 1.39 kBit/s      #最小流量
Max: 894.77 kBit/s    #最大流量
Ttl: 58.23 MByte      #流量总和

Outgoing:#出去的网络流浪
Curr: 16.16 kBit/s
Avg: 15.37 kBit/s
Min: 4.52 kBit/s
Max: 32.62 kBit/s
Ttl: 766.79 kByte

(2)使用nethogs找出使用带宽最多的进程

tom@ubuntu1804:~$ sudo nethogs
NetHogs version 0.8.5-2

PID    USER     PROGRAM                 DEV         SENT          RECEIVED
1733   root     wget                    eth0        13.352        4317.425 KB/sec
1605   tom      sshd: tom@pts/0         eth0        1.025         0.07013.276 KB/sec
1732   root     wget  tom@pts/0         eth0        0.000         0.000 KB/sec
?      root     unknown                 TCP         0.000         0.000 KB/sec

TOTAL    0.000     0.000 KB/sec                     14.378        4317.701

# PID:行程 ID。
# USER:行程的拥有者。
# PROGRAM:程序路径。
# DEV:网络接口。
# SENT:目前传送数据的速度。
# RECEIVED:目前接收数据的速度

#TOTAL 总计、总和

#快捷键:
# m:切换带宽单位,可用单位有 KB/s、KB、B、MB。
# r:以数据接收速度排序。
# s:以数据传送速度排序。
# q:离开 NetHogs。