Linux 系统管理

进程简介

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源

进程管理的作用

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程

进程的查看

  • ps

    • ps aux 查看系统中所有进程,使用 BSD 操作系统格式
    • ps -le 查看系统中所有进程,使用 Linux 标准命令模式
    • 选项:
      • a 显示一个终端的所有进程,除了会话引线
      • u 显示进程的归属用户及内存的使用情况
      • x 显示没有控制终端的进程
      • -l 长格式显示。显示更加详细的信息
      • -e 显示所有进程,和 -A 作用一致
    • ps 命令输出
      • USER 该进程是由哪个用户产生的
      • PID 该进程的 ID 号
      • %CPU 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源
      • %MEN 该进程占用物理内存的百分比,占用越高,进程越耗费资源
      • VSZ 该进程占用虚拟内存大小,单位 KB
      • RSS 该进程占用实际物理内存的大小,单位 KB
      • TTY 该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端,tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端,? 代表内核运行
      • STAT 进程状态
        • R 运行
        • S 睡眠
        • T 停止状态
          • 位于后台
        • s 包含子进程
      • START 该进程的启动时间
      • TIME 该进程占用 CPU 的运算时间,注意不是系统时间
      • COMMAND 产生此进程的命令名
  • pstree

    • pstree [选项]
      • -p 显示进程的 PID
      • -u 显示进程的所属用户
  • top

    • top [选项]
    • top -b -n 1 > top.log 把每秒的 top 信息写进 top.log 文件中
    • 选项:
      • -d 秒数 指定 top 命令每隔几秒更新。默认是 3 秒
      • -b 使用批处理模式输出。一般和 “-n” 选项合用
      • -n 次数 指定 top 命令执行的次数。一般和 “-b” 选项合用
    • top 命令交互模式可以执行命令
      • ? 或 h 显示帮助
      • M 以内存使用率排序
      • P 以 CPU 使用率排序,默认此项
      • N 以 PID 排序
      • q 退出 top
    • top 参数意义
      • 第一行系统信息:
        • 12:26:46 系统当前时间
        • up 1 day,13:32 系统运行时间,本机已运行了 1 天 13 小时 32 分钟
        • 2 users 当前系统登录了用户
        • load average: 0.00,0.00,0.00 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于1时,负载较小。如果大于 1,系统已经超出负荷
      • 第二行进程信息:
        • Tasks: 95 total 系统中的进程总数
        • 1 running 正在运行的进程数
        • 94 sleeping 睡眠的进程
        • 0 stopped 正在停止的进程
        • 0 zombie 僵尸进程。如果不是 0,需要手工检查僵尸进程
      • 第三行 CPU 信息:
        • Cpu(s) 0.1%us 用户模式占用的 CPU 百分比
        • 0.1%sy 系统模式占用的 CPU 百分比
        • 0.0%ni 改变过优先级的用户进程占用的 CPU 百分比
        • 99.7%id 空闲 CPU 的 CPU 百分比
        • 0.1%wa 等待输入 / 输出的进程的占用 CPU 百分比
        • 0.0%hi 硬中断请求服务占用的 CPU 百分比
        • 0.1%si 软中断请求服务占用的 CPU 百分比
        • 0,0%st 虚拟时间百分比
      • 第四行内存信息:
        • Mem: 635344k total 物理内存的总量,单位 KB
        • 571504k used 已经使用的物理内存数量
        • 53840k free 空闲的物理内存数量
        • 65800k buffers 作为缓冲的内存数量
      • 第五行交换分区信息:
        • Swap: 524280k total 交换分区(虚拟内存)的总大小
        • Ok used 已经使用的交互分区的大小
        • 524280k free 空闲交换分区的大小
        • 409280k cached 作为缓存的交互分区的大小

杀死进程

  • kill
    • kill -l 查看可用的进程信号
    • kill -1 进程 ID 重启进程
    • kill -9 进程 ID 强制杀死进程
  • killall
    • killall [选项] [信号] 进程名
      • 选项:
        • -i 交互式,询问是否要杀死某个进程
        • -I 忽略进程名的大小写
  • pkill
    • pkill [选项] [信号] 进程名
      • 选项:
        • -t 终端号:按照终端号踢出用户
      • 用法:
        • pkill -9 -t tty1

修改进程优先级

Linux 操作系统是一个多用户、多任务的操作系统,Linux 系统中通知运行着非常多的进程。但是 CPU 在同一个时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序呢。

执行命令 ps -le 返回的结果中,PRI 代表 Priority,NI 代表 Nice。这两个值都是优先级,数字越少代表改进程优先级越高。

用户可以修改 NI 值,注意事项如下:

  • NI 值的范围是 -20 到 19
  • 普通用户调整 NI 值的范围是 0 到 19,而且只能调整自己的进程
  • 普通用户只能调高 NI 值,而不能降低,如原本 NI 值为0,则只能调整为大于 0
  • root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程
  • PRI(最终值)= PRI(原始值)+ NI
  • 用户只能修改 NI 的值,不能直接修改 PRI

修改进程优先级的命令如下:

  • nice
    • nice [选项] 命令 nice 的命令可以给新执行的命令直接赋予 NI 值,但是不能修改已经存在进程的 NI 值
      • 选项:
        • -n NI 值:给命令赋予 NI 值
      • 用法:
        • nice -n -5 service httpd start
  • renice
    • renice [优先级] 进程 ID renice 命令是修改已经存在进程的 NI 值的命令
      • 用法:
        • renice -10 2125

工作管理

工作管理指的是在单个登录终端中(也就是登录的 Shell 界面中)同时管理多个工作的行为

工作管理注意事项如下:

  • 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作
  • 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作
  • 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行

工作管理方法

1
2
3
4
5
# 把命令放入后台,并在后台执行
top &
# 按下 ctrl + z 快捷键,放在后台暂停
top
  • jobs
    • josb [选项]
      • 选项:
        • -l 显示工作的 PID
      • + 号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作;- 号代表倒数第二个放入后台的工作
  • fg
    • fg %工作号 将后台暂停的工作恢复到前台执行,注意 % 号可以省略,但是注意工作号和 PID 的区别
  • bg
    • bg %工作号 后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行

后台命令脱离登录终端执行的方法

  • 第一种方法是把需要后台执行的命令加入 /etc/rc.local 文件
  • 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令
  • 第三种方法是使用 nohup 命令

系统资源查看

  • vmstat
    • vmstat [刷新延时 刷新次数]
    • 用法:
      • vmstat 1 3
    • 参数:
      • procs:进程信息字段
        • r 等待运行的进程数,数量越大,系统越繁忙
        • b 不可被唤醒的进程数量,数量越大,系统越繁忙
      • memory:内存信息字段
        • free 空闲的内存容量,单位 KB
        • buff 缓冲的内存容量,单位 KB
        • cache 缓存的内存容量,单位 KB
        • swpd 虚拟内存的使用情况,单位 KB
        • 缓冲和缓存的区别:缓存是用来加速数据读取的,缓冲是用来加速数据写入的
      • swap:交换分区的信息字段
        • si 从磁盘中交换到内存中数据的数量,单位 KB
        • so 从内存中交换到磁盘中数据的数量,单位 KB。此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。
      • io:磁盘读写信息字段
        • bi 从块设备读入数据的总量,单位是块
        • bo 写到块设备的数据的总量,单位是块。此两个数越大,代表系统的 I/O 越繁忙
      • system:系统信息字段
        • in 每秒被中断的进程次数
        • cs 每秒进行的事件切换次数。此两个数越大,代表系统与接口设备的通信非常繁忙
      • CPU:CPU 信息字段
        • us 非内核进程消耗 CPU 运算时间的百分比
        • sy 内核进程消耗 CPU 运算时间的百分比
        • id 空闲 CPu 的百分比
        • wa 等待 I/O 所消耗的 CPU 百分比
        • st 被虚拟机消耗的 CPU 百分比
  • dmesg
    • dmesg 显示系统内核信息
  • free
    • free [选项] 查看内存使用状态
      • 选项:
        • -\b 以字节为单位显示
        • -\k 以 KB 为单位显示,默认就是以 KB 为单位显示
        • -\m 以 MB 为单位显示
        • -\g 以 GB 为单位显示
      • 参数:
        • 第一行:total 是总内存数,used 是已经使用的内存数,free 是空闲的内存数,shared 是多个进程共享的内存总数,buffers 是缓冲内存数,cached 是缓存内存数。默认单位是 KB
        • 第二行:-/buffers/cache 的内存数,相当于第一行的 used-buffers-cached。+/buffers/cache 的内存数,相当于第一行的 free + buffers + cached
        • 第三行:total 是 swap 的总数;used 是已经使用的 swap 数,free 是空闲的 swap 数。默认单位是 KB
  • cat /proc/cpuinfo
    • 查看 CPU 信息
  • uptime
    • 显示系统的启动时间和平均负载,也就是 top 命令的第一行。
  • uname
    • uname [选项]
      • 选项:
        • -a 查看系统所有相关信息
        • -r 查看内核版本
        • -s 查看内核名称
  • file /bin/ls
    • 查看系统操作位数
  • lsb_release -a
    • 查询当前 Linxu 系统的发行版本
  • lsof
    • lsof [选项]
      • 选项:
        • -c 字符串:只列出以字符串开头的进程打开的文件
        • -u 用户名:只列出某个用户的进程打开的文件
        • -p PID:列出某个 PID 进程打开的文件
      • 例子:
        • lsof | more
        • lsof /sbin/init
        • lsof -c httpd
        • lsof -u root