榨干服务器:让进程运行在指定的CPU

本文探讨如何在Linux环境中优化Linode服务器的CPU资源利用,通过调整进程的CPU亲和力实现负载均衡,提高系统处理能力。同时,介绍如何在Nginx中配置CPU亲和力,并提供自定义代码绑定CPU的技术细节。

我的Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。

不了解Linux是如何调度的,但在Linode的这种状态下,显然有优化的余地。除了处理正常任务,CPU#0还需要处理各种中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。

两个名词

SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。 [更多...]

CPU affinity:中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。[更多...]

一、在Linux上修改进程的“CPU亲和力”

在Linux上,可以通过 taskset 命令进行修改。以Ubuntu为例,运行如下命令可以安装taskset工具。

# apt-get install schedutils

对运行中的进程,文档上说可以用下面的命令,把CPU#1 #2 #3分配给PID为2345的进程:

# taskset -cp 1,2,3 2345

但我尝试没奏效,于是我关掉了MySQL,并用taskset将它启动:

# taskset -c 1,2,3 /etc/init.d/mysql start
  taskset -c 1,2,3 /usr/local/php-5.2.14/sbin/php-fpm start

对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU的使用情况,原来空闲的#1 #2 #3,已经在辛勤工作了。

二、配置nginx绑定CPU

刚才说nginx除外,是因为nginx提供了更精确的控制。

conf/nginx.conf中,有如下一行:

worker_processes  1;

这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置:

worker_processes  3;
worker_cpu_affinity 0010 0100 1000;

这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。

重启nginx后,3个工作进程就可以各自用各自的CPU了。

三、刨根问底

  1. 如果自己写代码,要把进程绑定到CPU,该怎么做?可以用sched_setaffinity函数。在Linux上,这会触发一次系统调用
  2. 如果父进程设置了affinity,之后其创建的子进程是否会有同样的属性?我发现子进程确实继承了父进程的affinity属性(其实用taskset启动进程就是一次fork+exec)。

四、Windows?

在Windows上修改“CPU亲和力”,可以通过任务管理器搞定。

* 个人感觉,Windows系统中翻译的“处理器关系”比“CPU亲和力”容易理解点儿

—————–

### 如何最大化利用服务器性能 #### 性能调优的重要性 性能调优的主要目标是为了提升现有系统的效率以及适应不断增长的业务需求[^1]。这不仅适用于通用的应用程序,也特别针对关系型数据库管理系统如 MySQL 和 Oracle 数据库。 #### MySQL 的性能调优策略 对于 MySQL 数据库而言,合理的硬件资源配置能够显著改善其性能表现[^2]。以下是几个具体的优化方向: - **索引管理**: 使用合适的索引来加速查询操作。 - **缓存机制**: 利用查询缓存减少重复计算的时间开销。 - **连接池设置**: 调整最大连接数以平衡负载压力与资源占用之间的矛盾。 ```sql -- 创建复合索引的例子 CREATE INDEX idx_name ON table_name(column1, column2); ``` #### Oracle on Linux 的性能调优指南 当涉及到 Oracle 数据库部署于 Linux 平台上的场景时,则需考虑更多层面的因素来实现全面性的性能改进[^3]: ##### 系统级调整建议 - **内存分配**: 增加 `SGA` (System Global Area) 大小可有效缓解因数据缓冲不足引发的压力; - **CPU 效率**: 定期监控 CPU 使用情况并通过多线程处理等方式降低单核负担; - **交换空间规划**: 设置足够的 swap area 来防止突发情况下发生 OOM(Out Of Memory); ##### 文件系统与磁盘 I/O 优化措施 - **文件布局设计**: 将频繁访问的数据放置到高性能存储介质上; - **RAID 类型选择**: 根据读写比例挑选最适宜的 RAID 方案; ##### 特定工具应用实例 采用 tuned-adm 工具加载预定义 profile 或者自定义 ruleset 实现动态调节参数的目的: ```bash # 应用 oracle-recommended 配置集 tuned-adm profile oracle-recommended ``` 通过上述手段综合施策才能真正意义上达成最大化利用服务器性能的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值