第12章 监视系统资源
所属:第四部分 环境 来源:Linux命令速查手册
系统运行状况如何?进程、内存、磁盘、打开的文件……本章介绍监控系统资源的常用命令。
12.1 查看当前正在运行的所有进程
ps aux
ps -ef查看系统中所有运行的进程。
常用参数
a- 所有用户的进程u- 显示用户/所有者信息x- 包括没有控制终端的进程-e- 所有进程(同a)-f- 完整格式输出
ps aux 输出列说明
| 列 | 含义 |
|---|---|
| USER | 进程所有者 |
| PID | 进程ID |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小(KB) |
| RSS | 物理内存大小(KB) |
| TTY | 终端 |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | 累计CPU时间 |
| COMMAND | 命令名 |
常见进程状态
| 状态 | 含义 |
|---|---|
| R | 运行中 |
| S | 睡眠(等待) |
| D | 不可中断睡眠(通常IO等待) |
| Z | 僵尸进程 |
| T | 停止/暂停 |
| s | 会话首进程 |
| l | 多线程 |
| + | 前台进程组 |
12.2 查看进程树
pstree
ps auxf
ps -ejH以树状结构显示进程父子关系,直观看到谁启动了谁。
12.3 查看特定用户拥有的进程
ps -u username
ps -U username查看指定用户的所有进程。
12.4 终止正在运行的进程
kill pid
kill -9 pid # 强制终止(SIGKILL)
kill -TERM pid # 优雅终止(SIGTERM,默认)
kill -HUP pid # 挂起信号,常用于重载配置向进程发送信号终止它。
常用信号
| 信号 | 编号 | 名称 | 作用 |
|---|---|---|---|
| 1 | HUP | 挂起 | 重新加载配置 |
| 2 | INT | 中断 | 同Ctrl+C |
| 9 | KILL | 强制杀死 | 不可忽略,立即终止 |
| 15 | TERM | 终止 | 默认,优雅退出 |
优先用
kill -15(默认),给进程保存数据的机会;实在不行再用kill -9强杀。
按名称杀进程
killall firefox
pkill firefox
pkill -f "python script.py"killall按精确名称pkill支持模糊匹配-f匹配完整命令行
12.5 查看正在运行的进程的动态更新列表
top
htop实时监控进程和系统资源,动态刷新。
top 常用快捷键
| 按键 | 功能 |
|---|---|
q | 退出 |
h | 帮助 |
k | 杀死进程 |
r | 调整优先级(renice) |
P | 按CPU排序(默认) |
M | 按内存排序 |
T | 按运行时间排序 |
1 | 显示每个CPU核心 |
u | 过滤指定用户 |
htop
更友好的增强版top,支持鼠标操作、颜色显示、树形视图等。需要额外安装。
12.6 列出打开的文件
lsof列出所有打开的文件(Linux中一切皆文件,包括网络连接、设备等)。
输出内容很多,通常配合过滤使用。
12.7 列出某个用户打开的文件
lsof -u username查看指定用户打开的所有文件。
12.8 列出正在使用特定文件的用户
lsof /path/to/file
lsof /var/log/syslog查看哪些进程在使用某个文件。
典型用途:卸载U盘时提示设备忙,用lsof找哪个进程占用了。
12.9 列出特定程序的进程
lsof -c program_name
pidof program_name
pgrep program_name按程序名查找相关进程。
查看端口占用
lsof -i :80
netstat -tlnp | grep :80
ss -tlnp | grep :80查看哪个进程占用了某个端口。
12.10 显示系统RAM的信息
free
free -h # 人类可读格式
free -m # 以MB为单位
free -g # 以GB为单位查看内存使用情况:总内存、已用、空闲、缓存、可用。
输出列说明
| 列 | 含义 |
|---|---|
| total | 总内存 |
| used | 已使用 |
| free | 完全空闲 |
| shared | 共享内存 |
| buff/cache | 缓冲区和缓存 |
| available | 实际可用(应用程序可获得的) |
Linux会尽量用空闲内存做缓存提升性能,所以free少不代表内存不够,看 available 更准确。
12.11 显示文件系统的磁盘使用情况
df
df -h # 人类可读
df -T # 显示文件系统类型
df -i # 显示inode使用情况查看各分区的磁盘空间使用情况。
输出列说明
| 列 | 含义 |
|---|---|
| Filesystem | 文件系统/设备 |
| Size | 总大小 |
| Used | 已用 |
| Avail | 可用 |
| Use% | 使用率 |
| Mounted on | 挂载点 |
inode满了也会导致无法创建新文件,即使磁盘还有空间。用
df -i查看。
12.12 报告目录使用的文件空间
du
du -h
du -sh directory/查看目录/文件占用的磁盘空间大小。
- 默认递归显示每个子目录
- 单位默认是KB
12.13 只报告目录使用的总空间
du -sh directory/
du --summarize --human-readable directory/只显示总计,不列子目录。
常用组合
# 当前目录下各子目录大小排序
du -sh */ | sort -h
# 找最大的10个文件/目录
du -ah /path | sort -rh | head -1012.14 小结
系统监控命令速查
| 类别 | 命令 | 用途 |
|---|---|---|
| 进程 | ps aux | 查看所有进程快照 |
| 进程 | top / htop | 实时监控进程 |
| 进程 | pstree | 进程树 |
| 杀进程 | kill / killall / pkill | 终止进程 |
| 内存 | free -h | 内存使用情况 |
| 磁盘 | df -h | 各分区空间使用 |
| 磁盘 | du -sh | 目录大小统计 |
| 文件 | lsof | 打开的文件/端口 |
排错常用组合
# 谁占CPU最高
top
# 谁占内存最多
ps aux --sort=-%mem | head
# 哪个目录最大
du -sh /* | sort -h
# 端口被谁占用
lsof -i :8080
ss -tlnp | grep 8080ps、top、df、du、lsof 是系统监控的五虎将,系统管理必备。