1.worker_processes 越大越好(一定数量后性能增加不明显)

 
2.worker_cpu_affinity 所有cpu平分worker_processes 要比每个worker_processes 都跨cpu分配性能要好;不考虑php的执行,测试结果worker_processes数量是cpu核数的2倍性能最优
 
3.unix domain socket(共享内存的方式)要比tcp网络端口配置性能要好
不考虑backlog,请求速度有量级的飞跃,但错误率超过50%
加上backlog,性能有10%左右提升
 
4.调整nginx、php-fpm和内核的backlog(积压),connect() to unix:/tmp/php-fpm.socket failed (11: Resource temporarily unavailable) while connecting to upstream错误的返回会减少
nginx:
配置文件的server块
 
listen 80 default backlog=1024;
 
php-fpm:
配置文件的
 
listen.backlog = 2048
 
kernel参数:
/etc/sysctl.conf,不能低于上面的配置
 
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 4096
 
 
 
5.增加单台服务器上的php-fpm的master实例,会增加fpm的处理能力,也能减少报错返回的几率
多实例启动方法,使用多个配置文件:
 
/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf &
/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm1.conf &
 
nginx的fastcgi配置
 
upstream phpbackend {
# server 127.0.0.1:9000 weight=100 max_fails=10 fail_timeout=30;
# server 127.0.0.1:9001 weight=100 max_fails=10 fail_timeout=30;
# server 127.0.0.1:9002 weight=100 max_fails=10 fail_timeout=30;
# server 127.0.0.1:9003 weight=100 max_fails=10 fail_timeout=30;
server unix:/var/www/php-fpm.sock weight=100 max_fails=10 fail_timeout=30;
server unix:/var/www/php-fpm1.sock weight=100 max_fails=10 fail_timeout=30;
server unix:/var/www/php-fpm2.sock weight=100 max_fails=10 fail_timeout=30;
server unix:/var/www/php-fpm3.sock weight=100 max_fails=10 fail_timeout=30;
# server unix:/var/www/php-fpm4.sock weight=100 max_fails=10 fail_timeout=30;
# server unix:/var/www/php-fpm5.sock weight=100 max_fails=10 fail_timeout=30;
# server unix:/var/www/php-fpm6.sock weight=100 max_fails=10 fail_timeout=30;
# server unix:/var/www/php-fpm7.sock weight=100 max_fails=10 fail_timeout=30;
}
 
location ~ \.php* {
fastcgi_pass phpbackend;
# fastcgi_pass unix:/var/www/php-fpm.sock;
fastcgi_index index.php;
……….
}
 
 
 
6.测试环境和结果
 
 
 
内存2G
swap2G
cpu 2核 Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
采用ab远程访问测试,测试程序为php的字符串处理程序
 
1)在开4个php-fpm实例,nginx 8个worker_processes 每个cpu4个worker_processes ,backlog为1024,php的backlog为2048,内核backlog为4096,采用unix domain socket连接的情况下,其他保持参数不变
 
性能和错误率较为平衡,可接受,超过4个fpm实例,性能开始下降,错误率并没有明显下降
结论是fpm实例数,worker_processes数和cpu保持倍数关系,性能较高
影响性能和报错的参数为
php-fpm实例,nginx worker_processes数量,fpm的max_request,php的backlog,unix domain socket
 
10W请求,500并发无报错,1000并发报错率为0.9%
 
500并发:
 
Time taken for tests: 25 seconds avg.
Complete requests: 100000
Failed requests: 0
Write errors: 0
Requests per second: 4000 [#/sec] (mean) avg.
Time per request: 122.313 [ms] (mean)
Time per request: 0.245 [ms] (mean, across all concurrent requests)
Transfer rate: 800 [Kbytes/sec] received avg.
 
1000并发:
 
Time taken for tests: 25 seconds avg.
Complete requests: 100000
Failed requests: 524
(Connect: 0, Length: 524, Exceptions: 0)
Write errors: 0
Non-2xx responses: 524
Requests per second: 3903.25 [#/sec] (mean)
Time per request: 256.197 [ms] (mean)
Time per request: 0.256 [ms] (mean, across all concurrent requests)
Transfer rate: 772.37 [Kbytes/sec] received
 
2)在其他参数不变,unix domain socket换为tcp网络端口连接,结果如下
 
500并发:
 
Concurrency Level: 500
Time taken for tests: 26.934431 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Requests per second: 3712.72 [#/sec] (mean)
Time per request: 134.672 [ms] (mean)
Time per request: 0.269 [ms] (mean, across all concurrent requests)
Transfer rate: 732.37 [Kbytes/sec] received
 
1000并发:
 
Concurrency Level: 1000
Time taken for tests: 28.385349 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Requests per second: 3522.94 [#/sec] (mean)
Time per request: 283.853 [ms] (mean)
Time per request: 0.284 [ms] (mean, across all concurrent requests)
Transfer rate: 694.94 [Kbytes/sec] received
 
与1)比较,有大约10%的性能下降
 
 
 
7. 调整fpm的max_request参数为1000,并发1000报错返回降到200个以下,
Transfer rate在800左右

nginx+php-fpm性能参数优化原则的更多相关文章

  1. [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

    Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...

  2. tengine编译安装及nginx高并发内核参数优化

    Tengine Tengine介绍 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性. Tengine的性能和稳定性已经在大型的 ...

  3. Nginx 性能参数优化

    user www www; # ginx要开启的进程数 一般等于cpu的总核数,没必要开那么多,1个nginx内存消耗10兆左右 worker_processes 4; # 为每个进程分配cpu,上例 ...

  4. Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

    转自:http://blog.csdn.net/zhongwen7710/article/details/39213377 第一部分:相关的概念 数据类型 Java虚拟机中,数据类型可以分为两类:基本 ...

  5. Mysql性能参数优化

    1.Max_connections (1)简介 Mysql的最大连接数,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,mysql会为每个连 ...

  6. JVM性能参数优化

    以上是jdk1.7的默认GC回收器 Java的gc回收的类型主要有几种 UseSerialGC, UseConcMarkSweepGC, UseParNewGC, UseParallelGC, Use ...

  7. Php 性能参数优化 及 Iptables 防火墙限制用户访问平率

    Php-Fpm.Conf 文件配置优化 [global] pid = run/php-fpm.pid process_control_timeout=5 [www] listen.allowed_cl ...

  8. 数据库顶会VLDB论文解读:阿里数据库智能参数优化的创新与实践

    前言 一年一度的数据库领域顶级会议VLDB 2019于美国当地时间8月26日-8月30日在洛杉矶召开.在本届大会上,阿里云数据库产品团队多篇论文入选Research Track和Industrial ...

  9. 突破10万高并发的nginx性能优化经验(含内核参数优化)

    写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...

随机推荐

  1. GetParam(name)

    function GetParam(name) { var match = new RegExp(name + "=*([^&]+)*", "i").e ...

  2. MicrosoftAjax.js

    MicrosoftAjax.js下载 Function.__typeName = "Function"; Function.__class = true; Function.cre ...

  3. 微信小程序 - 提示消息组件

    配置挺简单的,也就不说明了,点击下载:alert

  4. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  5. IDEA引入外部jar包的方法

    在做发短信的功能(阿里大于)的时候,我只是吧jar包拷贝到了项目的external library. 拷贝进来之后我用junit写了test方法,可以完美发送短信到手机,但是我这是个web项目,然后我 ...

  6. python object对象

    动态语言的对象属性 既然都是动态语言,自然python和熟知的JavaScript很像,建一个空对象用来存放所有的数据,看看js: var data = {}; data.name = 'CooMar ...

  7. SpringMVC Controller配置方法有哪几种

    第一种 URL对应Bean 如果要使用此类配置方式,需要在XML中做如下样式配置 <!-- 表示将请求的URL和Bean名字映射--> <bean class="org.s ...

  8. Python学习笔记三:模块

    一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数)  来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...

  9. Xcode7安装CocoaPods

    一.CocoaPods介绍以及优点 CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具.该项目源代码在Github上管理. 通过 CocoaPods,能够非常方便的 ...

  10. JAVA的驼峰和下划线互转帮助类

    实体类: import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombo ...