温馨提示×

linux进程如何优化

小樊
36
2026-07-10 06:01:04
栏目: 智能运维

Linux 进程优化是一个系统工程,涉及 CPU、内存、I/O、调度策略、系统配置和代码本身。下面从「系统层面 + 应用层面」给你一个实用、可落地的优化思路。


一、先明确:你在优化什么?

先搞清楚瓶颈在哪,再动手:

top / htop        # 看 CPU / 内存 / 负载
vmstat 1          # 系统整体性能
iostat -x 1       # 磁盘 I/O
pidstat -u -r -d 1
perf top          # CPU 热点
strace -c -p PID  # 系统调用分析

常见瓶颈:

  • CPU 打满(计算型)
  • 内存不足 / 频繁 swap
  • I/O 阻塞(磁盘 / 网络)
  • 上下文切换过多
  • 锁竞争 / 阻塞系统调用

二、进程级优化(针对单个进程)

1. CPU 亲和性(绑核)

避免进程在 CPU 之间迁移:

taskset -c 0,1 ./app

或代码中:

#define _GNU_SOURCE
#include <sched.h>

cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(0, &set);
sched_setaffinity(0, sizeof(set), &set);

✅ 适合:

  • 高并发服务
  • DPDK / 数据库 / 实时任务

2. 调整进程优先级(nice / renice)

nice -n -10 ./app
renice -n -10 -p PID
nice 值 含义
-20 最高优先级
0 默认
19 最低

⚠️ 非 root 不能提高优先级


3. 使用合适的调度策略

chrt -f -p 99 PID     # 实时 FIFO
chrt -r -p 50 PID     # 实时 RR

编程方式:

struct sched_param param = { .sched_priority = 50 };
sched_setscheduler(0, SCHED_RR, &param);

✅ 适合:

  • 实时系统
  • 低延迟服务

❌ 不建议普通业务进程使用


三、内存优化

1. 减少内存碎片 & 大页

cat /proc/meminfo | grep Huge

开启大页(适合数据库 / JVM / DPDK):

echo 1024 > /proc/sys/vm/nr_hugepages

2. 避免频繁 malloc / free

  • 使用内存池
  • 对象复用
  • 预分配

3. 减少 swap

sysctl vm.swappiness=10

检查:

free -h

四、I/O 优化

1. 使用异步 I/O

  • io_uring(推荐)
  • epoll(网络)
  • aio

2. 调整 I/O 调度器

cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler

3. 减少系统调用

  • 批量读写
  • 使用 sendfile
  • 减少 read/write 次数

五、减少上下文切换

1. 减少线程数量

  • 线程 ≠ 性能
  • 使用线程池
  • 协程(如 go / libco)

2. 检查上下文切换

pidstat -w -u 1
vmstat 1

六、系统级参数优化(非常重要)

1. 文件描述符

ulimit -n 1000000

系统级:

fs.file-max = 10000000

2. TCP / 网络优化

net.core.somaxconn = 32768
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

3. 内核参数

vm.overcommit_memory = 1
kernel.pid_max = 65535

七、代码层面的优化(最关键)

1. 减少锁竞争

  • 无锁队列
  • 读写锁
  • 减小锁粒度

2. 减少阻塞

  • 非阻塞 I/O
  • 事件驱动
  • 异步处理

3. 热点函数优化

perf record -g ./app
perf report

八、典型场景速查表

场景 优化重点
高并发服务 epoll + 线程池 + 绑核
CPU 密集 绑核 + 减少上下文切换
内存敏感 大页 + 内存池
磁盘 I/O io_uring + 顺序写
实时系统 RT 调度 + 锁优化

九、推荐优化顺序(实战)

  1. 先定位瓶颈
  2. 系统参数调优
  3. 进程 / 线程模型优化
  4. 代码层优化
  5. 必要时改架构

如果你愿意,可以告诉我:

  • 什么进程(服务 / 计算 / 数据库)
  • CPU / 内存 / I/O 哪个先爆
  • 使用 C / C++ / Java / Go / Python

我可以直接给你一套 针对你场景的优化方案

0