当前位置: 首页 > news >正文

Linux小课堂: 系统监控与进程管理之深入解析 w、ps 与 top 命令

系统负载与多任务环境下的监控需求

在现代操作系统中,Linux 作为典型的多用户、多任务系统,允许多个用户通过本地或远程方式同时登录并运行大量程序。这种高并发能力带来了高效性,但也引入了资源竞争和系统过载的风险。当系统响应变慢甚至卡顿时,管理员必须快速定位问题根源——是哪个用户?哪个进程?消耗了多少 CPU 或内存?

为此,Linux 提供了一系列强大的命令行工具用于实时监控系统活动。本文将围绕 wpstop 三大核心命令展开详尽分析,结合技术细节、输出解读以及 NestJS + TypeScript 的实际代码模拟场景,帮助你构建完整的系统监控知识体系。

w 命令:全面掌握当前登录用户及其行为


1 ) 功能概述

w 命令(全称:who + what)用于显示当前登录系统的用户列表,并展示他们在执行什么任务、已空闲多久、CPU 使用情况等关键信息

该命令输出分为两部分:

  • 第一行:系统摘要信息(时间、运行时长、登录用户数、负载平均值)
  • 后续行:每个终端会话的详细信息

2 ) 输出结构解析

$ w07:26:44 up 24 min,  2 users,  load average: 0.77, 0.26, 0.12USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAToscarl   :0       :0               07:02    ?xdm?  38:12   0.00s /usr/lib/gnome-session-binary --session gnome-classicoscarl   pts/0    :0               07:17    3.00s  0.22s  0.06s w

第一行字段解释:

字段含义
07:26:44当前系统时间
up 24 min系统已连续运行 24 分钟(即 uptime)
2 users当前有 2 个用户会话正在连接
load average: 0.77, 0.26, 0.12过去 1分钟、5分钟、15分钟内的平均负载
  • 当前时间:如 07:26:44,表示命令执行时刻。
  • 系统运行时间(uptime):紧随其后的 up 24 minutes 表示自上次启动以来已连续运行 24 分钟。该值可通过独立命令 uptime 获取,二者输出一致。
  • 登录用户数:显示 2 users,即当前有两位用户会话处于活跃状态。
  • 负载平均值(Load Average):三个数值分别代表过去 1分钟、5分钟、15分钟内系统的平均活跃进程数,例如 0.77, 0.26, 0.12

重点说明:负载均值(Load Average)

  • 表示单位时间内处于可运行状态或不可中断睡眠状态的平均进程数。
  • 单核 CPU 负载 > 1 表示过载;四核 CPU 负载 > 4 才为过载。
  • 若长期高于 CPU 核心数,则表明系统存在性能瓶颈。

可通过 uptime 命令单独获取此信息:

$ uptime07:28:46 up 26 min,  2 users,  load average: 0.68, 0.30, 0.14 

为了更直观地观察负载变化趋势,可使用 tload 命令绘制 ASCII 负载曲线图:

$ tload

此命令以图形化方式展示负载随时间的变化,横轴为时间,纵轴为负载值,适合终端环境下进行初步性能诊断

用户活动列表:终端、IP、空闲时间与进程消耗

后续各行展示每个登录会话的详细信息,共八列:

列名含义说明
USER登录用户名(如 oscar
TTY终端设备名:
- :0 表示图形界面本地终端(对应 tty1
- pts/0, pts/1 等为伪终端(Pseudo-Terminal Slave),由 GUI 中打开的 Terminal 应用创建
- tty2, tty3 为 Ctrl+Alt+F2/F3 切换的虚拟控制台
FROM用户来源地址。本地登录显示 :0 或空白;远程 SSH 显示客户端 IP
LOGIN@用户登录系统的时间戳
IDLE当前端口最后一次交互距今时间(如 3s, 2:59
JCPU与该终端关联的所有进程累计使用的 CPU 时间
PCPU当前正在运行的进程所占用的 CPU 时间
WHAT当前运行的命令(进程名),如 w, bash, /usr/lib/gnome-session-binary

技术要点:

  • 同一用户可在多个终端登录,形成多个 TTY/PTS 会话
  • idle 列可用于判断用户是否离席,辅助安全审计
  • JCPUPCPU 可协助识别资源密集型会话

关键理解:

  • 负载值反映的是 正在使用或等待 CPU 的进程数量。若系统为单核 CPU,负载持续 >1 即表示过载
    双核则阈值为 2,依此类推
  • 高负载长时间存在往往预示性能瓶颈或异常进程

可通过如下 Shell 脚本结合 NestJS 定时任务监控负载趋势:

// src/monitor/system-monitor.service.ts
import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { exec } from 'child_process';@Injectable()
export class SystemMonitorService {private readonly logger = new Logger(SystemMonitorService.name);@Cron('*/30 * * * *') // 每30秒执行一次async checkSystemLoad() {exec('cat /proc/loadavg', (error, stdout) => {if (error) {this.logger.error(`Load check failed: ${error.message}`);return;}const [oneMin, fiveMin, fifteenMin] = stdout.trim().split(/\s+/).map(v => parseFloat(v));this.logger.log(`Load Avg: ${oneMin} (1m), ${fiveMin} (5m), ${fifteenMin} (15m)`);if (oneMin > 2) {this.logger.warn('⚠️ High system load detected!');}});}
}

3 ) TTY 与 PTS:理解终端类型

  • :0:图形界面终端(X Server 主终端),代表本地 GUI 会话
  • tty1, tty2…:虚拟控制台终端(Ctrl+Alt+F2~F6 切换)
  • pts/0, pts/1…:伪终端(Pseudo Terminal Slave),由 SSH 或图形终端模拟器创建

例如启动多个 GNOME Terminal 窗口,每个都会分配一个 pts/N 编号

可补充以下代码实现 TTY 活动分析:

// src/monitor/tty-analyzer.service.ts
import { Injectable } from '@nestjs/common';
import { execSync } from 'child_process';@Injectable()
export class TtyAnalyzerService {getActiveSessions(): Array<{user: string;tty: string;from: string;loginAt: string;idle: string;command: string;}> {try {const output = execSync('w -h', { encoding: 'utf-8' });return output.trim().split('\n').map(line => {const parts = line.trim().split(/\s+/);return {user: parts[0],tty: parts[1],from: parts[2],loginAt: parts[3],idle: parts[4],command: parts.slice(8).join(' '), // 命令可能含空格};});} catch (err) {console.error('Failed to fetch w output:', err);return [];}}
}

每个用户可通过多个 TTY 同时登录,且同一账户的不同终端将独立出现在 w 输出中

此外,who 命令可用于简化查询当前登录用户:

$ who
oscar    tty1         2025-04-05 07:02 (:0)
oscar    pts/0        2025-04-05 07:17 (:0)

其输出等价于 w 命令中除进程信息外的部分,适用于脚本化检测用户在线状态。

4 ) 实际应用场景

当你发现服务器响应缓慢时,可立即执行:

$ w

若看到某用户长时间运行高耗能脚本(如 find / -name "*.log"),即可联系其终止操作或限制资源

ps 命令:静态进程快照分析


1 ) 概念定义

ps(Process Status)命令提供某一时刻系统中所有进程的状态快照(snapshot)。它不会动态更新,适合配合管道进行筛选与排序

进程(Process)是已加载至内存并正在运行的程序实例。典型特征包括:

  • 每个进程拥有唯一的 PID(Process ID)
  • 可能衍生出多个子进程(如 Chrome 每标签页独立进程)
  • Web 服务(Apache、Nginx)、数据库(MySQL、PostgreSQL)常以多进程模式运行

基本语法格式如下:

ps [options]

常用选项组合包括:

  • ps aux
  • ps -ef
  • ps -u <username>
  • ps axjf

2 ) 常见用法及输出解析

2.1 ps(无参数)——仅限当前终端进程

$ psPID TTY          TIME CMD 
14806 pts/0    00:00:00 bash 
16939 pts/0    00:00:00 ps
  • PID:进程标识符
  • TTY:所属终端
  • TIME:累计 CPU 使用时间
  • CMD:启动命令名称

注意:此模式下无法查看系统级或其他会话中的进程
仅显示当前 shell 及子进程,无法查看其他终端或系统级进程

2.2 ps -ef —— 全系统进程列表(传统 Unix 风格)

$ ps -ef
UID        PID  PPID C STIME TTY          TIME CMD
root         1     0 0 07:02 ?        00:00:01 /sbin/init
root         2     0 0 07:02 ?        00:00:00 [kthreadd]
root         3     2 0 07:02 ?        00:00:00 [ksoftirqd/0]
wang    14806     1 0 07:17 pts/0     00:00:00 /bin/bash
wang    16939 14806 0 07:26 pts/0     00:00:00 ps -ef

关键列说明:

输出包含以下字段:

字段含义
UID运行该进程的用户
PID进程 ID
PPID父进程 ID(Parent Process ID)
CCPU 使用占比(旧版)
STIME启动时间
TTY控制终端
TIMECPU 时间
CMD完整命令行

父子进程关系示例:

  • bash (PID=14806) 是由 init (PID=1) 启动的
  • ps 命令是由 bash 创建的子进程(PPID=14806)。

建议使用分页查看:

$ ps -ef | less 

示例代码解析进程树结构:

// src/process/process-parser.service.ts
import { Injectable } from '@nestjs/common';
import { execSync } from 'child_process';interface ProcessInfo {uid: string;pid: number;ppid: number;tty: string;cmd: string;
}@Injectable()
export class ProcessParserService {getAllProcesses(): ProcessInfo[] {const output = execSync('ps -eo uid,pid,ppid,tty,cmd --no-headers', {encoding: 'utf-8',});return output.trim().split('\n').map(line => {const match = line.match(/^\s*(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(.*)$/);if (!match) return null;return {uid: match[1],pid: parseInt(match[2], 10),ppid: parseInt(match[3], 10),tty: match[4],cmd: match[5].trim(),};}).filter(Boolean) as ProcessInfo[];}getProcessTree(): Record<number, ProcessInfo[]> {const processes = this.getAllProcesses();const tree: Record<number, ProcessInfo[]> = {};processes.forEach(proc => {const parentPid = proc.ppid;if (!tree[parentPid]) tree[parentPid] = [];tree[parentPid].push(proc);});return tree;}
}

2.3 ps aux —— BSD 风格,含资源使用率

$ ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 123456  7890 ?        Ss   07:02   0:01 /sbin/init
oscarl   14806  0.0  0.2 234567 12345 pts/0    Ss   07:17   0:00 /bin/bash
...

新增重要字段:

字段含义
%CPUCPU 占用百分比
%MEM内存占用百分比
VSZ虚拟内存大小(KB)
RSS物理内存驻留集大小(KB)
STAT进程状态码(S=睡眠,R=运行,Z=僵尸等)

2.4 按用户过滤:ps -u username

$ ps -u oscarl

列出指定用户启动的所有进程。

2.5 树形结构显示:ps -efHps axjfpstree

-H 参数使输出以缩进形式体现父子关系
更直观的方式是使用 pstree 命令,可视化整个进程层级

$ ps axjfPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND0     2     0     0 ?           -1 S        0   0:00 [kthreadd]2     3     0     0 ?           -1 I<       0   0:00  \_ [rcu_gp]2     4     0     0 ?           -1 I<       0   0:00  \_ [rcu_par_gp]
...

缩进表示父子关系。更清晰的方式是使用 pstree

$ pstree -p
systemd(1)├─ModemManager(1234)│   └─{ModemManager}(1235)├─NetworkManager(1236)│   ├─dhclient(1237)│   └─{NetworkManager}(1238)└─gnome-session(14806)└─bash(14807)└─pstree(16940)

这有助于识别服务依赖链及异常进程嵌套

3 ) 结合管道实现高级查询

按 CPU 使用率排序:

$ ps aux --sort=-%cpu | head -10

--sort=-%cpu 表示按 CPU 使用率降序排列,head -10 显示前 10 条。

按内存使用排序:

$ ps aux --sort=-%mem | head -10 

综合排序(CPU + 内存)并取前十:

$ ps aux --sort=-%cpu,-%mem | head -10

ps aux 提供更丰富的资源指标列:

$ ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 169424 14840 ?        Ss   07:02   0:01 /sbin/init
oscar    14806  0.0  0.2  11308  5124 pts/0    Ss   07:17   0:00 /bin/bash 
firefox  15001  4.2 17.6 2100MB 140MB pts/0    Sl   07:20   2:15 /usr/lib/firefox/firefox

关键列包括:

  • %CPU:CPU 占用率
  • %MEM:内存占用率
  • VSZ:虚拟内存大小(KB)
  • RSS:物理内存驻留集大小(KB)
  • STAT:进程状态码(S=睡眠,R=运行,Z=僵尸等)

按资源使用排序:ps aux --sort=-%cpu--sort=-%mem

常用组合命令:

按 CPU 使用率降序
ps aux --sort=-%cpu | head -10 按内存使用率降序
ps aux --sort=-%mem | head -10综合排序:先按 CPU 再按内存
ps aux --sort=-%cpu,-%mem | head -10

此组合策略能快速锁定资源消耗大户,便于进一步排查或终止

4 ) 按用户过滤:ps -u [username]

仅查看特定用户的进程:

$ ps -u oscarPID TTY          TIME CMD
14806 pts/0    00:00:00 bash 
17012 pts/0    00:00:00 ps 

同理,ps -u root 可聚焦系统守护进程

实战代码演示:基于 NestJS + TypeScript 的进程监控服务


1 ) 方案1

以下是一个完整的 NestJS 微服务模块,用于定期采集系统进程数据、计算负载趋势
并对外暴露 REST API 接口

项目结构概览

/src /system-monitorsystem-monitor.controller.tssystem-monitor.service.tssystem-monitor.module.tsmain.ts

安装依赖

npm install @nestjs/common @nestjs/core @nestjs/platform-express rxjs child_process 

服务 system-monitor.service.ts

// src/system-monitor/system-monitor.service.ts 
import { Injectable } from '@nestjs/common';
import * as cp from 'child_process';@Injectable()
export class SystemMonitorService {/* 执行 shell 命令并返回 Promise<string>*/private execCommand(command: string): Promise<string> {return new Promise((resolve, reject) => {cp.exec(command, (error, stdout, stderr) => {if (error) return reject(error);if (stderr) console.warn('STDERR:', stderr);resolve(stdout.trim());});});}/* 获取系统基本信息(时间、运行时长、负载、登录用户)*/async getSystemStatus() {const uptimeRaw = await this.execCommand('uptime');const wRaw = await this.execCommand('w');// 解析 uptime 输出 const uptimeMatch = uptimeRaw.match(/up\s+(.+?),\s+(\d+)\s+user(s)?,\s+load average:\s+([\d.]+),\s+([\d.]+),\s+([\d.]+)/);if (!uptimeMatch) throw new Error('Unable to parse uptime output');const [, uptime, users, , load1, load5, load15] = uptimeMatch;return {current_time: new Date().toISOString(),uptime,users_logged_in: parseInt(users, 10),load_average: {'1m': parseFloat(load1),'5m': parseFloat(load5),'15m': parseFloat(load15),},raw_w_output: wRaw.split('\n'),};}/* 获取高资源占用进程(Top 10 by CPU & Memory)*/async getTopProcesses(limit = 10) {const header = await this.execCommand("ps aux --no-header -o user,pid,%cpu,%mem,vsz,rss,tty,stat,start,time,comm | head -1");const processesRaw = await this.execCommand(`ps aux --no-header -o user,pid,%cpu,%mem,vsz,rss,tty,stat,start,time,comm | sort -k3nr -k4nr | head -${limit}`);const lines = processesRaw.trim().split('\n').filter(Boolean);const parsed = lines.map(line => {const parts = line.trim().split(/\s+/);return {user: parts[0],pid: parseInt(parts[1], 10),cpu_percent: parseFloat(parts[2]),mem_percent: parseFloat(parts[3]),vsz_kb: parseInt(parts[4], 10),rss_kb: parseInt(parts[5], 10),tty: parts[6],stat: parts[7],start: parts[8],time: parts[9],command: parts.slice(10).join(' '), // 处理命令含空格的情况 };});return {total: parsed.length,processes: parsed,headers: ['USER', 'PID', '%CPU', '%MEM', 'VSZ', 'RSS','TTY', 'STAT', 'START', 'TIME', 'COMMAND']};}/* 获取树形进程结构(简化版)*/async getProcessTree() {const tree = await this.execCommand('pstree -p');return { process_tree: tree };}
}

控制器 system-monitor.controller.ts

// src/system-monitor/system-monitor.controller.ts
import { Controller, Get } from '@nestjs/common';
import { SystemMonitorService } from './system-monitor.service';@Controller('monitor')
export class SystemMonitorController {constructor(private readonly monitorService: SystemMonitorService) {}@Get('status')async getStatus() {return await this.monitorService.getSystemStatus();}@Get('processes/top')async getTopProcesses() {return await this.monitorService.getTopProcesses(10);}@Get('processes/tree')async getProcessTree() {return await this.monitorService.getProcessTree();}
}

模块system-monitor.module.ts

// src/system-monitor/system-monitor.module.ts
import { Module } from '@nestjs/common';
import { SystemMonitorController } from './system-monitor.controller';
import { SystemMonitorService } from './system-monitor.service';@Module({controllers: [SystemMonitorController],providers: [SystemMonitorService],
})
export class SystemMonitorModule {}

主入口 main.ts

// src/main.ts
import { NestFactory } from '@nestjs/core';
import { SystemMonitorModule } from './system-monitor/system-monitor.module';async function bootstrap() {const app = await NestFactory.create(SystemMonitorModule);await app.listen(3000);console.log('System Monitor API running on http://localhost:3000');
}
bootstrap();

启动与测试

npx nest start

访问接口:

  • GET http://localhost:3000/monitor/status
  • GET http://localhost:3000/monitor/processes/top
  • GET http://localhost:3000/monitor/processes/tree

返回示例(节选):

{"current_time": "2025-04-05T07:30:00.000Z","uptime": "28 min","users_logged_in": 2,"load_average": { "1m": 0.77, "5m": 0.26, "15m": 0.12 },"processes": [{"user": "oscarl","pid": 14806,"cpu_percent": 2.4,"mem_percent": 17.6,"command": "firefox"}]
}

2 )方案2

实现一个简易的系统监控模块,用于采集并暴露关键指标
功能目标:

  • 获取系统负载(loadavg
  • 列出高 CPU/MEM 占用进程(模拟 ps aux --sort
  • 支持 HTTP 接口查询

安装依赖

npm install child_process
若需定时任务:
npm install @nestjs/schedule
npm install rxjs

创建系统服务 (system.service.ts)

// src/system/system.service.ts
import { Injectable } from '@nestjs/common';
import * as childProcess from 'child_process';@Injectable()
export class SystemService {/* 执行 shell 命令并返回 Promise 结果*/private execCommand(command: string): Promise<string> {return new Promise((resolve, reject) => {childProcess.exec(command, (error, stdout, stderr) => {if (error) return reject(error);if (stderr) return reject(new Error(stderr));resolve(stdout.trim());});});}/* 获取系统负载(1/5/15 分钟)*/async getLoadAverage(): Promise<number[]> {const result = await this.execCommand('cat /proc/loadavg');return result.split(' ').slice(0, 3).map(v => parseFloat(v));}/* 获取系统运行时间(秒)*/async getUptime(): Promise<number> {const result = await this.execCommand('cat /proc/uptime');return parseInt(result.split(' ')[0], 10);}/* 获取 top N 个高 CPU 使用率进程*/async getTopCPUProcesses(limit = 10): Promise<any[]> {const cmd = `ps aux --sort=-%cpu | head -${limit + 1} | tail -n ${limit}`;const output = await this.execCommand(cmd);return this.parsePsOutput(output);}/* 获取 top N 个高内存使用率进程*/async getTopMemoryProcesses(limit = 10): Promise<any[]> {const cmd = `ps aux --sort=-%mem | head -${limit + 1} | tail -n ${limit}`;const output = await this.execCommand(cmd);return this.parsePsOutput(output);}/* 解析 ps 输出为结构化对象数组 */private parsePsOutput(output: string): any[] {const lines = output.trim().split('\n');const headers = lines[0].split(/\s+/);return lines.slice(1).map(line => {const values = line.split(/\s+/);const entry = {};headers.forEach((header, index) => {entry[header.toLowerCase()] = values[index];});return entry;});}
}

控制器接口 (system.controller.ts)

// src/system/system.controller.ts
import { Controller, Get } from '@nestjs/common';
import { SystemService } from './system.service';@Controller('system')
export class SystemController {constructor(private readonly systemService: SystemService) {}@Get('loadavg')async getLoadAvg() {const loadavg = await this.systemService.getLoadAverage();return { loadavg, unit: '1/5/15min' };}@Get('uptime')async getUpTime() {const seconds = await this.systemService.getUptime();const days = Math.floor(seconds / 86400);const hours = Math.floor((seconds % 86400) / 3600);return { uptime_seconds: seconds, formatted: `${days}d ${hours}h` };}@Get('top-cpu')async getTopCPU() {const processes = await this.systemService.getTopCPUProcesses(10);return { total: processes.length, processes };}@Get('top-mem')async getTopMEM() {const processes = await this.systemService.getTopMemoryProcesses(10);return { total: processes.length, processes };}
}

模块注册 (system.module.ts)

// src/system/system.module.ts
import { Module } from '@nestjs/common';
import { SystemController } from './system.controller';
import { SystemService } from './system.service';@Module({controllers: [SystemController],providers: [SystemService],
})
export class SystemModule {}

启动并测试

访问接口示例:

  • GET /system/loadavg → 返回 [0.77, 0.26, 0.12]
  • GET /system/top-cpu → 返回前 10 个高 CPU 进程
  • GET /system/top-mem → 返回前 10 个高内存进程

3 ) 方案3

集成至 NestJS 服务中进行资源告警 核心代码:

// src/alert/resource-alert.service.ts
import { Injectable, OnModuleInit } from '@nestjs/common';
import { execSync } from 'child_process';@Injectable()
export class ResourceAlertService implements OnModuleInit {private readonly cpuThreshold = 80;   // 百分比private readonly memThreshold = 70;async onModuleInit() {setInterval(() => this.checkResourceUsage(), 60000); // 每分钟检查}private checkResourceUsage() {try {const topCpuProc = execSync("ps aux --sort=-%cpu | awk 'NR==2{print $11, $3, $4}'", { timeout: 5000, encoding: 'utf-8' }).trim().split(' ');const [cmd, cpu, mem] = topCpuProc;const cpuVal = parseFloat(cpu);const memVal = parseFloat(mem);if (cpuVal > this.cpuThreshold) {console.warn(`🚨 High CPU: ${cmd} using ${cpuVal}%`);}if (memVal > this.memThreshold) {console.warn(`🚨 High Memory: ${cmd} using ${memVal}%`);}} catch (err) {console.error('Resource check error:', err.message);}}
}

动态进程监控:top 命令概述

尽管本文未展开 top 命令细节,但需强调其核心价值:提供实时刷新的动态进程视图,支持交互式操作(如按 P 排序 CPU、M 排序内存、k 终止进程)。

对比总结:

特性pstop
数据性质静态快照(Snapshot)动态更新
刷新机制手动执行自动刷新(默认 3 秒)
交互能力支持按键操作
资源开销极低较高
适用场景脚本化、日志记录实时排查、人工干预

说明与最佳实践


1 ) 负载过高时的应对策略

  • 使用 top 实时观察(见下文)
  • 查找异常进程:ps aux --sort=-%cpu | head -5
  • 终止进程:kill -9 <PID>pkill firefox
  • 设置资源限制:ulimit -v 1000000(限制虚拟内存)

2 ) 为什么 Linux 不需要频繁重启?

  • 内核热补丁支持(Live Patching)
  • 动态加载模块(Loadable Kernel Modules,LKM)

总结与核心要点提炼

本文系统梳理了 Linux 下三大核心监控命令的技术细节与应用场景:

工具类型核心用途
w静态快照查看登录用户、终端行为、系统负载
ps静态快照获取进程列表、父子关系、资源占用
top动态监控实时追踪 CPU/MEM 消耗最高的进程

在此基础上,通过 NestJS 后端服务封装,实现了将传统 Shell 能力转化为 RESTful API 的工程实践路径,为后续构建可视化监控平台(如 Grafana + Prometheus)打下坚实基础。

最终建议:

  • 在生产环境中应结合日志审计(auditd)、容器监控(cgroups)、系统调用跟踪(strace)等手段,形成多层次、立体化的系统可观测性架构
  1. w 命令是系统健康的第一道防线:快速掌握谁在登录、系统负载如何、是否存在异常空闲或活跃会话
  2. 负载平均值需结合 CPU 核心数解读:单核负载 >1 即过载,多核线性扩展判断标准
  3. ps 提供不可替代的静态进程视图:尤其适合脚本采集、自动化分析
  4. 合理利用 ps aux --sort 实现资源热点定位:精准识别占用 CPU 或内存最高的进程
  5. 父子进程关系决定系统稳定性:误杀父进程可能导致连锁崩溃,应优先终止叶子节点

所有命令均基于 POSIX 标准设计,适用于主流 Linux 发行版(Ubuntu、CentOS、Debian 等)。生产环境建议结合 htopglances 等增强工具提升可观测性

http://www.dtcms.com/a/509124.html

相关文章:

  • 一文解析软件项目管理:从核心概念到实战要点
  • 选择合适的电机试验平台的要点
  • 栅格系统做的网站怎么做手机app软件
  • 75.颜色分类
  • vue3知识点-setup返回值OptionsAPI以及其语法糖汇总
  • 专业的聊城做网站费用用凡科做网站的费用
  • 知道网站域名怎么联系免费网站模版
  • 蛋白表达标签:重组蛋白研究的精妙引擎
  • 网站建设广金手指排名番禺人才网招聿
  • 关于门户网站建设讲话酒庄企业网站
  • 建站公司联系电话wordpress 用户发帖
  • Nature Methods | GHIST vs LOKI:HE→表达的两条路径 | 单细胞级重建 vs spot级预测
  • 上海网站建设平台站霸网络多个网站给一个网站推广
  • 深圳的网站制作公司网站招聘怎么做
  • 网站建设推广渠道iis怎么做ip网站吗
  • Visual Basic 文件系统控件
  • Unity多层嵌套预设在SVN中的问题
  • 阳江房产网春天尚院wordpress seo设置
  • 如何做搞笑原创视频网站wordpress 4.7多用户
  • 怎么找网站帮我做推广网站怎么加内容
  • 肇庆网站seo外卖平台如何做推广效果好
  • 怎样创建公司网站wap网站模板下载
  • 19.map和set的封装
  • 【Python机器学习入门1】VSCode环境配置与Python基础
  • 网站建设的主要职责网站开发 接口还是ajax
  • 外贸独立站SEO技术架构深度优化指南
  • phython 做的网站怎样做网络营销推广
  • 旅游自媒体网站怎么做主页制作语言缩写
  • 金乡县网站开发中信建设有限责任公司历任董事长
  • 猿辅导Java面试真实经历与深度总结(二)