Nginx+PHP-fpm高负载优化及压力测试方法
Nginx+PHP-fpm组合,以内存占用小,负载能力强壮的特点,成为小内存VPS建站的首选组合。我们一起来探讨一下nginx+php-fpm高负载的优化方法。
先来看看nginx配置参数的优化。nginx是前端接受浏览器端请求的web server, 配置可调的参数如下:
下面是示例nginx配置
user www-data;
worker_processes 8;
#worker_processes 调至8, 大于8没什么用,小于8,nginx性能发挥不出来
worker_cpu_affinity 01 10 01 10 01 10 01 10;
#worker_cpu_affinity 参数可以使nginx充分发挥多核Cpu的性能优势 ,上面的配置是针对双核CPU的配置。01表示第一个核,10表示第二个核,如果是四核cpu,一至四个核分别表示为 0001 0010 0100 1000
error_log /var/log/nginx/error_log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 10240;
#worker_rlimit_nofile 是nginx能打开文件的最大句柄数,我们需要把这个数字设大一点。
#linux系统的文件查看数限制查看是用 ulimit -n ,修改这个限制是用 ulimit -HSn 65535
events
{
use epoll;
#必须要用高效的event驱动,以获得最大性能
worker_connections 10240;
#max_clients = worker_processes * worker_connections/4 (最大连接数的计算公式)
}
http
{
include /etc/nginx/deny.iplist;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
server_tokens off;
client_header_buffer_size 32k;
#client头buffer可以调为32K
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay off;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 60;
output_buffers 1 32k;
postpone_output 1460;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
gzip on;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_proxied expired no-cache no-store private auth;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:80m inactive=1d max_size=2500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 300;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
upstream wordpressnginx
{
server 127.0.0.1:6000 weight=1 fail_timeout=120s;
}
include /etc/nginx/sites-enabled/*;
}
上面的配置里面,有多处设及到buffer和timeout的地方。我们可以根据需要,慢慢调大这些参数,buffer自然是大点好,但不要太大。16K是标准配置,可以增加到32,往上加更大也不是不行,但 要考虑到你系统内存大不大,够不够用。timeout是超时,如果服务器很繁忙,不妨增加超时等待时间,以避免频繁出现502错误。
gzip是必须开启的,reverse proxy在允许的情况下,也尽量开启,一 是可以提升响应效率,二是降低服务器压力,gzip开启后更可以节省服务器带宽。
nginx主要的配置如上所述。
现在看一下php-fpm的配置。
[global]
pid = run/php5-fpm.pid
process_control_timeout = 5
[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
user = www-data
group = www-data
pm = static
pm.max_children = 7
#这个决定了 php-fpm的总进程。我们要想同时响应更多的并发数,这个数值要尽可能大,比如500,1000
pm.max_requests = 10000
#并发数越大,这个最大请求数应该越大,并发数小,这个数值也应该越小。它表示,php-fpm进程响应了10000个并发请求之后,就自动重启一下进程。
request_terminate_timeout = 30
#表示等待30秒后,结束那些没有自动结束的php脚本,以释放占用的资源。
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
小内存的vps虽然经过使用php-fpm+nginx,提升了系统的效率,可以同时响应较多的并发请求,但是当并发数上来了,比如从100上升到10000,小内存肯定响应不过来,cpu也会 因为太忙,而导致系统负载变得很高很高,这个时候,我们就要考虑升级硬件配置了。
内存越大越好,CPU核心频率越高越好,CPU核越多越好。硬盘最好是SSD+RAID10。这样性能不仅高,数据安全也有保障。
上面所提到的各个配置参数,设及到数值的,不妨自己 多试着调小,调大参数,然后重启下nginx或者php-fpm进程,看看效果怎么样。
下面介绍一个比较好的压力测试工具,siege.
debian和ubuntu用户可以通过apt-get install siege来安装siege.
siege是一个跟ab.exe相似的http压力测试软件。
我们可以用siege来测试我们的网站和服务器性能。
siege -r 100 -c 10 http://www.domain.com/test.php
-r 是 repeat , -r 100是重复100次测试
-c 10是表示模拟10个用户同时并发连接
最后面是要测试的URL地址。
测试过程中可以随时按CTRL+C中止进程,siege会生成一个报告给我们。
我们可以同时根据siege的测试结果和监视服务器的负载情况,对系统压力状况进行一个深入了解和分析。接下来可以帮助我们判断该如何进行下一步操作,是继续优化配置,还是升级硬件。
Nginx+PHP-fpm高负载优化及压力测试方法的更多相关文章
- nginx如何防止高负载造成服务器崩溃
nginx-http-sysguard模块 一.作用 防止因nginx并发访问量过高或者遭受攻击造成服务器宕机,可根据负载设置界面跳转. 二.安装配置 1.下载模块软件包 wget https:/ ...
- MySQL高负载优化
MySQL配置文件优化 [client] port = #客户端端口号为3306 socket = /data//mysql.sock # default-character-set = utf8 # ...
- Nginx 如何减轻高流量下的压力
L:102 比如 Nginx 缓存服务出现问题(比如新增服务器等造成缓存失效) 所有资源请求直接穿透上游服务器 造成上游服务器压力倍增 特别热点文件 都是访问同个文件 以下可以减轻上述问题 第二种方 ...
- lnmp mysql高负载优化
mysql负载会造成cpu占用高的问题如果没启用innodb的话 用这个配置/usr/local/mysql/share/mysql/my-large.cnf 替换/etc/my.cnf 也可参考如下 ...
- [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。
背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...
- Nginx配置性能优化与压力测试webbench【转】
这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
- nginx实现请求的负载均衡 + keepalived实现nginx的高可用
前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种 ...
随机推荐
- javascript获得客户端IP的又一方法
<script language="JavaScript">VIH_BackColor = "palegreen";VIH_ForeColor = ...
- mysql 创建索引
完整版创建索引如下:CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name ...
- Linux_虚拟机_安装VMware Tools
以root用户执行,否则可能会出现权限不足,无法执行的情况 一.点击安装Vmware Tools 二.拖动安装文件到桌面并解压 三.双击并[在终端中运行] 四.根据提示回车或输入yes ...
- 使用HTML5新特性Mutation Observer实现编辑器的撤销和撤销回退操作
MutationObserver介绍 MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力.该API设计用来替换掉在DOM3事件规范中引入的Mut ...
- 安全框架 SpringSecurity 和 Shiro 对比
突然再次很想理一下权限的事,但是实在不知道实际情况选哪个框架好,现在整理下网上的资料,做一下对比. 1.Spring-security 对spring 结合较好,如果项目用的springmvc ,使用 ...
- NPOI简介
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. (一)传统操作Excel遇到的问题: 1.如果是.NET,需要在服务器端 ...
- ActiveMQ;RabbitMQ;ZeroMQ
中间件类型: Embedded middleware: As the name suggests, this typeof middleware handles embedded applicatio ...
- YARN :Architecture
Apache Hadoop NextGen MapReduce (YARN) MapReduce has undergone a complete overhaul in hadoop-0.23 an ...
- Leetcode Integer Replacement
Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If ...
- Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)
在windows下使用python时,比如编译python的一个包,会遇到这个问题: error: Microsoft Visual C++ 9.0 is required (Unable to fi ...