zoukankan      html  css  js  c++  java
  • 服务器集群,及服务器高并发调优备忘

    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;
    }
    

      

  • 相关阅读:
    elselect下拉数据过多解决办法
    移动端开发遇到的问题汇总
    win7系统可关闭的服务
    安装Qcreator2.5 + Qt4.8.2 + MinGW_gcc_4.4 (win7环境)
    学习Qt的资源
    c++学习 定位new表达式
    eltablecolumn中添加echarts
    js对象数组封装,形成表格,并在表格中添加echarts直折线图
    Unity学习笔记3:随机数和动画脚本
    关于Unity的一些概念和语法
  • 原文地址:https://www.cnblogs.com/murenhui/p/9035931.html
Copyright © 2011-2022 走看看