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。

Linux 系统环境监测的更多相关文章

  1. 在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

  2. Linux实战教学笔记06:Linux系统基础优化

    第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...

  3. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

  4. 玩转 Linux 系统的方法论

    Linus 说“Just for fun”,而我要说“Just for 折腾”.想知道我是怎样折腾 Linux 的,请看下面这个截图: 从这个截图可以看出,我为了“折腾” Linux 系统,在我的电脑 ...

  5. Linux 系统中发博客必备的五大图片处理神器

    发博客时,总免不了要用图片说话.经过长时间的磨合,在 Linux 桌面系统下有几款图片处理软件我已经用得比较顺手了.这几款软件在 Linux 世界使用广泛,各个 Linux 发行版的软件仓库中都有自带 ...

  6. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  7. 在linux系统中安装VSCode(Visual Studio Code)

    在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make) 访问Visual Studio Code官网  ...

  8. 如何重置硬盘遭到“损坏”的Linux系统root用户密码

    传统印象下Linux是非常坚不可摧的,具有千年不更新,万年不重启的美名.而随着虚拟化的推进,很多跑在虚拟化上的Linux由于先前基础架构的脆弱,变得适应性“越来越不好”,体现在IP存储如果出现节点故障 ...

  9. Linux 系统中的MySQL数据库默认区分大小写

    今天在开发中遇到这么个问题,将连接的数据库改为服务器上的时候(服务器是Linux系统的),程序跑起来后一直出错,总提示数据库的表找不到, 而打开数据库看该表明明是存在的,在我的印象中MySQL数据是不 ...

  10. 如何配置Linux系统的网络IP地址

    一台安装了Linux系统的电脑如果想要联网,首先要做的就是进行网络配置.今天小编就以CentOS6.4系统为例为大家介绍整个网络配置的过程,虽然只是以CentOS6.4系统为例,但是其它的Linux系 ...

随机推荐

  1. 配置Kubelet的垃圾回收

    文章转载自:https://www.kuboard.cn/learning/k8s-advanced/gc.html Kubelet的垃圾回收功能可以清理不再使用的容器和镜像,kubelet对容器进行 ...

  2. mvn clean package 、mvn clean install、mvn clean deploy的区别与联系

    使用的时候首选:mvn clean package mvn clean package依次执行了clean.resources.compile.testResources.testCompile.te ...

  3. SpringCloud组件编写Dockerfile文件模板

    在组件根目录下的Dockerfile文件 # Dockerfile文件内容 FROM idocker.io/jre:1.8.0_212 #自定义的基础镜像 VOLUME /tmp # 挂载目录 ADD ...

  4. 通过开启swap分区来解决小内存阿里云服务器的内存瓶颈

    swap分区大小设置 阿里云的linux云服务器默认是没有启用swap分区(交换分区)的.一般情况下swapswap分区的大小可以参考以下规则进行设定: 内存大小 swap大小 MEM_SIZE &l ...

  5. Django命令

    (venv) E:\Py_CODE\myapp>python manage.py --help Type 'manage.py help <subcommand>' for help ...

  6. 多云容器编排 Karmada-Operator 实践

    作者:vivo 互联网服务器团队-Zhang Rong Karmada作为开源的云原生多云容器编排项目,吸引了众多企业共同参与项目开发,并运行于生产环境中.同时多云也逐步成为数据中心建设的基础架构,多 ...

  7. 教程:Android手机安装Debian+Wine,打造完全开源的兼容Windows的GNU/Linux!

    构建好的系统下载见这里: https://www.cnblogs.com/tubentubentu/p/16721884.html 测试的Android版本: 10 首先下载安装Real VncVie ...

  8. 邻接矩阵dfs

    #include<bits/stdc++.h> using namespace std; int a[11][11]; bool visited[11]; void store_graph ...

  9. 齐博x1{:get_user_money(2,$uid)}

    第一項是積分類型,第二項是用戶的UID, 在模板中用得最多的可能是 {:get_user_money(2,$uid)} 以管理員身份登錄後,在前台任何頁麵,隻要添加了標簽,雙擊就可以進入設置管理,如果 ...

  10. javascript编程单线程之同步模式

    javascript编程单线程之同步模式 主流的js 环境都是单线程吗模式执行js 代码, js采用为单线程的原因与最开始设计初衷有关,最早是运行在浏览器端的脚本语言,目的是为了实现页面上的动态交互, ...