服务器集群,及服务器高并发调优备忘

Apache 压力测试
1000个并发 50000次
./bin/ab -c 1000 -n 50000 http://192.168.0.9999:8080

too many open files 24 打开文件数
1、优化服务器 打开文件数 ulimit -n number

ulimit -n 20000  #允许打开20000个

  

2、安装nginx 统计模块便于观察nginx状态
--with-http_stub_status_module

nginx.conf
location / {
stub_status on;
access_log off;
allow 192.168.xxx.xxx;
dent all;
}

  

3、高并发优化思路

nginx 响应请求
a、建立socket链接,打开文件并沿socket返回

从系统的dmesg 和 nginx的 error.log 来观测问题

A、从socket角度需要优化的
系统层面:
最大连接数somaxconn、
加快tcpip链接的回收(recycle)、
空的tcp是否允许回收利用reuse 、
不做洪水抵御

nginx:子进程允许打开的链接 (worker_connections)

B、从系统文件层面需要优化的
nginx worker_limit_nofiles
linux 系统 ulimit 设置较大的合理的值

C、高并发网站中nginx 需要注意 keepalive_timeout 选项的设置,高并发情况一般设置为0秒;
作用就是快加tcp的快速回收

more /proc/sys/net/core/somaxconn 修改somaxconn值为 50000

echo 50000 > /proc/sys/net/core/somaxconn

cat /proc/sys/net/ipv4/tcp_tw_recycle tcp 回收利用,设置为1
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

cat /proc/sys/net/ipv4/tcp_tw_reuse 空的tcp回收利用,设置为1
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

cat /proc/sys/net/ipv4/tcp_syncookies 不做洪水抵御 设置为0
echo 0 > /proc/sys/net/ipv4/tcp_syncookies

  

PHP方面的优化

1、设置php-fpm.conf配置文件, pm 运行方式为static,运行方式分为静态和动态两种方式:
pm=static #静态方式
pm.max_children=16  #一般一个fpm的子进程设置16个

2、然后配置fpm.conf 配置文件,可以使用多个配置文件来开启多个fpm进程
可以创建一个fpm-static.sh脚本 来管理多个fpm.conf文件,写入内容如下:

/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm001.conf
/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm002.conf

  

3、然后利用nginx的upstrem模块来均衡请求到上面的php-fpm服务器对应端口
nginx配置php-fpm

upstream phpserver {
  server 192.168.1.110:9000;
  server 192.168.1.110:9001;
  server 192.168.1.110:9002;
  server 192.168.1.110:9003;
}
location ~ .php$ {
  fastcgi_pass phpserver; #fastcgi 参数需要配置成 upstream的设置
}

  

4、nginx配置 memcach 缓存

upstream mcserver {
consistent_hash $request_uri;  #一次性hash ,用request_uri进行hash
  server 192.168.1.204:1121;
  server 192.168.1.204:1122;
  server 192.168.1.204:1123;
  server 192.168.1.204:1124;
}
location / {
set $memcached_key $request_uri;
memcached_pass mcserver;
error_page 404 /callback.php;
}

  

memcached.sh脚本,方便配置

#!/bin/bash
/usr/local/memcached/bin/memcached -u nobody -c 2000 -p 11211 -m 512 -d
/usr/local/memcached/bin/memcached -u nobody -c 2000 -p 11212 -m 512 -d

  

 Linux 系统级别的调优

1、调整系统同时打开文件数量

ulimit -n 20480

  

2、tcp最大连接数调整

echo 10000> /proc/sys/net/core/somaxconn

  

3、tcp链接回收时效及时

echo 1> /proc/sys/net/ipv4/tcp_tw_reuse
echo 1> /proc/sys/net/ipv4/tcp_tw_recycle

  

4、不做tcp洪水抵御

echo 0> /proc/sys/net/ipv4/tcp_syncookies

  

Nginx 调优说明

1、worker_connections work_rlimit_nofile #数值加大
2、keepalive_timeout
3、worker_processes 4; #进程数改成cpu数目的2倍
4、worker_rlimit_nofile 20000; #nginx 进程打开的最多文件数,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

events {
#使用epoll的I/O模型
use epoll;

#每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
worker_connections 20000; 
  multi_accept on;
}
http {
  keepalive_timeout 0;
}

  

原文地址:https://www.cnblogs.com/murenhui/p/9035931.html