nhinx php 调优,高流量站点NGINX与PHP-fpm配置优化
本文由LinuxProbe.Com团队成员岳国帅整理发布,原文来自:黑·白。
导读
使用Nginx搭配PHP已有7年的经历,这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置。
以下正是这方面的一些提示和建议:
1. 将TCP切换为UNIX域套接字
1. 将TCP切换为UNIX域套接字
UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。
但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。
upstream backend
{
# UNIX domain sockets
server unix:/var/run/fastcgi.sock;
# TCP sockets
# server 127.0.0.1:8080;
}
2. 调整工作进程数
现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。
多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。
运行以下命令可以获知你的机器有多少个处理器:
Linux上 -
cat /proc/cpuinfo | grep processor
FreeBSD上 -
sysctl dev .cpu | grep location
将nginx.conf文件中work_processes的值设置为机器的处理器核数。
同时,增大worker_connections(每个处理器核心可以处理多少个连接)的值,以及将"multi_accept"设置为ON,如果你使用的是Linux,则也使用"epoll":
# We have 16 cores
worker_processes 16;
# connections per worker
events
{
worker_connections 4096;
multi_accept on;
}
3. 设置upstream负载均衡
以我们的经验来看,同一台机器上多个upstream后端相比单个upstream后端能够带来更高的吞吐量。
例如,如果你想支持最大1000个PHP-fpm子进程(children),可以将该数字平均分配到两个upstream后端,各自处理500个PHP-fpm子进程:
upstream backend {
server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5;
}
4. 禁用访问日志文件
这一点影响较大,因为高流量站点上的日志文件涉及大量必须在所有线程之间同步的IO操作。
access_log off;
log_not_found off;
error_log /var/log/nginx-error.log warn;
若你不能关闭访问日志文件,至少应该使用缓冲:
access_log /var/log/nginx/access.log main buffer=16k;
5. 启用GZip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
6. 缓存被频繁访问的文件相关的信息
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
7. 调整客户端超时时间
client_max_body_size 500M;
client_body_buffer_size 1m;
client_body_timeout 15;
client_header_timeout 15;
keepalive_timeout 2 2;
send_timeout 15;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
8. 调整输出缓冲区大小
fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
reset_timedout_connection on;
server_names_hash_bucket_size 100;
9. /etc/sysctl.conf调优
# Recycle Zombie connections
net.inet.tcp.fast_finwait2_recycle=1
net.inet.tcp.maxtcptw=200000
# Increase number of files
kern.maxfiles=65535
kern.maxfilesperproc=16384
# Increase page share factor per process
vm.pmap.pv_entry_max=54272521
vm.pmap.shpgperproc=20000
# Increase number of connections
vfs.vmiodirenable=1
kern.ipc.somaxconn=3240000
net.inet.tcp.rfc1323=1
net.inet.tcp.delayed_ack=0
net.inet.tcp.restrict_rst=1
kern.ipc.maxsockbuf=2097152
kern.ipc.shmmax=268435456
# Host cache
net.inet.tcp.hostcache.hashsize=4096
net.inet.tcp.hostcache.cachelimit=131072
net.inet.tcp.hostcache.bucketlimit=120
# Increase number of ports
net.inet.ip.portrange.first=2000
net.inet.ip.portrange.last=100000
net.inet.ip.portrange.hifirst=2000
net.inet.ip.portrange.hilast=100000
kern.ipc.semvmx=131068
# Disable Ping-flood attacks
net.inet.tcp.msl=2000
net.inet.icmp.bmcastecho=1
net.inet.icmp.icmplim=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
10. 监控
持续监控打开连接的数目,空闲内存以及等待状态线程的数目。
设置警报在超出阈值时通知你。你可以自己构建这些警报,或者使用类似ServerDensity的东西。
确认安装了NGINX的stub_status模块。该模块默认并不会编译进NGINX,所以可能你需要重新编译NGINX -
./configure --with-http_ssl_module --with-http_stub_status_module --without-mail_pop3_module
--without-mail_imap_module --without-mail_smtp_module
make install BATCH=yes
nhinx php 调优,高流量站点NGINX与PHP-fpm配置优化相关推荐
- 高流量站点NGINX与PHP-fpm配置优化
导读 使用Nginx搭配PHP已有7年的经历,这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置. 以下正是这方面的一些提示和建议: 1. 将TCP切换为UNIX域套接字 1. 将T ...
- linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms
linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms changing a readonly file (linu single user mode) ...
- mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
- MySQL性能调优必知:Performance Schema引擎的配置与使用
当你在MySQL高并发情况下的进行性能调优时,需要知道调整后的影响.例如查询是否变快了?锁是否会减慢运行速度?内存使用情况如何?磁盘IO等待时间变了吗? . Performance Schema就有一 ...
- RK3588s imx415相机适配及ISP调优系列(三)--- RKISP调试环境配置
经过上篇的相机配置后,两个mipi相机已经可以正常出图了.其实对于rk系列如何配置mipi相机,网上已有不少相关资料均可参考借鉴. RK3588s imx415相机适配及ISP调优系列(一) RK35 ...
- vmware响应时间过长_性能调优高并发下如何缩短响应时间
点击上方"蓝字"带你去看小星星 菜菜哥,请你看电影呀,但是得帮我一个忙 好呀,看什么? 哥斯拉2:怪兽之王 看过了~ X战警:黑凤凰 看过了 追龙2和黑衣人呢? 都看过了,你说帮什 ...
- 虚拟服务器调优不包括,使用虚拟主机会对SEO优化有影响吗?
想做一个网站除了需要有域名之外,还需要一个源码承载工具,那就是服务器或者虚拟主机,服务器固然是好的,那么使用虚拟主机会不会对聊城SEO优化有影响呢? 一.虚拟主机是什么? 如果要了解虚拟主机对聊城SE ...
- jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
文章目录 Pre 案例背景 高并发查询导致对象快速进入老年代 老年代必然会触发频繁GC 优化前的线上系统JVM参数 频繁Full GC导致的大量内存碎片 如何进行优化? 思考题 Pre 这篇文章开始, ...
- MySQL调优(六):分区设计,分区优化案例
上节课没讲完的一个案例 优化 limit 分页 在很多应用场景中我们需要将数据进行分页,一般会使用limit加上偏移量的方法实现,同时加上合适的orderby 的子句,如果这种方式有索引的帮助,效率通 ...
最新文章
- Java黑皮书课后题第5章:**5.7(金融应用:计算将来的学费)假设今年某大学的大学为10000美元,学费的年增长率为5%,一年后,学费将是10500美元。编写程序,计算10年后的学费,10~13费
- 万里长征,始于足下——菜鸟程序员的学习总结
- ios 动画设计_动画和讲故事在设计中的力量
- 【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)
- Ansible-playbook 学习
- JavaScript变量、属性、函数、方法的区别(1)
- 跨页面实现多选(转)
- 接口返回buffer的16进制数据如何转换
- java word文档 转 html文件
- Python爬虫入门教程 25-100 知乎文章图片爬取器之一
- 四级英语图表作文真题计算机,英语四级作文真题
- 电脑时间倒流,程序拒绝穿越:应用程序发生异常 未知的软件异常(0xe06d7363)
- 电脑网络里面的以太网不见了,开启后立即自动关闭,如何解决?
- struts1 标签
- Ubuntu安装Node.js(亲测,最新,详细)
- 2022年人工智能5大发展趋势
- 浏览器中优秀的收藏夹书签
- 2021-10-23 python第一天
- 泰山OFFICE技术讲座:关于字符间距的分类
- 显示秒针(Wibdwos10)
热门文章
- nginx 413 Request Entity Too Large
- struts2访问jsp页面404
- oracle11g创建表空间大文件,oracle11g创建表空间 sql语法
- python包管理机制_Go 1.5之前的多种包管理机制简介(
- python中 r是什么意思_python中rb含义理解
- 编程语言优缺点_R编程语言的优缺点
- python 整数最大_Python程序使用floor()方法查找最大整数
- Java ObjectOutputStream writeChar()方法与示例
- JavaScript中带示例的String repeat()方法
- vue 导出_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入