nginx 的若干优化 配置

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内核的负载应该都同时降低。


你可能感兴趣的:(nginx,ssl,连接数,硬件加速,多核心,若干优化)