Linux 进程管理与性能调优实战


文档摘要

Linux 进程管理与性能调优实战 进程基础 进程与线程 进程(Process): 资源分配的基本单位 独立的内存空间 进程间通信(IPC)开销大 线程(Thread): CPU 调度的基本单位 共享进程资源 轻量级,切换开销小 查看进程信息 进程管理命令 ps 命令 top/htop 命令 kill 命令 进程性能分析 CPU 使用率 查看整体 CPU 使用 查看进程 CPU 使用 内存使用 查看内存概况 进程内存分析 I/O 性能 磁盘 I/O 网络 I/O 性能调优工具 perf(性能分析) strace(系统调用跟踪) valgrind(内存分析) 进程调度与优先级 进程优先级 优先级范围: -20(最高优先级)到 19(最低优先级) 只有 root 可以设置负值 CPU 亲和性

Linux 进程管理与性能调优实战

进程基础

进程与线程

进程(Process)

  • 资源分配的基本单位
  • 独立的内存空间
  • 进程间通信(IPC)开销大

线程(Thread)

  • CPU 调度的基本单位
  • 共享进程资源
  • 轻量级,切换开销小

查看进程信息

# 查看所有进程 ps aux # 查看进程树 pstree -p # 实时监控进程 top # 更友好的进程监控 htop

进程管理命令

1. ps 命令

# 查看特定进程 ps aux | grep java # 查看进程完整信息 ps -ef # 按资源使用排序 ps aux --sort=-%mem | head -10 ps aux --sort=-%cpu | head -10

2. top/htop 命令

# top 常用交互键 M - 按内存排序 P - 按 CPU 排序 k - 杀死进程 q - 退出 # htop 特性 F1 - 帮助 F4 - 过滤进程 F9 - 杀死进程 F10 - 退出

3. kill 命令

# 优雅地终止进程 kill -15 PID # 强制终止进程 kill -9 PID # 按名称杀死进程 killall java pkill -f "spring-boot-app"

进程性能分析

1. CPU 使用率

查看整体 CPU 使用

# CPU 使用率和负载 top # 负载平均 uptime # CPU 统计 mpstat 1 5

查看进程 CPU 使用

# 实时监控 top -p PID # 查看特定进程 pidstat -p PID 1 # CPU 时间分布 time command

2. 内存使用

查看内存概况

# 内存使用情况 free -h # 详细内存信息 cat /proc/meminfo # 进程内存使用 ps aux --sort=-%mem | head

进程内存分析

# 进程内存详情 pmap -x PID # 内存映射 cat /proc/PID/maps # 内存统计 cat /proc/PID/status

3. I/O 性能

磁盘 I/O

# 实时监控 iostat -x 1 # 进程 I/O iotop # 查看进程 I/O pidstat -d 1

网络 I/O

# 网络统计 netstat -s # 实时监控 ifstat # 进程网络使用 nethogs

性能调优工具

1. perf(性能分析)

# CPU 性能分析 perf top # 记录性能数据 perf record -p PID perf report # 火焰图生成 perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg

2. strace(系统调用跟踪)

# 跟踪系统调用 strace -p PID # 统计系统调用 strace -c -p PID # 跟踪特定系统调用 strace -e trace=open,read,write -p PID

3. valgrind(内存分析)

# 内存泄漏检测 valgrind --leak-check=full --show-leak-kinds=all ./program # 性能分析 valgrind --tool=callgrind ./program

进程调度与优先级

1. 进程优先级

# 查看进程优先级(NI 列) ps -eo pid,ni,cmd # 以特定优先级启动 nice -n 10 command # 调整运行中进程的优先级 renice -n 5 -p PID

优先级范围

  • -20(最高优先级)到 19(最低优先级)
  • 只有 root 可以设置负值

2. CPU 亲和性

# 查看进程 CPU 亲和性 taskset -c -p PID # 设置进程 CPU 亲和性 taskset -c 0,1 command # 修改运行中进程的亲和性 taskset -p -c 0,1 PID

进程间通信(IPC)

1. 管道(Pipe)

# 匿名管道 command1 | command2 # 命名管道 mkfifo /tmp/my_pipe cat > /tmp/my_pipe & cat < /tmp/my_pipe

2. 消息队列

# System V 消息队列 ipcs -q # 删除消息队列 ipcrm -q msqid

3. 共享内存

# 查看共享内存 ipcs -m # 删除共享内存 ipcrm -m shmid

4. 信号(Signal)

# 发送信号 kill -SIGUSR1 PID # 查看信号定义 kill -l # 捕获信号(在代码中) signal(SIGTERM, handler);

守护进程

1. systemd 服务

# /etc/systemd/system/myapp.service [Unit] Description=My Application After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/myapp ExecStart=/usr/bin/java -jar /opt/myapp/app.jar Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
# 重载配置 systemctl daemon-reload # 启动服务 systemctl start myapp # 查看状态 systemctl status myapp # 开机自启 systemctl enable myapp

2. Supervisor

# /etc/supervisor/conf.d/myapp.conf [program:myapp] command=/usr/bin/java -jar /opt/myapp/app.jar directory=/opt/myapp user=appuser autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log

性能调优实战

1. 识别性能瓶颈

# CPU 瓶颈 top -p PID mpstat 1 # 内存瓶颈 free -h vmstat 1 # I/O 瓶颈 iostat -x 1 iotop # 网络瓶颈 netstat -s iftop

2. 优化策略

CPU 密集型应用

  • 多线程/多进程
  • CPU 亲和性绑定
  • 优先级调整

I/O 密集型应用

  • 异步 I/O
  • I/O 多路复用
  • 缓存优化

内存密集型应用

  • 内存池
  • 对象复用
  • 及时释放资源

3. 性能测试

# CPU 压测 stress --cpu 4 --timeout 60s # 内存压测 stress --vm 2 --vm-bytes 1G --timeout 60s # I/O 压测 stress --io 4 --timeout 60s # 综合压测 stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 60s

监控与告警

1. 系统监控

# 实时监控 glances # 性能监控 atop # 历史数据 sar -u 1 10

2. 日志分析

# 系统日志 journalctl -u myapp -f # 应用日志 tail -f /var/log/myapp/app.log # 错误日志 grep ERROR /var/log/myapp/app.log

最佳实践

  1. 监控优先:建立完善的监控体系
  2. 逐步优化:一次优化一个瓶颈
  3. 测试验证:每次优化后进行测试
  4. 文档记录:记录优化过程和结果
  5. 持续改进:定期回顾和优化

总结

Linux 进程管理是系统运维的核心技能:

  1. 理解进程:掌握进程生命周期和状态
  2. 性能分析:使用工具定位瓶颈
  3. 调优策略:根据场景选择合适的优化方法
  4. 监控告警:建立完善的监控体系
  5. 持续优化:性能优化是持续过程

记住:没有银弹,根据实际情况选择合适的工具和策略!


发布者: 作者: 转发
评论区 (0)
U