监控负载和进程:top、htop、atop
服务器上的每个活动进程都会产生负载,当服务器资源耗尽时,可能会引发各种问题,例如网站运行缓慢或脚本执行延迟。
有几款专用工具可用于分析服务器负载。我们将介绍其中三款:
- top
- htop
- atop
总的来说,它们彼此非常相似。htop 工具提供交互式界面,使用起来可能更方便。而 Top 则预装在 Linux 发行版中,无需单独安装。Atop 能够记录日志。
如果您的网站运行缓慢,还建议使用 Google 的 PageSpeed Insights 服务。该工具会分析页面加载速度,并提供网站优化建议。此外,还可以通过将 MySQL 临时文件目录移动到 tmpfs 来提升网站性能。
top
大多数 UNIX 系统都默认安装了 top 工具,您可以通过 SSH 连接到服务器并执行 top 命令来运行它。
top 的输出如下所示:
输出的上半部分显示系统信息,下方是进程列表。输出每 2 秒刷新一次,占用资源最多的进程会排在列表最上方。
系统信息
输出的左上角显示当前系统时间,接着是以下数据:
Up — 自上次系统重启以来经过的时间。
User — 当前用户数。
Load average — 服务器平均负载,显示最近一分钟、五分钟和十五分钟的数值。
Tasks — 处于各种状态的进程总数,例如 running(运行中)、sleeping(休眠)、stopped(已停止)和 zombie(僵尸),即等待父进程结束的子进程。
Cpu(s) — 执行进程所占用的 CPU 时间百分比,分为以下几类:
us — 用户进程(数值过高可能表明网站代码存在需要优化的问题)。
sy — 系统进程。
id — 空闲资源(该值越高越好)。
wa — 输入/输出操作,即磁盘操作。
Mem、Swap — 内存使用信息,包括 total(总量)、free(空闲量)和 used(已用量)。
进程信息
默认情况下,进程以表格形式显示,并按 CPU 使用率从高到低排序。
各列说明如下:
PID — 进程 ID;
USER — 启动该进程的用户;
PR — 进程优先级;
NI — 调整后的优先级(由用户通过 nice 命令设置);
VIRT — 虚拟内存大小(进程申请的内存量,即使实际使用的更少);
RES — 进程使用的物理内存大小(如果进程申请了 50 MB 内存,但只使用了 10 MB,则显示 10 MB);
SHR — 与其他进程共享的内存大小(即其他进程也可以使用的内存);
S — 进程状态(running — 运行中;sleeping — 休眠;zombie — 僵尸进程);
%CPU — CPU 时间使用百分比;
%MEM — 内存使用百分比;
TIME — 进程总运行时间;
COMMAND — 进程名称(启动该进程的命令)。
操作
使用 top 工具时可以使用以下按键:
空格键 — 刷新输出
M — 按内存使用排序
P — 按 CPU 负载排序(默认)
T — 按进程运行时间排序
A — 按各类资源的最大占用排序
u — 按用户名排序(需要输入用户名)
k — 结束进程(需要指定进程 ID,即 PID)
n — 更改输出中显示的进程数(需要指定所需数量)
c — 显示运行中进程的完整路径(COMMAND 列)
h — 显示帮助
q — 退出程序
htop
与 top 工具不同,htop 需要先在服务器上安装:
Ubuntu / Debian:
apt-get install htop
CentOS:
yum install htop
安装完成后运行:
htop
命令输出如下:
与 top 一样,上半部分显示系统信息,下方是进程列表。htop 中各列的含义与 top 相同(见上文说明)。
在左上方,您可以看到每个 CPU 核心的负载、内存使用量、进程数、最近 1、5 和 15 分钟的平均负载 (load average) 以及系统运行时间 (uptime)。
默认情况下,进程按 CPU 使用率从高到低排序。
要按内存使用量(或其他参数)排序,只需点击相应列的名称,例如 MEM。再次点击同一列即可反向排序(从低到高)。此外,您也可以像在 top 中一样使用 M(按内存排序)、P(按 CPU 排序)、T(按时间排序)键。
其他功能包括:
空格键 — 标记进程(可以标记多个进程,以便对它们执行批量操作,例如结束进程)。
u — 仅显示特定用户的进程。
可以使用 F1 – F10 键进行操作:
F1 — 显示帮助。
F2 — 显示设置(添加或删除列、在顶部显示附加信息及其他参数)。
F3 — 搜索进程。
F4 — 过滤进程(仅显示名称中包含特定文本的进程)。
F5 — 显示进程树(展示父进程与子进程之间的关系)。
F6 — 更改排序方式。
F7 / F8 — 提高或降低进程优先级。
F9 — 结束进程(与 top 不同,无需指定 PID — 只需选中进程并按 F9;按 Enter 确认结束,按 Esc 取消)。
F10 — 退出程序。
各按键的功能可能会因您所在的程序菜单而有所不同。可用的操作会显示在窗口底部,方便您使用该工具。
atop
atop 工具的主要特点是能够记录日志。这样不仅可以监控当前负载,还可以查看前几天进程的运行情况,有助于发现难以实时捕捉的间歇性错误。
使用该工具前,需要先在服务器上安装:
Ubuntu / Debian:
apt-get install atop -y
CentOS:
yum install atop -y
还建议将 atop 添加到开机自启动:
Ubuntu / Debian / CentOS 7:
systemctl enable atop
CentOS 6:
chkconfig atop on
Ubuntu 14.04:
rm /etc/init/atop.override
运行该工具:
atop
输出大致如下:
屏幕上半部分显示系统信息以及关键组件(CPU、核心、内存、网络)的负载情况。下方是进程列表。
可以使用以下按键控制输出:
m — 按内存使用排序
d — 按磁盘负载排序
u — 按用户显示负载
v — 显示进程详细信息
i — 更改数据刷新间隔(默认 10 秒)
g — 恢复默认输出
n — 按网络负载排序进程(需安装内核补丁)
与 Shift 组合的按键可以按相应参数对当前进程列表进行排序:
- Shift + m — 按内存使用排序
- Shift + c — 按 CPU 占用排序(默认)
- Shift + d — 按磁盘使用排序
- Shift + n — 按网络使用排序
atop 日志
默认情况下,atop 每 10 分钟记录一次系统状态信息,并将其保存到 /var/log/atop 目录下的日志文件中。
查看当天的日志:
atop -r
常用按键:
- t — 按时间向前移动
- Shift + t — 按时间向后移动
某一天的日志文件名为 atop_YYYYMMDD。要查看特定日期的日志,请使用 atop -r 命令并指定文件路径,例如:
atop -r /var/log/atop/atop_20200227
要更改日志记录设置,请编辑 atop 配置文件,其路径为 /etc/default/atop 或 /etc/sysconfig/atop(CentOS)。
# 服务器负载快照的记录间隔(秒):
INTERVAL=600
# 日志目录路径:
LOGPATH="/var/log/atop"
# 日志文件名
OUTFILE="$LOGPATH/daily.log"
例如,要将负载快照的记录间隔改为一分钟,请将间隔设为 60。
修改完成后,重启 atop:
systemctl restart atop.service