在Linux系统管理中,你是否曾经遇到过进程卡死、服务无法启动、或者系统资源占用过高的问题?
进程管理和系统服务管理是Linux系统管理的核心技能,掌握这些技能不仅能保证系统稳定运行,还能提高工作效率。
本文将详细介绍Linux进程管理和系统服务的核心命令和配置技巧,帮助你成为系统管理专家。
1. 进程查看工具
1.1 基础进程查看
ps命令查看进程:
# 查看当前用户的进程
ps
# 查看所有进程
ps -ef
# 查看进程树
ps -ef --forest
# 查看进程详细信息
ps -aux
top命令实时监控:
# 启动top命令
top
# 按CPU使用率排序
top -o cpu
# 按内存使用率排序
top -o mem
# 设置刷新间隔
top -d 5
htop命令交互式监控:
# 启动htop命令
htop
# 按CPU排序
F6 → CPU
# 按内存排序
F6 → MEM
# 杀死进程
F9 → kill
1.2 高级进程查看
pstree查看进程树:
# 查看进程树
pstree
# 显示PID
pstree -p
# 显示完整路径
pstree -a
pgrep进程查找:
# 查找进程
pgrep nginx
# 查找进程并显示PID
pgrep -l nginx
# 查找进程并显示详细信息
pgrep -fl nginx
systemctl查看服务:
# 查看所有服务
systemctl list-units
# 查看运行中的服务
systemctl list-units --state=running
# 查看失败的服务
systemctl list-units --state=failed
2. 进程管理命令
2.1 进程控制
kill命令终止进程:
# 终止进程
kill PID
# 强制终止进程
kill -9 PID
# 终止所有同名进程
killall nginx
# 按名称终止进程
pkill nginx
nice命令调整优先级:
# 以较高优先级启动进程
nice -n -5 command
# 以较低优先级启动进程
nice -n 5 command
# 修改已运行进程的优先级
renice -n 10 PID
nohup命令后台运行:
# 后台运行进程
nohup command > output.log 2>&1 &
# 查看后台进程
jobs
# 将后台进程调到前台
fg %1
# 将后台进程放到后台
bg %1
2.2 进程调度
screen会话管理:
# 创建新会话
screen -S session_name
# 查看所有会话
screen -ls
# 恢复会话
screen -r session_name
# 分离会话
screen -d session_name
# 退出会话
exit
tmux会话管理:
# 创建新会话
tmux new -s session_name
# 查看所有会话
tmux ls
# 附加会话
tmux attach -t session_name
# 分离会话
tmux detach
3. 系统服务管理
3.1 systemd基础
systemctl命令:
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 重新加载配置
systemctl reload nginx
服务状态查看:
# 查看服务状态
systemctl status nginx
# 查看服务详细信息
systemctl show nginx
# 查看服务日志
journalctl -u nginx
3.2 服务配置
服务文件管理:
# 创建服务文件
sudo nano /etc/systemd/system/myservice.service
# 启用服务
systemctl enable nginx
# 禁用服务
systemctl disable nginx
# 检查服务是否启用
systemctl is-enabled nginx
服务文件示例:
[Unit]
Description=My Custom Service
After=network.target
[Service]
Type=simple
User=nginx
Group=nginx
ExecStart=/usr/bin/mycommand
ExecReload=/usr/bin/mycommand --reload
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
3.3 服务依赖管理
依赖关系配置:
# 查看服务依赖
systemctl list-dependencies nginx
# 查看反向依赖
systemctl list-dependencies --reverse nginx
# 添加依赖关系
systemctl add-requires nginx.service network.target
服务启动顺序:
# 设置启动顺序
[Unit]
After=network.target
Before=nginx.service
[Service]
After=network.target network-online.target
Before=nginx.service
4. 进程调度优化
4.1 CPU调度
进程优先级调整:
# 查看进程优先级
ps -eo pid,ppid,cmd,pri,ni
# 调整进程优先级
renice -n -10 PID
# 设置实时优先级
chrt -f 50 PID
CPU亲和性设置:
# 查看CPU亲和性
taskset -cp PID
# 设置CPU亲和性
taskset -c 0-3 PID
# 绑定进程到特定CPU
taskset -c 1 command
4.2 内存管理
内存限制设置:
# 设置内存限制
ulimit -v 1048576 # 限制为1GB
# 设置进程内存限制
prlimit --as=1073741824 command
内存优化:
# 查看内存使用情况
free -h
# 查看内存详细信息
vmstat
# 查看内存映射
cat /proc/PID/maps
5. 资源占用优化
5.1 系统资源监控
资源监控工具:
# 监控CPU使用率
top
# 监控内存使用
free -h
# 监控磁盘I/O
iostat
# 监控网络I/O
netstat -i
资源使用分析:
# 分析CPU使用情况
sar -u
# 分析内存使用情况
sar -r
# 分析磁盘I/O情况
sar -b
# 分析网络使用情况
sar -n DEV
5.2 进程资源限制
资源限制设置:
# 设置进程资源限制
prlimit --cpu=300 --as=1073741824 command
# 设置文件描述符限制
ulimit -n 1024
# 设置进程数限制
ulimit -u 512
cgroups资源控制:
# 创建cgroup
sudo cgcreate -g cpu,memory:/mygroup
# 设置CPU限制
sudo cgset -r cpu.cfs_quota_us=100000 mygroup
# 设置内存限制
sudo cgset -r memory.limit_in_bytes=1G mygroup
# 运行进程
sudo cgexec -g cpu,memory:mygroup command
6. 服务自动重启配置
6.1 服务重启策略
重启策略配置:
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/mycommand
Restart=always # 总是重启
RestartSec=10 # 重启间隔
RestartPreventExitStatus=1 # 不重启的状态码
[Install]
WantedBy=multi-user.target
重启条件设置:
# 设置重启条件
Restart=on-failure # 失败时重启
Restart=on-abnormal # 异常时重启
Restart=on-watchdog # 看门狗超时时重启
Restart=on-success # 成功时重启
6.2 服务健康检查
健康检查配置:
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/mycommand
ExecStartPost=/usr/bin/health_check.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
健康检查脚本:
#!/bin/bash
# 健康检查脚本
if pgrep -f "mycommand" > /dev/null; then
exit 0
else
exit 1
fi
7. 进程卡死处理
7.1 进程状态分析
进程状态查看:
# 查看进程状态
ps -eo pid,stat,cmd
# 查看进程详细信息
cat /proc/PID/status
# 查看进程调用栈
cat /proc/PID/stack
进程状态分析:
# 查看僵尸进程
ps -eo pid,stat | grep Z
# 查看睡眠进程
ps -eo pid,stat | grep D
# 查看停止进程
ps -eo pid,stat | grep T
7.2 进程终止方法
强制终止进程:
# 强制终止进程
kill -9 PID
# 终止进程树
pkill -9 -P PID
# 终止所有同名进程
killall -9 nginx
进程调试:
# 使用strace调试
strace -p PID
# 使用gdb调试
gdb -p PID
# 使用ltrace调试
ltrace -p PID
8. 系统性能监控
8.1 系统监控工具
系统监控命令:
# 查看系统负载
uptime
# 查看CPU使用率
top
# 查看内存使用
free -h
# 查看磁盘使用
df -h
# 查看网络连接
netstat -an
性能分析工具:
# 系统性能分析
dstat
# 磁盘I/O分析
iostat
# 网络性能分析
nethogs
# 进程性能分析
perf
8.2 性能调优建议
CPU调优:
# 调整CPU调度策略
echo "deadline" > /sys/block/sda/queue/scheduler
# 调整CPU频率
cpufreq-set -g performance
# 调整CPU亲和性
taskset -c 0-3 command
内存调优:
# 调整内存使用策略
echo "1" > /proc/sys/vm/swappiness
# 调整内存缓存
echo "50" > /proc/sys/vm/vfs_cache_pressure
# 调整内存分配策略
echo "0" > /proc/sys/vm/overcommit_memory
总结
Linux进程管理与系统服务管理是系统管理的核心技能,掌握这些技能不仅能保证系统稳定运行,还能提高工作效率。
关键要点回顾:
- 1. 进程查看:掌握ps、top、htop、pstree等查看工具
- 2. 进程控制:熟练使用kill、nice、nohup、screen等控制命令
- 3. 服务管理:掌握systemctl命令和服务配置
- 4. 资源优化:了解CPU调度、内存管理、资源限制等优化技巧