压测是确定系统稳定性的一种测试方法,在系统正常运行范围之外进行,主要测试功能极限和隐患。针对游戏的压测从传统意义上来说就是对网络服务的服务器不断施加“压力”,也就是通过确定一个系统的瓶颈或不能接收的性能点,来获得系统能提供的最大服务级别的测试。主要用来检查游戏服务器的承受能力,包括用户承受能力和流量承受能力。
软件环境参数
LNMP优化的手段主要包括
文件句柄数量
PHP 缓存
Nginx编译
Nginx pagespeed
Nginx 缓存
Nginx 压缩
Nginx CPU绑定
Nginx处理PHP请求的流程
接收请求若发现是PHP请求则转入第2步
通过socket方式连接PHP-FPM的FastCGI,让PHP-FPM处理请求。
获取PHP-FPM处理结果,并附加HTTP报头,返回给客户端。
提高Nginx的PHP并发性
1、调整Nginx的并发连接数
worker_connections 51200;
worker_connections 指令表示每个工作进程允许的最大连接数,也就是每个worker进程能并发处理的最大连接数(包含所有连接数),理论上单台Nginx服务器的最大连接数为 worker_processes * worker_connections。
worker_processes auto;
worker_processes 指明了Nginx要开启的进程数量,官方建议开一个就可以了,多开可以减少磁盘IO带来的影响,一般为当前机器CPU核心数量的1到2倍。
worker_processes 指令表示Nginx进程数,建议按照CPU数量来指定,一般为它的倍数,例如2个四核CPU则计算为8。
2、调整PHP-FPM的并发连接数
$ sudo find /etc/php/fpm -name * | xargs grep "max_children"
3、调整系统的最大文件数量限制
由于Nginx处理PHP请求的第二步需要通过Socket和PHP-FPM通信,Nginx能够建立的最大Socket数量受到系统最大打开文件数量的限制,Linux默认只有1024。
Nginx核心配置
$ vim /usr/local/nginx/conf/nginx.conf
打开Nginx的配置文件,具体配置项目如下:
worker_rlimit_nofile 51200;
worker_rlimit_nofile指令表示一个nginx进程打开文件描述符的最大数量,建议与Linux的ulimit -n的值保持一致。
Linux内核下开启文件打开数量为65535,Nginx的worker_rlimit_nofile最好与之保持一致。
use epoll;
epoll是多路复用I/O中的一种方式,仅用于Linux2.6+内核,可大大提高Nginx的性能。
keepalive_timeout 60;
keepalive超时时间
client_header_buffer_size 32k;
client_header_buffer_size 表示客户端请求头部的缓冲区大小,可根据系统分页大小来设置,一般请求头大小不超过1KB。
Ngnix的HTTP配置
PHP-FPM
$ vim /usr/local/php/etc/php-fpm.conf# 进程管理方式:动态dynamic、静态staticpm = dynamic
pm参数指定了进程管理方式:静态方式:在PHP-FPM启动的时候就创建了指定数量的进程,在运行过程中不会再有变化,但并不是真的就永远不变了。动态方式:在运行过程中动态调整,当然也不是无限制的创建新进程,它受到pm.max_spare_servers参数的影响。简单来说,动态方式适合小内存机器,静态方式适用于大内存机器。动态方式,灵活分配进程,比较节省内存,但同时动态创建回收进程对服务器资源也是一种消耗。
Webbench是由Lionbridge公司开发的网站压力测试工具Webbench标准测试可以展示服务器的两项内容:每秒请求数量、每秒传输数据量Webbench最多可模拟3w并发连接
使用说明
MySQL默认配置为f,系统已提供可选的配置文件。
硬件负载在压测期间,可使用top命令,观察目标服务器上性能变化。
# 查看CPU负载情况$ top# 查看内存使用情况$ free -m# 查看磁盘IO情况$ iostat -kx 2# 查看网络流量情况# sar -n DEV 2