1.nginx.conf 中关于ssl 硬件加速的配置,好多的金融行业有自己的ssl 硬件加速体系。
ssl_engine device;
用户可以使用openssl 提供的命令来硬件加速设备
openssl engine -t 来查看
2.
nginx 优化worker_connections
nginx.conf
events {
use epoll;
worker_connections 8192;
}
增加 worker_connections,测试配置报告:
[warn]: 8192 worker_connections are more than open file resource limit: 1024
这需要调整系统的文件描述符 nofile
open file resource limit 是linux中process可以打开的文件句柄数量。增加这个数值需要调整两个配置:
第一步, 修改系统最大允许的文件描述符
查看当前的设置:
$ cat /proc/sys/fs/file-max
2390251
或者
$ sysctl -a
fs.file-max = 2390251
该系统是CentOS 5.x x64版本,安装好后没有做过优化设定, 2390251是其默认值
$ ulimit -n
1024
如果 /proc/sys/fs/file-max小于我们要设定的句柄数量,可以通过:
$echo "2390251" > /proc/sys/fs/file-max
或者修改 /etc/sysctl.conf,在文件中修改fs.file-max的值(没有就创建一条)
修改完后可以通过
$ sysctl -p
使设置生效
2. 文件描述符修改后,需要调整针对用户或者组(user/group)的限制
/etc/security/limits.conf,文件格式为
<domain> <type> <item> <value>
其中<type>为 soft或者hard,有些应用会自动把soft限制提升到hard限制,如java,至于nginx,没有看到相关的文档。
如:
* - nofile 8192
表示对所有的用户,文件描述符可以用到 8192, 或者
user_abc - nofile 8192
表示对用户 user_abc,文件描述符可以用到 8192
注意:有些情况 /etc/security/limits.conf并不会发生作用,如在 init.d 中启用的进程,或者daemons运行的进程。
此时比较有效的办法是在init的script中,明确命令 ulimit -n xxxxx
除了在系统中进行设定 nofile(fs.file-max) 值外,可以在 nginx.conf 中指定worker_process可以使用的nofile值,如:#user nobody;worker_processes 3;#error_log logs/error.log;#error_log logs/error.log notice;error_log logs/error.log info;pid /var/run/nginx.pid;worker_rlimit_nofile 8192;events { use epoll; worker_connections 8192;}重新加载nginx配置,使新设定生效。上面方案还临时减少了另外一个常常出现的错误:limiting connections by zone "one", client: xxx.xxx.xx.x, server:....关于此问题的详细描述,会在后续文章中列出。
3.nginx 针对服务器多核心配置优化
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。
配置Nginx多核CPU,worker_cpu_affinity使用方法和范例
<strong style="list-style-type: none;">1. 2核CPU,开启2个进程</strong>
worker_processes 2;
worker_cpu_affinity 01 10;</pre>
</pre>
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。
<strong style="list-style-type: none;">2. 2核CPU,开启4个进程</strong>
worker_processes 4;
worker_cpu_affinity 01 10 01 10;</pre>
</pre>
开启了四个进程,它们分别对应着开启2个CPU内核
<strong style="list-style-type: none;">3. 4核CPU,开户4个进程</strong>
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;</pre>
</pre>
0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
<strong style="list-style-type: none;">4. 4核CPU,开启2个进程</strong>
worker_processes 2;
worker_cpu_affinity 0101 1010;</pre>
</pre>
0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核
2个进程对应着四个内核
worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的。
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
<strong style="list-style-type: none;">5. 8核CPU,开户8个进程</strong>
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;</pre>
</pre>
0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
配置完毕后,重启nginx ,执行/etc/init.d/nginx restart
测试nginx是否有用到多个CPU内核 ,在另一台机器上执行ab.exe -c 1000 -n 1000 http://www.domain.com/index.php
ab.exe是装apache后带的一个性能测试工具,它可以模拟多客户端的并发请求。
在服务器上执行top,然后按1,就可以看到CPU内核的工作情况。如果多个CPU内核的利用率都相差不多,证明nginx己经成功的利用了多核CPU。
测试结束后,CPU内核的负载应该都同时降低。