资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > PHP

nginx,php,tomcat服务基本调优

PHP 更新时间: 发布时间: 计算机考试归档 最新发布

nginx,php,tomcat服务基本调优

nginx+php+mysql 

1.利用fastcgi_cache缓存,减少nginx与PHP交互,减轻php和数据库(mysql)的压力

2.为zend引擎缓存opcode,使用X-cache缓存opcode,减少php脚本语句转换中间代码的次数

3.利用TCMalloc优化Nginx和mysql的内存分配效率访问性能,提高高并发的性能(nginx本身对内存优化就很好,这里主要是针对mysql优化)

4.安装最新的libevent提高nginx和php的事件触发性能

5.开启gzip压缩网页文件

6.优化nginx中fastcgi参数

7.优化php-fpm参数

lnmpa并不是说nginx不行,而是php-fpm不行,为了避免502所以才转由apache来处理php

整体写的很不错,php这块可以在完善下。

nginx+php-fpm 最大的瓶颈不在nginx,而是在php。

1、如果是php ,nginx缓存php 最好别开。

2、EA的最新版本性能比Xcache要好。且对新的PHP支持较好

3、pm.max_children = 50 #最大进程数 

pm.start_servers = 5 #初始进程数 

pm.min_spare_servers = 2 #最小空闲进程 

pm.max_spare_servers = 8 #最大空闲进程 

php-fpm的模式分静态跟动态,静态的话只第一个参数生效,动态后面设置才有用


php-fpm 优化

单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-fpm进程数300

增大pm.max_children为400

nginx和fpm 添加了 listen.backlog = 2048

最大打开文件句柄数 65535

/etc/sysctl.conf 都进行了微调,高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞。依然出现502错误

启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。

高并发时使用tcp端口的方式比socket方式相对稳定一点,但是使用端口的方式,处理的效率确实比socket效率低了那么一点


pm = static | dynamic | ondemand 静态池、服务优先、内存优先

pm.max_children = 256  开启的最大php进程数

pm.max_requests = 1024   在执行了1024个请求后重启worker进程

这也是我们线上服务器的配置,我们线上用的web服务的机器是12核cpu、12G内存,nginx开启12个worker进程,php开启256个进程,跑起来后每个进程大概占用30M内存,也就是(256+12)*30=8G ,另外还跑了一些配管、监控、统计、日志收集等七七八八的软件,整体业务是比较轻松的,这种静态池的配置大大减少了prefork进程带来的开销,RT时间100ms以内的占到90%以上

php的工作进程数也不是越大越好,这种进程模型运行时间长了占的内存会增大,一般一个php进程是占到30M左右的内存,开多少合适自己算吧,nginx的worker进程一般也能跑到30M的内存,综合计算一下;php的执行时间可以根据你的服务标准来设定,超过服务时间浏览器返回的是502错误,这个按照实际的情况处理吧,一般情况要设置超时时间,避免某些请求慢,将整个业务堵死;至于backlog值,当程序写的比较好时,建议设置其数量为php工作进程的1到2倍。

另外:在配置过程中,比如遇到大并发或者是特殊业务的场景,不合理的fd、buffer等设置也会带来5XX错误,比如说大并发连接的业务要增大系统和单个程序的fd数量,如果是上传业务要增大头buffer等,这些要视情况而做优化,正所谓道法自然,术变万千,要以不变应万变




java+tomcat 

tomcat的三种运行模式选择

屏蔽DNS查询 修改的属性是enableLoopups="false"

调整线程数

调整最大连接数 一般设置为maxProcessors的1.5倍即可

调整网络超时

一般设置成connectionTimeout="30000"

压缩管理

compression="on"            # 打开压缩功能

compressionMinSize="50"     # 启用压缩的输出内容大小,默认为2KB

noCompressionUserAgents="gozilla, traviata"      # 对于以下的浏览器,不启用压缩

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

JVM内存调优

比如其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4


        URIEncoding="UTF-8"    #设置编码

        minSpareThreads="25"  #Tomcat初始化时创建的 socket线程数

        maxSpareThreads="75"  #Tomcat连接器的最大空闲socket 线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50

        enableLookups="false"  #屏蔽DNS查询

        disableUploadTimeout="true"  #该标志位表明当执行servlet时,是否允许servlet容器使用一个不同的、更长的连接超时。启用该标志位将导致在上传数据时,要么使用更长的时间完成上传,要么出现更长的超时。如果不指定,该属性为“false”。       

        connectionTimeout="20000"   #网络超时时间

        acceptCount="300"     #容许的最大连接数,一般设置为maxProcessors的1.5倍即可,满了之后客户请求会被拒绝(不能小于maxSpareThreads  )

        maxThreads="300"     #客户请求最大线程数,默认值为“200”

        maxProcessors="1000"   #最大连接线程数,即:并发处理的最大请求数,默认值为75 ,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程

        minProcessors="5"      #最小空闲连接线程数,用于提高系统处理性能,默认值为10

        useURIValidationHack="false"

       

        redirectPort="8443"/>


http://www.tuicool.com/articles/2qe2Ije

http://www.cnblogs.com/zhanjindong/p/concurrent-and-tomcat-threads-updated.html?utm_source=tuicool&utm_medium=referral

https://segmentfault.com/a/1190000008064162

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

maxThreads 是处理请求的线程数,acceptCount 是等待队列,acceptCount并不是一定要大于等于maxThreads。

maxThreads 满了,进入acceptCount ,acceptCount 也满了,则 拒绝请求

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/228941.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【nginx,php,tomcat服务基本调优】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2