[Linux]Process Utilization
Process Utilization
1 进程跟踪:使用top
命令
top
输出详解
运行 top
命令后,会看到如下输出:
1 |
|
第一行:显示当前时间、系统已运行时长、当前登录用户数及系统负载平均值。
第二行:展示了系统中任务的状态,包括运行中、休眠、停止及僵尸状态的任务数量。
第三行:CPU 使用情况细分
us:用户cpu时间
sy:系统cpu时间
ni:nice cpu时间
id:cpu空闲时间
wa:cpu等待I/O时间,如果很低,通常不会是网络或disk问题
hi:cpu花在处理硬件中断上的时间
si:cpu花在处理软中断上的时间
st:steal time,如果运行了虚拟机,这表示被其他任务偷走的cpu时间
第四与第五行:分别展示内存和交换分区的使用情况。随后是进程列表,每个进程的信息包括:
PID: 进程ID
USER: 拥有该进程的用户
PR: 进程优先级
NI: nice值
VIRT: 虚拟内存使用量
RES: 物理内存使用量
SHR: 共享内存大小
S: 进程状态(S=睡眠,R=运行,Z=僵尸,D=不可中断,T=已停止)
%CPU: 占用的CPU百分比
%MEM: 占用的RAM百分比
TIME+: 总活动时间
COMMAND: 进程名称
若只想监控特定进程ID为1的进程,可以使用以下命令:
1 |
|
2 使用 lsof
和 fuser
工具
当尝试卸载一个USB设备时,如果遇到“设备或资源忙”的错误,如何确定哪些文件正在被使用?这里介绍两个实用工具:lsof
和 fuser
。
lsof
lsof
(”list open files”的缩写)命令用于列出系统上所有打开的文件及其关联进程。在Linux系统中,“文件”不仅指文本文件、图像等,还包括磁盘、管道、网络套接字、设备等。
例如,要查看当前目录下有哪些文件被哪些进程打开:
1 |
|
输出示例:
1 |
|
这展示了每个进程的工作目录(cwd),帮助识别占用设备或文件的进程。
fuser
fuser
命令提供了另一种追踪文件使用的手段。它显示使用特定文件或文件系统的进程信息。
例如,查看哪个进程正在使用 /home/pete
目录:
1 |
|
输出示例:
1 |
|
此输出揭示了哪些进程正在访问指定目录。通过这些信息,可以决定是否终止相关进程以释放设备或文件,从而顺利完成卸载操作。
3 线程
线程与进程类似,它们都是执行程序的实体,常被称为轻量级进程。
进程各自独立运作,并拥有隔离的系统资源,而线程则能够在同一进程中共享这些资源,这使得线程间的通信更为便捷。在某些情况下,采用多线程应用程序比使用多进程应用程序更加高效。
举例来说,当同时打开LibreOffice Writer和Chrome时,每个应用都作为独立的进程运行。在Writer中编辑文本时,编辑动作和自动保存功能可以并行作为两个“轻量级进程”,即线程来实现。
查看进程线程
要查看系统中的进程及其线程,可以使用ps m
命令:
1 |
|
输出示例:
1 |
|
在此示例中,PID表示各个进程,而在进程下的线程以“–”标识。从上述输出可以看出,这两个进程均为单线程进程。
4 CPU监控
uptime
命令可以帮助我们快速了解系统的运行时间和负载情况。
1 |
|
uptime
命令提供了关于系统运行时间、当前登录用户数以及过去1分钟、5分钟和15分钟的平均负载的信息。
平均负载
平均负载是衡量CPU负载的一个良好指标,所谓CPU负载,指的是等待CPU执行的进程数的平均值。
对于多核处理器而言,每个核心可以被视为一条独立的车道。例如,拥有四核处理器(4个核心)的计算机,其平均负载为1时,实际上只使用了25%的CPU资源。可以通过查看/proc/cpuinfo
文件来确认系统中的核心数量:
1 |
|
监控与分析
观察平均负载时,必须考虑核心数量。如果发现系统的平均负载持续偏高,可能意味着存在需要解决的问题。
5 I/O监控
除了CPU使用情况,还可以通过iostat
来监控磁盘使用情况。下面是一个示例输出:
1 |
|
第一部分是CPU信息
%user
: 显示执行用户级应用程序时的CPU利用率百分比。%nice
: 显示在执行具有优先级调整的用户级进程时的CPU利用率百分比。%system
: 显示执行系统级别(内核)任务时的CPU利用率百分比。%iowait
: 显示CPU在有未完成磁盘I/O请求期间处于空闲状态的时间百分比。%steal
: 显示虚拟CPU等待其他虚拟处理器服务时所花费的时间百分比。%idle
: 显示CPU在没有未完成磁盘I/O请求的情况下处于空闲状态的时间百分比。
第二部分是磁盘利用率
tps
: 每秒传输到设备的次数。一次传输即为对设备的一个I/O请求,多个逻辑请求可以合并成一个I/O请求。kB_read/s
: 每秒从设备读取的数据量,以KB表示。kB_wrtn/s
: 每秒写入设备的数据量,以KB表示。kB_read
: 从设备读取的总数据量,单位是KB。kB_wrtn
: 写入设备的总数据量,单位是KB。
6 内存监控
可以使用vmstat
工具来监控内存使用情况。以下是一个示例输出:
1 |
|
进程(procs)
r
: 处于运行状态的进程数量。b
: 处于不可中断睡眠状态的进程数量。
内存(memory)
swpd
: 已使用的虚拟内存大小。free
: 空闲内存大小。buff
: 用作缓冲区的内存大小。cache
: 用作缓存的内存大小。
交换(swap)
si
: 从磁盘交换进内存的数据量。so
: 从内存交换到磁盘的数据量。
I/O
bi
: 从块设备接收到的数据块数量。bo
: 发送到块设备的数据块数量。
系统(system)
in
: 每秒发生的中断次数。cs
: 每秒上下文切换次数。
CPU
us
: 用户态时间占比。sy
: 内核态时间占比。id
: 空闲时间占比。wa
: 等待I/O操作完成的时间占比。
7 持续监控
当系统出现问题时,使用监控工具进行检查是很有帮助的。然而,对于那些在不观察时发生的问题,需要依赖持续监控工具。这类工具能够收集、报告并保存系统活动信息,便于后续分析。
安装sar
sar
用于对系统进行历史数据分析。首先,请确保已安装sysstat包,以便使用sar
。可以通过以下命令安装:
1 |
|
设置数据收集
通常,在安装sysstat后,系统会自动开始收集数据。如果没有自动开启,可以通过修改/etc/default/sysstat
文件中的ENABLED
字段来启用数据收集功能。
使用sar
查看当天系统负载详情:
1
sudo sar -q
查看当天内存使用情况:
1
sudo sar -r
查看CPU使用情况:
1
sudo sar -P
要查看其他日期的数据,可以访问/var/log/sysstat/saXX
目录,其中XX
是要查看的日期。例如,查看2号的数据,可以使用如下命令:
1 |
|
8 定时任务(Cron Jobs)
cron是Linux中用于定时执行任务的工具。通过cron服务,可以在指定的时间自动运行程序,这对于需要每日或定期执行的脚本尤其有用。
例如,假设有一个位于/home/pete/scripts/change_wallpaper
的脚本,希望每天早晨用它来更换壁纸。但目前每次都需要手动执行这个脚本。此时,可以通过创建一个cron作业,在指定时间自动执行该脚本。
以下是一个示例:
1 |
|
各字段从左至右分别表示:
- 分钟(0-59)
- 小时(0-23)
- 月份中的某一天(1-31)
- 月(1-12)
- 星期几(0-7),其中0和7均代表星期日
星号(*)表示匹配所有可能值。因此,上述示例将在每天的上午8:30执行。
要创建cron作业,只需编辑crontab文件:
1 |
|
这将打开当前用户的cron作业列表,可以在此添加新的作业。