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 亲和性
进程(Process):
线程(Thread):
# 查看所有进程 ps aux # 查看进程树 pstree -p # 实时监控进程 top # 更友好的进程监控 htop
# 查看特定进程 ps aux | grep java # 查看进程完整信息 ps -ef # 按资源使用排序 ps aux --sort=-%mem | head -10 ps aux --sort=-%cpu | head -10
# top 常用交互键 M - 按内存排序 P - 按 CPU 排序 k - 杀死进程 q - 退出 # htop 特性 F1 - 帮助 F4 - 过滤进程 F9 - 杀死进程 F10 - 退出
# 优雅地终止进程 kill -15 PID # 强制终止进程 kill -9 PID # 按名称杀死进程 killall java pkill -f "spring-boot-app"
# CPU 使用率和负载 top # 负载平均 uptime # CPU 统计 mpstat 1 5
# 实时监控 top -p PID # 查看特定进程 pidstat -p PID 1 # CPU 时间分布 time command
# 内存使用情况 free -h # 详细内存信息 cat /proc/meminfo # 进程内存使用 ps aux --sort=-%mem | head
# 进程内存详情 pmap -x PID # 内存映射 cat /proc/PID/maps # 内存统计 cat /proc/PID/status
# 实时监控 iostat -x 1 # 进程 I/O iotop # 查看进程 I/O pidstat -d 1
# 网络统计 netstat -s # 实时监控 ifstat # 进程网络使用 nethogs
# CPU 性能分析 perf top # 记录性能数据 perf record -p PID perf report # 火焰图生成 perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg
# 跟踪系统调用 strace -p PID # 统计系统调用 strace -c -p PID # 跟踪特定系统调用 strace -e trace=open,read,write -p PID
# 内存泄漏检测 valgrind --leak-check=full --show-leak-kinds=all ./program # 性能分析 valgrind --tool=callgrind ./program
# 查看进程优先级(NI 列) ps -eo pid,ni,cmd # 以特定优先级启动 nice -n 10 command # 调整运行中进程的优先级 renice -n 5 -p PID
优先级范围:
# 查看进程 CPU 亲和性 taskset -c -p PID # 设置进程 CPU 亲和性 taskset -c 0,1 command # 修改运行中进程的亲和性 taskset -p -c 0,1 PID
# 匿名管道 command1 | command2 # 命名管道 mkfifo /tmp/my_pipe cat > /tmp/my_pipe & cat < /tmp/my_pipe
# System V 消息队列 ipcs -q # 删除消息队列 ipcrm -q msqid
# 查看共享内存 ipcs -m # 删除共享内存 ipcrm -m shmid
# 发送信号 kill -SIGUSR1 PID # 查看信号定义 kill -l # 捕获信号(在代码中) signal(SIGTERM, handler);
# /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
# /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
# CPU 瓶颈 top -p PID mpstat 1 # 内存瓶颈 free -h vmstat 1 # I/O 瓶颈 iostat -x 1 iotop # 网络瓶颈 netstat -s iftop
# 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
# 实时监控 glances # 性能监控 atop # 历史数据 sar -u 1 10
# 系统日志 journalctl -u myapp -f # 应用日志 tail -f /var/log/myapp/app.log # 错误日志 grep ERROR /var/log/myapp/app.log
Linux 进程管理是系统运维的核心技能:
记住:没有银弹,根据实际情况选择合适的工具和策略!