Linux系统环境监测
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。