监控服务器占用可保障服务稳定运行,及时发现资源瓶颈(如CPU、内存、磁盘、网络过载),预防宕机或性能下降,它有助于优化资源配置、控制成本、识别安全威胁(如异常活动),并确保业务连续性和用户体验。
服务器运行变慢了?网站加载卡顿?应用程序响应延迟?这些往往是服务器资源(如CPU、内存、磁盘、网络)达到瓶颈的信号,及时、准确地查看服务器资源占用情况,是系统管理员、开发人员乃至需要了解自身应用运行状况的用户必备的技能,本指南将详细介绍在不同操作系统环境下,如何有效地查看和分析服务器资源占用,帮助你快速定位问题根源。
- 性能优化: 识别资源消耗大户,为优化代码、配置或升级硬件提供依据。
- 故障排除: 快速诊断服务器卡顿、服务崩溃、响应缓慢的根本原因(是CPU爆满、内存耗尽还是磁盘IO瓶颈?)。
- 容量规划: 了解资源使用趋势,预测未来需求,合理规划服务器扩容或云资源调整。
- 成本控制: 避免为未充分利用的资源付费(尤其在云环境),或防止因资源不足导致业务损失。
- 安全保障: 发现异常的高资源占用进程,可能是恶意软件或入侵活动的迹象。
核心监控指标:
在查看服务器占用时,主要关注四大核心资源:
- CPU 使用率: 处理器处理任务的繁忙程度,持续接近100%通常意味着CPU是瓶颈。
- 内存 (RAM) 使用率: 包括已用内存、空闲内存、缓存/缓冲内存,需要关注的是实际可用内存是否紧张,以及是否有内存泄漏(使用率持续增长不释放)。
- 磁盘 I/O: 磁盘读写速度和操作频率,高磁盘使用率(%util)或长等待队列(await)会显著拖慢系统。
- 网络 I/O: 网络接口的流入和流出带宽,带宽饱和或高错误/丢包率会影响网络服务。
- 进程/服务: 具体是哪些进程或服务在消耗这些资源。
如何查看服务器占用(按操作系统):
Linux / Unix-like 系统 (如 CentOS, Ubuntu, Debian, Fedora)
Linux 提供了丰富的命令行工具,是服务器监控的基石。
-
top
命令 (实时进程监控)- 功能: 最常用、最基础的实时动态监控工具,显示系统摘要信息(负载、任务数、CPU、内存)和进程列表。
- 使用: 直接在终端输入
top
。 - 关键信息解读:
- 顶部区域 (系统摘要):
load average
: 系统负载(1分钟、5分钟、15分钟平均值),负载值接近或超过CPU核心数表示系统繁忙。%Cpu(s)
: CPU 使用率细分 (us
=用户空间,sy
=内核空间,ni
=低优先级用户,id
=空闲,wa
=等待I/O,hi
=硬件中断,si
=软件中断,st
=被虚拟机偷取)。KiB Mem
: 物理内存使用 (total
,free
,used
,buff/cache
)。注意: Linux会利用空闲内存做缓存(buff/cache
),这部分在应用需要时会被释放,所以通常看available
(可用内存) 更准确(较新top
版本显示)。KiB Swap
: 交换空间使用,频繁使用Swap表示物理内存严重不足,性能会急剧下降。
- 进程列表区域:
PID
: 进程ID。USER
: 进程所有者。%CPU
: 进程占用的CPU百分比。%MEM
: 进程占用的物理内存百分比。VIRT
: 进程使用的虚拟内存总量 (KB)。RES
: 进程使用的、未被换出的物理内存大小 (KB) – 常关注此项。SHR
: 共享内存大小 (KB)。TIME+
: 进程使用的总CPU时间。COMMAND
: 启动进程的命令行或程序名称。
- 顶部区域 (系统摘要):
- 交互操作 (在
top
运行时按键):P
(大写): 按CPU使用率排序。M
(大写): 按内存(RES)使用率排序。1
: 显示所有CPU核心的单独使用情况。k
: 终止指定PID的进程 (需谨慎!)。q
: 退出top
。
-
htop
命令 (增强版 top)- 功能:
top
的现代化替代品,提供彩色显示、更直观的布局、鼠标支持、垂直/水平滚动、树状视图查看进程关系等。强烈推荐安装使用。 - 安装 (如Ubuntu):
sudo apt install htop
- 使用: 输入
htop
,界面更友好,操作逻辑与top
类似(排序、筛选、杀进程等更方便)。
- 功能:
-
vmstat
命令 (虚拟内存统计)- 功能: 报告关于进程、内存、分页、块IO、陷阱(中断)和CPU活动的信息,擅长展示系统整体瓶颈,特别是内存和I/O。
- 使用:
vmstat [间隔秒数] [报告次数]
(vmstat 1 5
每秒报告一次,共5次)。 - 关键列解读 (输出通常有多列):
procs
:r
=运行队列长度(等待运行的进程数),b
=不可中断睡眠的进程数(通常与I/O相关)。memory
:swpd
=使用的交换空间大小,free
=空闲内存,buff
=用作缓冲的内存,cache
=用作缓存的内存。swap
:si
=每秒从磁盘读入swap的大小 (swap in),so
=每秒写入swap的大小 (swap out)。si/so
持续大于0是内存不足的强烈信号。io
:bi
=每秒从块设备接收的块数 (读磁盘),bo
=每秒发送到块设备的块数 (写磁盘),反映磁盘活动。system
:in
=每秒中断数(包括时钟中断),cs
=每秒上下文切换次数,过高可能表示进程争抢CPU激烈。cpu
:us
,sy
,id
,wa
,st
含义同top
。wa
(I/O等待)高是磁盘瓶颈的标志。
-
free
命令 (内存使用情况)- 功能: 快速查看系统物理内存和交换空间的使用情况。
- 使用:
free -h
(-h
选项以人类可读格式显示,如G, M)。 - 关键行解读:
total
: 总内存。used
: 已使用的内存 (包括被应用程序和缓存/缓冲占用的)。free
: 完全空闲的内存。shared
/buff/cache
: 共享内存 / 被内核缓冲和缓存使用的内存。available
: 最重要! 估算的、可供启动新应用程序而无需交换的内存,这是判断内存是否紧张的关键指标。
-
iostat
命令 (I/O 统计)- 功能: 监控系统磁盘I/O活动和CPU使用情况,特别擅长诊断磁盘瓶颈。
- 安装 (通常属于
sysstat
包):sudo apt install sysstat
(Ubuntu/Debian) /sudo yum install sysstat
(CentOS/RHEL) - 使用:
iostat -dx [间隔秒数] [报告次数]
(iostat -dx 1 3
)。-d
显示设备报告,-x
显示扩展统计。 - 关键扩展列解读 (针对每个磁盘设备如
sda
,nvme0n1
):%util
: 设备带宽利用率百分比(设备繁忙时间比率)。接近100%表示该设备I/O饱和,是瓶颈。r/s
,w/s
: 每秒读/写请求数。rkB/s
,wkB/s
: 每秒读/写数据量 (KB)。await
: 平均I/O请求等待时间(毫秒),包括队列等待和服务时间。值高表示设备慢或过载。aqu-sz
: 平均请求队列长度。值高也是设备饱和的信号。
-
df
命令 (磁盘空间占用)- 功能: 报告文件系统的磁盘空间使用情况。
- 使用:
df -h
(-h
人类可读格式),关注Use%
列,接近100%需要清理或扩容。 - 特别注意 inode 使用:
df -i
,磁盘空间没满但无法创建文件?可能是inode耗尽了(常见于存在大量小文件的系统)。
-
du
命令 (目录/文件空间占用)- 功能: 估算文件和目录的磁盘使用空间,用于定位具体哪个目录或文件占用了大量空间。
- 使用:
du -sh [目录路径]
(-s
总计,-h
人类可读)。du -sh /var/log
查看日志目录总大小。du -h --max-depth=1 /some/path
查看某路径下一级子目录的大小。
-
nethogs
命令 (按进程的网络流量)- 功能: 按进程实时显示网络带宽使用情况(需要root权限)。
- 安装:
sudo apt install nethogs
/sudo yum install nethogs
- 使用:
sudo nethogs [网络接口名]
(如sudo nethogs eth0
),直接显示哪些进程在消耗网络带宽。
-
iftop
命令 (按连接的网络流量)- 功能: 实时显示网络接口的带宽使用情况,按主机对(连接)进行排序(需要root权限)。
- 安装:
sudo apt install iftop
/sudo yum install iftop
- 使用:
sudo iftop -i [网络接口名]
(如sudo iftop -i eth0
),显示哪些IP地址之间的连接占用了大量带宽。
Windows Server 系统
Windows 提供了图形化工具和强大的命令行工具。
-
任务管理器 (Task Manager)
- 打开方式:
Ctrl+Shift+Esc
或Ctrl+Alt+Del
选择“任务管理器”。 - 功能:
- 进程 (Processes) 选项卡: 查看所有运行中进程的CPU、内存、磁盘、网络占用,可点击列标题排序。
- 性能 (Performance) 选项卡:
CPU
: 实时使用率图表、核心数、速度、进程/线程/句柄数。Memory
: 已用/可用内存、提交量、缓存、分页池/非分页池、速度、插槽使用。Disk
: 每个物理磁盘或分区的活动时间、读写速度、队列长度。Ethernet
/Wi-Fi
: 网络适配器的发送/接收速度、使用率。
- 用户 (Users) 选项卡: 查看不同登录用户会话的资源占用。
- 启动 (Startup) 选项卡: 管理开机自启动程序(影响启动速度和后台占用)。
- 优点: 直观易用,信息全面,是快速查看的首选。
- 打开方式:
-
资源监视器 (Resource Monitor)
- 打开方式: 在“任务管理器”的“性能”选项卡底部点击“打开资源监视器”,或运行
resmon
。 - 功能: 比任务管理器更详细、更强大的监控工具。
- 概述 (Overview) 选项卡: 汇总CPU、磁盘、网络、内存的关键指标和占用最高的进程。
- CPU 选项卡: 详细进程列表、关联句柄、关联模块(DLL)、服务关联,可查看每个进程的线程活动。
- 内存 选项卡: 进程内存使用详情(工作集、提交、硬错误/秒 – 硬错误高表示内存不足导致频繁调页)、物理内存使用情况。
- 磁盘 选项卡: 进程的磁盘活动(读写速度、响应时间)、磁盘活动队列、存储逻辑卷和物理磁盘的活动。
- 网络 选项卡: 进程的网络活动(发送/接收速度)、TCP连接、监听端口。是排查网络占用和端口占用的利器。
- 优点: 深度诊断的神器,能关联进程与资源(如哪个进程在读写哪个文件,哪个进程建立了哪个网络连接)。
- 打开方式: 在“任务管理器”的“性能”选项卡底部点击“打开资源监视器”,或运行
-
性能监视器 (Performance Monitor / perfmon)
- 打开方式: 运行
perfmon
。 - 功能: 最强大的内置监控工具,用于:
- 实时监控: 添加计数器(如
Processor(_Total)\% Processor Time
,Memory\Available MBytes
,PhysicalDisk(_Total)\% Disk Time
,Network Interface(*)\Bytes Total/sec
)到图表中实时查看。 - 数据收集器集: 创建自定义或使用系统自带的收集器集(如“System Diagnostics”),记录一段时间内的性能数据,生成报告用于事后分析。
- 性能警报: 设置当特定计数器超过阈值时触发警报(如CPU持续5分钟>90%时发邮件)。
- 实时监控: 添加计数器(如
- 优点: 极其灵活和强大,适合长期监控、基线建立和深度性能分析。
- 打开方式: 运行
-
PowerShell 命令
- 获取进程信息:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
(按CPU降序取前10进程) - 获取CPU使用率:
Get-Counter '\Processor(_Total)\% Processor Time'
(单次) 或Get-Counter '\Processor(_Total)\% Processor Time' -Continuous
(连续) - 获取内存信息:
Get-Counter '\Memory\Available MBytes'
(可用内存MB) /Get-Counter '\Memory\% Committed Bytes In Use'
(提交内存使用率) - 获取磁盘信息:
Get-Counter '\PhysicalDisk(_Total)\% Disk Time'
(磁盘活动时间百分比) /Get-Counter '\PhysicalDisk(_Total)\Avg. Disk Queue Length'
(平均磁盘队列长度) - 获取网络信息:
Get-NetAdapterStatistics | Select-Name, ReceivedBytes, SentBytes
(查看网卡总收发字节数) - 优点: 可编写脚本实现自动化监控和报告。
- 获取进程信息:
跨平台/高级监控方案
对于需要长期监控、历史数据分析、可视化、集中管理多台服务器或设置告警的场景,应考虑专业监控系统:
- 开源方案:
- Prometheus + Grafana: 当前最流行的组合,Prometheus负责抓取和存储时间序列指标,Grafana提供强大的可视化仪表盘。
- Zabbix: 成熟的企业级监控解决方案,功能全面(自动发现、监控项、触发器、告警、可视化、模板)。
- Nagios / Icinga: 经典的网络和服务监控系统,擅长基于插件进行服务状态检查(HTTP, SMTP, SSH等)和告警。
- 云服务商方案: AWS CloudWatch, Azure Monitor, Google Cloud Operations (原Stackdriver) 等,深度集成各自云平台资源,也支持监控本地或混合云资源。
- 商业方案: Datadog, New Relic, Dynatrace, SolarWinds Server & Application Monitor 等,提供开箱即用的丰富功能、高级分析和APM能力,通常按主机或功能收费。
最佳实践与建议:
- 建立基线: 在服务器正常运行期间记录资源使用的“正常”水平(基线),这样异常波动更容易被发现。
- 综合判断: 不要只看单一指标,高CPU使用率不一定有问题,但如果同时伴随高I/O等待(
wa
)或长运行队列(r
),则问题更严重,内存要重点看available
(Linux) 或Available MBytes
/Hard Faults/sec
(Windows)。 - 关注趋势: 瞬时峰值是正常的,持续的高占用或不断增长的趋势才是需要警惕的,利用历史监控数据(如
sar
命令或监控系统)分析趋势。 - 定位根源进程: 发现资源瓶颈后,使用
top
/htop
/ps
(Linux) 或 任务管理器/资源监视器 (Windows) 找出消耗资源最多的具体进程,分析该进程是否正常业务所需。 - 理解缓存/缓冲: Linux 会充分利用内存做磁盘缓存(
cache
)和缓冲(buffer
),这是提高性能的设计,这部分内存在应用程序需要时会被快速释放,不要看到used
高就惊慌,关键看available
或free + buff/cache
是否充足,以及swap
使用情况。 - 警惕内存泄漏: 如果某个进程的内存占用 (
RES
in Linux,Working Set
in Windows) 随时间持续、无限制地增长,即使没有新任务,这很可能是内存泄漏,需要修复程序。 - 磁盘空间与inode: 定期检查磁盘空间 (
df -h
) 和 inode 使用 (df -i
),设置告警阈值(如 >80%)。 - 利用专业工具: 对于生产环境,强烈建议部署专业的监控系统(如 Prometheus+Grafana, Zabbix),实现自动化、可视化、告警
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9220.html