进程运行于不同的 CPU 核
用 Gearman 搭建 Map/Reduce ,GearmanManager 来管理所有的 workers。启动多个 gearman-manager daemon,为了充分利用服务器资源,使其运行于不同的 CPU 内核上。
假设启动 10 个gearman-manager daemon,CPU 是 4核。
[root@www ~]# ps aux | grep gearman-manager | awk {'print $2;'} | sort -k1,1 | head -3 | xargs -n 1 taskset -cp 0
[root@www ~]# ps aux | grep gearman-manager | awk {'print $2;'} | sort -k1,1 | tail -3 | xargs -n 1 taskset -cp 1
[root@www ~]# ps aux | grep gearman-manager | awk {'print $2;'} | sort -k1,1 | sed -n '4,7p' | xargs -n 1 taskset -cp 2上面命令是将前 3 个 deamon 运行于 CPU#0 (CPU 第一个核 上,从 0 开始计数),中间 4个运行于 CPU#2,最后三个运行于 CPU#1。
Backgrounds: 榨干服务器:让进程运行在指定的CPU
两个名词:
SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多 CPU),各 CPU 之间共享内存子系统以及总线结构。 [MORE...]
CPU affinity:中文唤作「CPU亲和力」,是指在 CMP 架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。[MORE...]
在Linux上修改进程的「CPU亲和力」
在Linux上,可以通过 taskset 命令进行修改。以 CentOS 为 例,taskset 在 util-linux-2.13-pre7 包中。下载源代码,编译安装即可。
对运行中的进程,可用如下命令将 CPU #1, #2, #3 分配给 PID 为 12345 的进程:[root@www ~]# taskset -cp 1,2,3 12345
对于已经在运行中 MySQL 的服务,用上面命令修改其运行于哪颗 CPU 内核上是无效的。而是需要在启动时指定:
[root@www ~]# taskset -c 1,2,3 /usr/local/mysql/bin/mysqld_safe &
其它进程,也可类似处理 (Nginx 除外,见下文)。之后用
top命令,回车后输入1查看所有 CPU 的使用情况:Nginx 绑定 CPU
上文说 Nginx 除外,是因为 Nginx 提供了更确切的配置,在其配置文件conf/nginx.conf中,有如下一行:worker_processes 1;
这用来配置 Nginx 启动几个工作进程,默认为 1。Nginx 还支持
worker_cpu_affinity配置项,即 Nginx 可以为 每个工作进程绑定 CPU。例:worker_process 3; worker_cpu_affinity 0010 0100 1000;
0010,0100,1000是掩码,分别代表第 2,3,4 颗 CPU 核。重启 Nginx,3 个工作进程就可以各自用各自的 CPU 。深入
如果自己写代码,要把进程绑定到 CPU,可用 sched_setaffinity 函数,在 Linux上,这会触发一次 系统调用。
如果父进程设置了affinity,之后其创建的子进程会继承父进程的affinity属性(其实用 taskset 启动进程就是一次fork+exec)。
@Xitong Linode 默认只在 CPU#0 上工作,多半是由 Xen 的配置决定的。只要内核支持 SMP,默认都是尽可能将负载分摊在多个 CPU 上。
建议继续学习:
- Linux如何统计进程的CPU利用率 (阅读:15365)
- Oracle MTS模式下 进程地址与会话信息 (阅读:13577)
- Linux内存点滴 用户进程内存空间 (阅读:12559)
- 解剖CPU (阅读:8642)
- 深入理解Nginx之调试优化技巧 (阅读:7703)
- 查看 CPU, Memory, I/O and NetFlow (阅读:7399)
- Linux上进程的表示以及入门 (阅读:7270)
- Linux下进程绑定多CPU运行 (阅读:6700)
- 如何查看Linux 硬件配置信息 (阅读:6655)
- 分析进程内存分配情况,解决程序性能问题 (阅读:6261)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Glenda Guo 来源: 生活在別處
- 标签: CPU Gearman 进程
- 发布时间:2012-11-02 13:14:28
-
[903] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 全站换域名时利用nginx和javascri -
[52] 海量小文件存储 -
[52] CloudSMS:免费匿名的云短信 -
[51] 用 Jquery 模拟 select -
[49] ps 命令常见用法

