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. MVC 之 解决MVC中使用BundleConfig.RegisterBundles引用Css及js文件发布后的丢失

    在MVC3中我们这样引用资源文件: <link href="@Url.Content("~/Content/Site.css")" rel="s ...

  2. PAT 1069 1070 1071 1072

    pat 1069 The Black Hole of Numbers 水题,代码如下: #include<cstdio> #include<cstdlib> #include& ...

  3. AfterAddJS

    protected override string AfterAddJS() { return CanDoo.FineUI.Utility.AfterSaveJS_ReloadData(EntityI ...

  4. java 对视频和图片进行加密解密[转]

    是时候回到文件加密与解密的具体实现这个主题上来了.后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了.首先来看对一幅JPG类型图片进行异或加密的Java实现,由于 ...

  5. SQL Server中获取最新插入的自增ID

    SCOPE_IDENTITY()函数 返回的是紧跟这个插入语句生成的自增ID, 若果前一个语句不是插入自增ID的,将返回NULL @@IDENTITY 返回全局的最有一个生成的自增ID,全局可用 cr ...

  6. [译]AngularJS Services 获取后端数据

    原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...

  7. SourceTree安装教程

    一.安装Git 链接: http://pan.baidu.com/s/1mh7rICK 密码: 48dj 二.安装SourceTree 链接: http://pan.baidu.com/s/1skWk ...

  8. Web网站错误提示页面和默认訪问页面设置

    1.asp.net 定制简单的错误处理页面 通常web应用程序在公布后.为了给用户一个友好界面和使用体验,都会在发生错误时跳转至一个自己定义的错误页面,而不是asp.net向用户暴露出来的具体的异常列 ...

  9. layer.js 弹窗组件API文档

      基础参数 type title content skin area offset icon btn closeBtn shade shadeClose time id shift maxmin f ...

  10. Retrofit三步理解之中的一个 ------------------ Retrofit的简单使用总结

    概念: Retrofit一開始看起来使用比較麻烦是由于它和其它网络请求框架不同的是它是通过注解和interface来进行网络请求,而且须要对返回数据进行特殊处理才干使用. 1. 简单使用,请求返回St ...