凌峰创科服务平台

linux 查看服务器进程

在Linux系统中,查看服务器进程是系统管理和运维中的基础操作,通过命令行工具可以高效获取进程的详细信息,包括进程ID、CPU占用、内存使用、启动时间等,以下是常用的进程查看方法及其详细说明。

linux 查看服务器进程-图1
(图片来源网络,侵删)

基础进程查看命令

  1. ps命令
    ps(Process Status)是最常用的进程查看工具,支持多种选项组合。

    • 静态快照ps默认显示当前终端的进程,如ps -efps aux可查看所有进程。
      • ps -ef:以标准格式显示进程,包含UID、PID、PPID、C(CPU占用)、STIME(启动时间)、CMD(命令)等字段。
      • ps aux:BSD格式,包含USER、PID、%CPU、%MEM、VSZ(虚拟内存大小)、RSS(物理内存大小)、STAT(进程状态)等字段。
    • 动态监控ps -ef --forest以树形结构显示进程层级关系,便于理解父子进程依赖。
  2. top命令
    top以动态刷新的方式实时显示进程信息,默认按CPU占用降序排列。

    • 交互操作:按P按CPU排序、M按内存排序、k终止进程、q退出。
    • 字段说明top界面包含系统整体信息(如运行时间、任务数、负载均衡)和进程列表,其中%CPU%MEM分别反映进程对CPU和内存的实时占用。
  3. htop命令
    htoptop的增强版,支持颜色区分、鼠标操作、进程树可视化等,需安装后使用(如apt install htopyum install htop)。

高级进程分析工具

  1. pgrep与pidstat

    linux 查看服务器进程-图2
    (图片来源网络,侵删)
    • pgrep:通过进程名、用户等条件筛选进程ID,如pgrep -u nginx查找nginx用户的所有进程。
    • pidstat:监控系统进程的资源使用,如pidstat -u -p 1234监控特定进程的CPU使用情况。
  2. lsof命令
    lsof(List Open Files)查看进程打开的文件、网络连接等,如lsof -i :80查看占用80端口的进程。

  3. systemctl命令
    对于systemd管理的服务,可通过systemctl status nginx查看服务进程状态及相关日志。

进程过滤与组合技巧

  1. grep结合使用
    通过管道将命令结果传递给grep,如ps aux | grep nginx筛选nginx相关进程,需注意grep自身也会出现在结果中,可通过grep [nginx]避免。

  2. awk字段提取
    使用awk处理特定字段,如ps aux | awk '{print $2, $11}'仅提取进程ID和命令名。

    linux 查看服务器进程-图3
    (图片来源网络,侵删)
  3. 进程状态标识
    进程状态(STAT字段)常见标识包括:

    • R:运行中
    • S:可中断睡眠
    • D:不可中断睡眠(通常等待I/O)
    • Z:僵尸进程(需手动清理)
    • T:已停止或 traced

进程资源监控与优化

  1. 内存与CPU分析

    • 使用free -h查看系统内存使用情况,结合ps aux --sort=-%mem按内存占用排序进程。
    • 对于CPU密集型进程,可通过top -p PID持续监控单个进程的CPU波动。
  2. 僵尸进程处理
    僵尸进程(状态为Z)已结束但未被父进程回收,需通过kill -9 PPID终止父进程或重启相关服务。

  3. 资源限制
    使用ulimit限制用户进程资源,如ulimit -u 1024限制最大进程数,或通过cgroups实现精细化控制。

实际应用场景示例

  1. 排查高负载问题
    top -n 1 | head -20  # 查看前20个高CPU占用进程
    ps aux --sort=-%cpu | head -10  # 按CPU占用排序前10名
  2. 查找异常进程
    ps aux | grep -v grep | grep "suspicious_command"  # 排除grep后查找可疑命令
  3. 监控服务进程
    while true; do
      if pgrep -x nginx > /dev/null; then
        echo "nginx is running"
      else
        echo "nginx is down" && systemctl start nginx
      fi
      sleep 10
    done

相关问答FAQs

Q1: 如何查看某个进程的启动时间?
A1: 使用ps -eo pid,lstart,cmd命令,其中lstart字段显示进程的启动时间,查看PID为1234的进程启动时间:ps -eo pid,lstart,cmd | grep 1234

Q2: 如何强制终止一个无响应的进程?
A2: 首先用ps aux | grep <进程名>找到进程PID,然后使用kill -9 PID强制终止,终止PID为5678的进程:kill -9 5678-9信号为SIGKILL,可强制结束进程,但可能导致数据丢失,建议优先尝试kill -15(SIGTERM)。

分享:
扫描分享到社交APP
上一篇
下一篇