1. 进程管理
1.1 后台管理
后台管理是进程管理的重要组成部分,允许用户将任务置于后台运行,从而释放前台资源供其他操作使用。
软件后台运行方法
软件后台运行方法 | 描述 | 应用场景 |
---|---|---|
命令& | 将命令附加一个&符号,使其直接进入后台运行 | 适用于大多数情况下的简单任务 |
nohup命令 | 使用nohup命令可以让程序忽略挂断信号,即使用户登出也不会影响程序运行 | 当需要记录输出到文件时非常有用,默认输出文件为nohup.out |
Ctrl+Z + bg | 先按下Ctrl+Z暂停当前命令,再输入bg让其继续在后台执行 | 对于那些无法通过Ctrl+C正常结束的任务特别有效 |
screen命令 | 创建一个持久化的虚拟终端环境,提供更稳定的后台运行方式 | 需要长时间运行的任务,如服务器部署 |
实例演示
以sleep 999 &
为例,这条命令会让sleep
命令在后台运行999秒。通过jobs
命令可以查看所有手动移至后台的任务列表,其中每个任务前面都有一个编号,表示这是第几个被移到后台的任务。例如:
[root@oldboy83-prod ~]# sleep 999 &
[1] 1728
这里[1]
表示这是第一个被放到后台的任务,而1728
则是该任务对应的进程ID(PID)。接下来可以通过ps aux | grep 1728
验证这个进程是否真的进入了后台。
nohup命令详解
nohup
命令不仅能让命令在后台运行,还能确保命令的输出不会因为终端关闭而丢失。默认情况下,输出会被重定向到名为nohup.out
的文件中。如果希望将输出保存到另一个文件,可以通过重定向的方式指定输出路径。例如:
nohup ping baidu.com > lidao-new.txt &
这行命令会不停地向百度发送ICMP请求,并把结果保存到lidao-new.txt
文件里。
screen命令介绍
screen
是一个强大的工具,它可以创建一个持久化的虚拟终端环境,即使网络连接中断,命令也能继续运行。下面是如何使用screen
的一个简单例子:
- 安装
screen
:yum install -y screen
- 启动一个新的
screen
会话:screen
- 在新窗口内执行任意命令,比如
ping baidu.com
- 按下
Ctrl+A
然后按D
键,暂时离开当前screen
会话而不影响内部命令的执行 - 查看所有活动的
screen
会话:screen -ls
- 回归某个特定的
screen
会话:screen -r <session-id>
1.2 终止进程的命令
除了启动和管理进程外,了解如何安全地终止不必要或异常的进程同样重要。为此,介绍了三种常用的“杀手”命令——kill
、pkill
和killall
。
- kill: 默认发送SIGTERM信号给指定的进程ID,要求进程正常终止。如果需要强制终止,则可以使用
kill -9 <pid>
发送SIGKILL信号。然而,对于数据库等关键应用,应谨慎使用kill -9
,因为它可能导致数据损坏。 - pkill: 根据进程名称模糊匹配来发送信号给多个符合条件的进程。这对于清理一批相似的服务非常有帮助。
- killall: 类似于
pkill
,但它只匹配完全符合给定名称的进程。因此,在处理同名进程时更加精准。
1.3 负载管理
负载是指单位时间内系统处于可运行状态(R, S)和不可中断状态(D)的平均进程数,即活跃进程的数量。它是衡量系统繁忙程度的关键指标之一。
负载概述
- 平均负载: 表示过去1分钟、5分钟和15分钟内的平均负载值。通常,这三个数值越接近CPU核心总数,表明系统的负载越高。
- 预警阈值: 当负载达到CPU核心数的70%-80%时,建议采取预防措施以避免潜在的问题发生。
- 恢复策略: 如果意外退出了
screen
会话,可以通过screen -r
命令重新连接到之前的会话;若想彻底结束某次会话,则可以在screen
内部按Ctrl+D
。
负载高时的排查流程
一旦监测到系统负载过高,需迅速判断是由CPU还是I/O引起的问题。具体步骤如下:
- CPU高: 在
top
命令输出中观察us
(用户占用CPU)和sy
(系统占用CPU)的比例。如果这两个值很高,可能是某些进程占用了过多的CPU资源。此时可以使用ps aux
命令过滤出占用CPU较高的进程。 - I/O高: 若
wa
(IOWAIT,磁盘I/O等待时间)显著增加,则可能是因为磁盘I/O成为了瓶颈。这时可以借助iotop -o
命令来定位造成I/O压力的具体进程。
高级排查技巧
对于复杂的情况,还可以使用诸如dd
这样的命令模拟生成大文件,以便测试磁盘读写速度。例如:
dd if=/dev/zero of=/tmp/big bs=1M count=500
这段代码的意思是从/dev/zero
设备中读取零字节流,每次读取1MB的数据块,总共复制500次,最终形成一个大约500MB大小的文件存放在/tmp/big
位置。