目录
概述
一、启动top
1.1 top前5行统计信息
1.2 top 进程信息
1.3 top 命令
1.3.1 格式
1.3.2 参数
1.4 top 用法示例
1. 按 Z 键更改输出的颜色。我发现这让输出更容易被眼睛看到。
2. 按1键可查看系统上每个 CPU 内核的图形表示。反复按1以评估 CPU 内核的内核统计信息。
3.过调用top命令然后按m键以图形方式显示内存使用情况。
4. 改变进程显示字段
5. 如果只查找由特定用户启动的进程,则可以使用以下 -u 选项获取该信息:
6.要获取系统上的空闲进程列表,请使用以下 -i 选项:
7. 更新间隔设置为以秒为单位的任意值。默认值为 3 秒。像这样将其更改为 5:
8. 显示指定的进程信息
9. 用 top 定位一个进程
10. 使用 top 停止进程
1.5 一些关于top命令的实用案例
1. 获取要监控的本地服务器IP地址
2. 获取用户空间占用CPU百分比
3. 获取内核空间占用CPU百分比
4. 获取空闲CPU百分比
5. 获取等待输入输出占CPU百分比
1.6 进行压力测试
二 、htop命令
2.1 安装htop
2.2 Htop主要有三个部分
2.3 Htop Linux 进程监控
2.3.1 常用的交互命令:
2.4 atop命令
2.4.1 安装atop
编辑 2.4.2 参数介绍
2.5 nmon
三、扩展
四、dd 命令
4.1 dd 命令的基本格式
4.2 备份文件
4.3 备份分区为一个备份文件
4.4 整盘备份
4.5 复制软盘
4.6 使用dd命令进行压力测试
4.7 结论
当我检查 Linux 系统(或者甚至对运行其他操作系统的计算机进行故障排除)时,我经常使用 top 命令来检查系统的 RAM 和 CPU 占用率。它为我提供了评估计算机整体健康状况的信息。我在 Linux 之旅的早期就了解了 top 命令,并依靠它让我快速了解服务器或其他 Linux 系统(包括 Raspberry Pi)上正在发生的事情。但 top 命令远比人们看到的要复杂得多。根据其手册页,top 程序提供了正在运行的系统的动态实时视图。它可以显示系统摘要信息以及当前由 Linux 内核管理的进程或线程列表。
第一行:
top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30
内容 |
含义 |
05:43:27 |
表示当前时间 |
up 4:52 |
系统运行时间 格式为时:分 |
2 users |
当前登录用户数 |
load average: 0.58, 0.41, 0.30 |
系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行: Tasks: 232 total, 1 running, 231 sleeping, 0 stopped, 0 zombie
内容 | 含义 |
---|---|
159 total | 进程总数 |
1 running | 正在运行的进程数 |
158 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
第三行:
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
内容 |
含义 |
37.0 us |
用户空间占用CPU百分比 |
3.7 sy |
内核空间占用CPU百分比 |
0.0 ni |
用户进程空间内改变过优先级的进程占用CPU百分比 |
59.3 id |
空闲CPU百分比 |
0.0 wa |
等待输入输出的CPU时间百分比 |
0.0 hi |
硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si |
软中断(Software Interrupts)占用CPU的百分比 |
0.0 st |
虚拟化占用CPU的百分比 |
第四行: KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers
内容 |
含义 |
KiB Mem: 1530752 total |
物理内存总量 |
1481968 used |
使用的物理内存总量 |
48784 free |
空闲内存总量 |
70988 buffers(buff/cache) |
用作内核缓存的内存量 |
第五行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem
内容 |
含义 |
KiB Swap: 3905532 total |
交换区总量 |
267544 used |
使用的交换区总量 |
3637988 free |
空闲交换区总量 |
617312 cached Mem |
缓冲的交换区总量。 |
3156100 avail Mem |
代表可用于进程下一次分配的物理内存数量 |
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等等
top [参数]
-b 以批次的方式执行top
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程或指定特定的pid进程号进行观察
-n<次数> 循环显示的次数,与-b配合使用,表示需要进行几次top命令的输出结果
在top命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):
?键:显示在top当中可以输入的命令
P键:以CPU的使用资源百分比大小排序显示
M键:以内存的使用资源排序显示
N键:根据启动时间进行排序
c键:切换显示命令名称和完整命令
h键:可以获得top程序的在线帮助信息
数字1键:显示CPU个数和状态
k:给某一个pid一个信号。可以用来杀死进程
r:给某个pid重新定制一个nice值(即优先级)
q:退出top(用ctrl+c也可以退出top)。
在top基本视图中,敲击”f”进入另一个视图,在这里可以编辑基本视图中的显示字段:
top -u 'root'
top -i
top -d 5
top -p PID号
按 Shift+l 按名称查找进程。这会在粗体表标题行上方创建1一个提示。输入您要查找的进程的名称,然后按Enter或Return以查看在新排序的进程列表中高亮显示该进程的实例。
您也可以使用 top 停止或“kill”正在运行的进程。首先,使用 Shift+l 或找到要停止的进程 pgrep。接下来,按 k 并输入要停止的进程 ID。默认值是列表顶部的任何值,因此请确保在按 Enter 之前输入要停止的 PID ,否则您可能会停止您不打算停止的进程。
ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'
top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d "%"
top -b -n 1 | grep Cpu | awk '{print $4}' | cut -f 1 -d "%"
top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%"
top -b -n 1 | grep Cpu | awk '{print $10}' | cut -f 1 -d "%"
stress --io 15 --hdd 15 --timeout 600
stress --cpu 4 --timeout 600
解决办法:查看哪一个进程的cpu 使用过高,使用kill 杀掉进程的PID号
kill -9 PID
Htop是 Linux/类 Unix 系统的交互式实时进程监控应用程序,也是top 命令的便捷替代品, top 命令是所有 Linux 操作系统上预装的默认进程监控工具。
Htop还有许多其他用户友好的功能,这些功能在top 命令下不可用,它们是:
方法一:使用yum 进行安装
yum install -y epel-release
#要先安装依赖包
yum install htop
方法二:进行编译安装
wget-Ohtop-3.0.5.tar.gz https://github.com/htop-dev/htop/archive/refs/tags/3.0.5.tar.gz
tar xvfvz htop-3.0.5.tar.gz
cd htop-3.0.5/
./configure
make
make install
可以看到总共分四个区域:
Shortcut Key |
Function Key |
Description |
中文说明 |
h, ? |
F1 |
Invoke htop Help |
查看htop使用说明 |
S |
F2 |
Htop Setup Menu |
htop 设定 |
/ |
F3 |
Search for a Process |
搜索进程 |
\ |
F4 |
Incremental process filtering |
增量进程过滤器 |
t |
F5 |
Tree View |
显示树形结构 |
<, > |
F6 |
Sort by a column |
选择排序方式 |
[ |
F7 |
Nice - (change priority) |
可减少nice值,可以提高对应进程的优先级 |
] |
F8 |
Nice + (change priority) |
可增加nice值,可以降低对应进程的优先级 |
k |
F9 |
Kill a Process |
可对进程传递信号 |
q |
F10 |
Quit htop |
结束htop |
按F2或S进入设置菜单 > 有四列,即设置Setup、左列Left Column、右列Right Column和可用仪表Available Meters。
在这里,您可以配置打印在窗口顶部的仪表、设置各种显示选项、在颜色模式中进行选择以及选择以何种顺序打印哪些列。
1) space 标记一个进程(类似windows按着Ctrl多选一样)
2) U 取消所有标记;
3) l 显示进程打来的文件;
4) u 显示特定用户;
5) M 按照内存排序;
6) P 按照CPU排序;
7) T 按在线时长排序;
8) ctrl + L 刷新;
9) 直接输入数字,查找对应的PID进程;
除了上面介绍的一些热键,htop 还提供了很有用的命令行选项。下面是其中一部分:
-s 选项 : 按指定的列排序。例如,htop -s PID 命令会按 PID 列的大小排序来显示。
-u 选项 : 显示指定的用户的进程信息列表。例如,htop -u himanshu 命令会只显示出用户名为 himanshu 的相关进程。
-d 选项 : 设置刷新的延迟时间。例如,htop -d 100 命令会使输出在1秒后才会刷新(参数 -d 的单位是10微秒)。
atop 正在运行的进程或以前正在运行进程的详细信息它还支持永久记录资源利用率
yum install -y atop
在atop的展示页面也可以输入m(内存)、p(进程)、u(用户)、d(磁盘)、c(进程运行的代码)、v(线程) 进行页面切换。
Launch with average-per-second total values以平均每秒总值启动:atop -1
Launch with active processes only仅使用活动进程启动:atop -a
Launch with command line per process每个进程用命令行启动:atop -c
Launch with disk info 使用磁盘信息启动:atop -d
Launch with memory info使用内存信息启动:atop -m
Launch with network info使用网络信息启动:atop -n
Launch with scheduling info使用计划信息启动:atop -s
Launch with various info (ppid, user, time)发布各种信息(ppid、用户、时间):atop -v
Launch with individual threads使用单个线程启动:atop -y
yum install -y nmon
以控制分解信息并根据需要逐一显示(切换)信息。
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU
自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM
进程使用的可用物理内存百分比。
TIME+
任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND
运行进程所使用的命令。
还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。
2. 交互命令
我们之前说过top是一个交互命令。上一节我们已经遇到了一些命令。这里我们会探索更多的命令。
2.1 ‘h’: 帮助
首先,我们可以用'h'或者'?'显示交互命令的帮助菜单。
2.2 ‘’ 或者 ‘’: 刷新显示
top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。
2.3 ‘A’: 切换交替显示模式
这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口(译注:分别关注不同的字段):
Def (默认字段组)
Job (任务字段组)
Mem (内存字段组)
Usr (用户字段组)
这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(译注:只有当前窗口才会接受你键盘交互命令)
我们可以用'a'和'w'在4个 窗口间切换。'a'移到后一个窗口,'w'移到前一个窗口。用'g'命令你可以输入一个数字来选择当前窗口。
2.4 ‘B’: 触发粗体显示
一些重要信息会以加粗字体显示。这个命令可以切换粗体显示。
2.5 ‘d’ 或‘s’: 设置显示的刷新间隔
当按下'd'或's'时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。
2.6 ‘l’、‘t’、‘m’: 切换负载、任务、内存信息的显示
这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。
2.7 ‘f’: 字段管理
用于选择你想要显示的字段。用'*'标记的是已选择的。
上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。
按'<'移动已排序的字段到左边,'>'则移动到右边。
2.8 ‘R’: 反向排序
切换反向/常规排序。
2.9 ‘c’: 触发命令
切换是否显示进程启动时的完整路径和程序名。
2.10 ‘i’: 空闲任务
切换显示空闲任务。
2.11 ‘V’: 树视图
切换树视图。
2.12 ‘Z’: 改变配色
按下'Z'向用户显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。
下面显示的是4中颜色显示的top视图。
2.13 ‘z’: 切换彩色显示
切换彩色,即打开或关闭彩色显示。
2.14 ‘x’ 或者 ‘y’
切换高亮信息:'x'将排序字段高亮显示(纵列);'y'将运行进程高亮显示(横行)。依赖于你的显示设置,你可能需要让输出彩色来看到这些高亮。
2.15 ‘u’: 特定用户的进程
显示特定用户的进程。你会被提示输入用户名。空白将会显示全部用户。
2.16 ‘n’ 或 ‘#’: 任务的数量
设置最大显示的任务数量
2.17 ‘k’: 结束任务
top命令中最重要的一个命令之一。用于发送信号给任务(通常是结束任务)。
2.18 ‘r’: 重新设置优先级
重新设置一个任务的调度优先级。
3. 命令行选项
这些命令行选项与上面讨论的命令大多相同。top的输出可以用命令交互操作,但是你也可以带参数运行top来设置你想要的效果。
3.1 -b: 批处理模式
-b选项以批处理模式启动top命令。当你想要在文件中保存输出时是很有用的。
3.2 -c: 命令/程序名 触发
如上面所讨论到的命令,这个选项会以上次记住的程序/命令显示的状态显示(是否显示完整路径)。
3.3 -d: 设置延迟间隔
设置top的显示间隔(以秒计)。比如。
$ top -d 1
将会以1秒的刷新间隔启动top。
3.4 -i: 切换显示空闲进程
这个选项设置top命令的上一次记住的相反的'i'状态。
3.5 -n: 设置迭代数量
用-n选项,你可以设置top退出前迭代的次数。
$ top -n 3
将会在刷新输出3次后退出。
3.6 -p: 监控特定的PID
你可以用-p选项监控指定的PID。PID的值为0将被作为top命令自身的PID。
3.7 -u 或 -U: 用户名 或者 UID
可以用这些选项浏
dd 命令主要用来进行数据备份,并且可以在备份的过程中进行格式转换。其实 dd 命令可以把源数据复制成目标数据,而且不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。
dd if="输入文件" of="输出文件" bs="数据块" count="数量"
参数:
if=file:代表输入文件,默认是标准输入。
of=file:代表输出文件,默认是标准输出。
bs=size:代表数据块大小。dd命令一次读取或者写入数据的大小。对于海量数据,你可以在数字后设置b和k来分别代表512字节和1024字节。如:bs=1k和bs=1024一样。ibs=size,obs=size:代表输入和输出块大小。如果输入输出块大小相同,你可以使用bs选项,如果不相同的话,可以使用ibs和obs分别指定。
count=num:代表复制块的总数。在处理大文件或者无限数据流(/dev/zero)的时候,你可能会需要在某个地方停止dd复制,不然的话将会消耗大量硬盘空间和CPU时间。这时你可以使用count和skip选项从大文件或设备中复制一小部分数据。
skip=num:代表跳过前面的num个块,不将它们复制到输出。
[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak
记录了67+1 的读入
#数据占了写满的67个数据块,以及1个没有写满的数据块
记录了67+1 的写出
#默认数据块大小是512字节
34439字节(34 kB)已复制,0.0524897 秒,656 kB/秒
#如果要备份文件,那么dd命令和cp命令非常类似
[root@localhost ~]# ll -h /tmp/httpd.bak
-rw-r--r--.1 root root 34K 6月 5 18:04 /tmp/httpd.bak
#查看一下生成的备份文件的大小
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 306M 0 306M 0% /dev/shm
/dev/sda1 194M 27M 157M 15% /boot
/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom
#查看一下分区容量,我们备份/boot分区
[root@localhost ~]# dd if=/dev/sda1 of=/tmp/boot.bak
#备份完成
[root@localhost ~]# ll -h /tmp/boot.bak
-rw-r--r--.1 root root 200M 6月 5 18:14 /tmp/boot.bak
#查看生成的备份文件
#如果需要恢复,则执行以下命令
[root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1
如果想要把分区直接备份成另一个分区,就需要生成一个新的分区,这个分区的大小不能比源分区小,只能和源分区大小一致或比它大。命令如下:
[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1
#如果需要恢复,则只需把输入项和输出项反过来即可,命令如下
[root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb
#把磁盘a备份到磁盘b
[root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak
#把磁盘a备份成文件disk.bak
#备份恢复
#如果要备份到另一块硬盘上,那么,当源硬盘数据损坏时,只需用备份硬盘替换源硬盘即可
#如果要备份成文件,那么在恢复时需要把备份数据复制到其他Linux中,然后把新硬盘安装到这台Linux
#服务器上,再把磁盘备份数据复制到新硬盘中。命令如下
[root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb
[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak
#在Linux中软盘的设备文件名是/dev/fd0
#这条命令先把软盘中的数据保存为临时数据文件
[root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0
#然后更换新的软盘,把数据备份复制到新软盘中,就实现了软盘的复制
如果需要备份的是光盘,那么在 Linux 中就是使用 dd 命令制作光盘的 ISO 镜像的。命令如下:
#制作光盘ISO镜像
[root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盘中所有的数据制作成ISO镜像
[root@localhost ~J # mkdir /mnt/cd
#建立一个新的挂载点
[root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #挂栽ISO文件到挂载点
[root@localhost ~]# cd /mnt/cd
#进入挂栽点
[root@localhost cd]# ls
CentOS_BuildTag images RELEASE-NOTES-en-tJS.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL
EULA isolinux repodata RPM-GPG-KEY-CentOS-Security-6
GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6
#数据是光盘当中的数据,这个ISO镜像是可以被当作真正的光盘使用的
我们有时需要制作指定大小的文件,比如,在增加 swap 分区时,就需要建立指定大小的文件,这时也使用 dd 命令。命令如下:
[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10
#数据输入项是/dev/zero会向目标文件中不停地写入二进制的0
#指定数据块大小是1MB
#指定生成10个数据块。也就是定义输出的文件大小为10MB
记录了10+0 的读入
#显示数据占满了10个数据块
记录了10+0 的写出
#不过这里数据块的大小已经是1MB了
10485760字节(10 MB)已复制,0.00709902 秒,1.5 GB/秒
[root@localhost ~]# ll -h /tmp/testfile
-rw-r--r--.1 root root 10M 6月 5 18:46 /tmp/testfile
#生成的testfile文件的大小刚好是10MB
注:dd 命令在进行整盘复制时,类似于 GHOST 工具的功能,不过通过 dd 命令复制出来的硬盘数据要比 GHOST 复制出来的硬盘数据稳定得多。虽然 dd 命令功能强大,不过也有一个明显的缺点,就是复制的时间较长,复制 100GB 的数据需要 15~25 分钟(根据服务器的性能不同而不同)。
1、先top实时查看动态进程信息
压力测试前,cpu和内存使用率
2、模拟持续输入文件,测试CPU和内存的抗压能力
dd if=/dev/zero of=/home/1.txt bs=1G count=100
3、压力测试后,CPU和内存的使用率
4、找到CPU占用率较高的进程并终止(可以在top操作界面中按k键,然后在列表上方将会出现"PID to signal/kill [default pid =]:”的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键,出现"send pid signal 42440[15/sigterm]"的二次确认的提示信息,然后按Enter键确认即可终止对应的进程。)
5、cpu和内存已占满,无法将/etc下的所有文件复制到/home目录下
6、查看发现内存以沾满
7、 查看磁盘占用空间,寻找出问题文件夹(/home)
8、删除问题文件
9、 解决问题后,再次查看cpu和内存的使用率,恢复正常
Top动态查看系统进程使用情况,并用dd命令做压力测试,模拟内存使用率过高。查看内存使用率较高的进程的 pid号,则终止该进程,防止因内存过大造成系统崩溃。然后寻找问题原因。
Top可以以动态的方式显示各进程的状态信息,当发现CPU和内存的使用率过高时,可能会对系统工作造成影响,所以我们要找出问题所在,并且解决问题。