php + nginx 网站并发压力测试及优化

简介: 测试工具:Apache 压力测试工具abab是针对apache的性能测试工具,可以只安装ab工具。ubuntu安装ab


一、测试工具:



Apache 压力测试工具ab

ab是针对apache的性能测试工具,可以只安装ab工具。

ubuntu安装ab

apt-get install apache2-utils

centos安装ab

yum install httpd-tools

参数:

  • -n在测试会话中所执行的请求个数。默认时,仅执行一个请求。
  • -c一次产生的请求个数。默认是一次一个。
  • -t测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
  • -p包含了需要POST的数据的文件。
  • -P对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
  • -T POST数据所使用的Content-type头信息。
  • -v设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
  • -V显示版本号并退出。
  • -w以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
  • -i执行HEAD请求,而不是GET。
  • -x设置<table>属性的字符串。
  • -X对请求使用代理服务器。
  • -y设置<tr>属性的字符串。
  • -z设置<td>属性的字符串。
  • -C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
  • -H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。
  • -A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
  • -h显示使用方法。
  • -d不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
  • -e产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
  • -g把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
  • -i执行HEAD请求,而不是GET。
  • -k启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
  • -q如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。


eg:

### POST /user/login
ab -n 100 -kc 10 -p user_login -T 'application/json' -H 'Accept-Encoding:gzip, deflate' -H 'accept-language:zh-Hans-CN;q=1, en-CN;q=0.9'  http://XXX/user/login
##### request data
文件 user_login 内容:
{"email":"ws65536@qq.com","password":"ws65536"}
### GET /default/index
ab -n 1000 -c 100 http://XXX/default/index


测试的同时可以在被测试的服务器上使用htop命令查看CPU和内存的实时使用情况:

image.png


二、配置优化



nginx处理PHP请求有三个步骤。

第一步:接受请求,发现是PHP请求,转向第二步。

第二步:通过socket的方式,连接PHP-FPM的fast-cgi,让PHP-FPM处理请求。

第三步:获得PHP-FPM处理结果,加上http报头,返回给客户端。

所以,我们要提高nginx的PHP并发性能,我们需要做这三步。


1.调大nginx的并发连接数( 调nginx.conf 的worker_connections 和 worker_processes)。


worker_connections : 每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)

worker_processes :指明了nginx要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。 一般为当前机器总cpu核心数的1到2倍。


2.调大php-fpm的并发连接数(调php-fpm.conf 的pm.max_children等)。

本人用的是Ubuntu 14.04.4,PHP 5.5.9,以下目录结构对其他服务器环境可能不适用。

由于在 /etc/php5/fpm/php-fpm.conf 中并没有找到 max_children ,于是使用以下命令进行查找:

# 在/etc/php5/fpm 目录下查找所有文件,并依次在每个文件中查找"max_children"
sudo find /etc/php5/fpm -name * | xargs grep "max_children"

终于在 /etc/php5/fpm/pool.d/www.conf 中找到了 max_children 等相关配置。


3.增加系统的最大文件数量限制(ulimit -n 65535)。

由于NGINX处理PHP请求的第二步需要通过socket的方式和PHP-FPM通信,它能新建的最大socket数受到系统最大打开文件数的限制。新装的Linux默认只有1024,所以必须增加系统最大打开文件数目。

ulimit -n 命令可以查看当前系统最大打开文件数。

ulimit -n 65535 可以将系统最大打开文件数临时修改为65535,然而退出登录后就会失效。

想要修改系统最大打开文件数,并永久生效:

vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 65535
* hard nofile 65535


相关文章
|
9天前
|
前端开发 关系型数据库 MySQL
PHP外链网盘系统网站源码
> 本文将详细介绍如何从零构建一个基于PHP和MySQL的文件管理系统,分解项目代码并剖析每个模块的功能。我们将以`index.php`、`config.php`和`api.php`这三个核心文件为例,详细展示如何设计文件列表、数据库配置和文件上传接口,从而实现一个完整的文件管理系统。该文章可以作为学术研究和代码实现的参考。
124 98
|
6天前
|
关系型数据库 MySQL PHP
免登录游客卡密发放系统PHP网站源码
这是一个简单易用的卡密验证系统,主要功能包括: 卡密管理和验证,多模板支持,响应式设计,验证码保护,防刷机制,简洁的用户界面, 支持自定义模板,移动端优化,安全性保护,易于部署和维护。
112 77
|
22天前
|
Linux PHP 数据安全/隐私保护
2024授权加密系统PHP网站源码
2024授权加密系统PHP网站源码
102 58
|
18天前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
78 13
|
1月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
63 3
|
2月前
|
关系型数据库 MySQL PHP
PHP与MySQL的无缝集成:构建动态网站的艺术####
本文将深入探讨PHP与MySQL如何携手合作,为开发者提供一套强大的工具集,以构建高效、动态且用户友好的网站。不同于传统的摘要概述,本文将以一个生动的案例引入,逐步揭示两者结合的魅力所在,最终展示如何通过简单几步实现数据驱动的Web应用开发。 ####
|
2月前
|
SQL 前端开发 PHP
如何使用PHP开发一个购物网站?
在数字化时代,线上购物日益重要。本文介绍如何使用PHP开发一个功能完善、用户友好的购物网站,涵盖需求分析、开发环境选择、数据库设计、前后端开发、用户认证、商品展示、购物车、订单管理、功能扩展及安全性能优化等环节,旨在提供全面的开发指南。
47 3
|
2月前
|
PHP
20241125易支付PHP网站源码
PHP74,上传源码后解压访问域名/install 进行安装 安装完成 之后一定要设置伪静态 源码里面nginx.txt 就是伪静态 然后复制粘贴到伪静态里面保存即可
48 2
|
2月前
|
关系型数据库 MySQL PHP
骗子曝光系统网站PHP源码
骗子曝光系统网站PHP源码 PHP 7.0+ Mysql 5.6+ 上传访问域名/install安装
54 2
|
2月前
|
JavaScript PHP 数据安全/隐私保护
乞丐在线要饭系统PHP网站源码
在这个物欲横流、竞争激烈的时代,有时候我们真心觉得钱来得太不容易,甚至连最基本的生存都成了负担。于是,我们想出了一个特别“独特”的点子:用利息砸我,给我点施舍!
81 1