RHEL6.2 squid进程和CPU核绑定,支持多CPU
在RHEL6.2上安装Squid,使用透明代理,最开始使用系统带的rpm包安装,调试参数后,起用服务,小流量的情况下,squid可以正常工作,但是一旦加载大流量,squid立即崩溃。
后来了解到squid2系列都不支持多核CPU,只有最新的3.2支持多核CPU,因此决定下载源码编译安装。
编译安装测试,一些小的麻烦不断产生,网上可以参考的资料很少,很多都是介绍做反向代理的。
3.2最主要的就是支持多核处理器,我们最开始使用workers参数,但是加载后查看squid的CPU使用率忽高忽低,曲线差不多跟正弦函数似的,客户端一会能打开网页,一会不能打开网页。卡了几天,然后决定换一个方式试试,没想到成功了。
cpu_affinity_map代替workers,能正常开启多进程,squid工作正常。我们的服务器是双CPU,12核24进程,下面是我们的参数:
1 | cpu_affinity_map process_numbers=1,2,3,4,5,6,7,8,9,10,11,12 |
2 | cores=1,3,5,7,9,11,13,15,17,19,21,23 |
这个参数的意思就是把squid进程和CPU核绑定。 squid官方的解释
01 | Option Name: cpu_affinity_map |
08 | Usage: cpu_affinity_map process_numbers=P1,P2,... cores=C1,C2,... |
10 | Sets 1:1 mapping between Squid processes and CPU cores. For example, |
12 | cpu_affinity_map process_numbers=1,2,3,4 cores=1,3,5,7 |
14 | affects processes 1 through 4 only and places them on the first |
15 | four even cores, starting with core |
17 | CPU cores are numbered starting from 1. Requires support for |
18 | sched_getaffinity(2) and sched_setaffinity(2) system calls. |
20 | Multiple cpu_affinity_map options are merged. |
这个功能理论上和workers是一样的,但是我们这边实际效果却不是。 这个仅仅适用于squid3.2以后的版本。