zoukankan      html  css  js  c++  java
  • 优化思路以及优化过程

    nginx响应请求

    1:建立socket连接

    2: 打开文件,并沿socket返回.

    排查问题,也要注意观察这两点,

    主要从系统命令:dmesg ,nginxerror.log来观察

    优化过程:

    1:判断nginx的瓶颈

    1.1: 首先把ab测试端的性能提高,使之能高并发的请求.

    易出问题: too many open files

    原因 :  ab在压力测试时,打开的socket过多

    解决: ulimit -n 30000 (重启失效)

    观察结果: nginx 不需要特殊优化的情况下, 5000个连接,1秒内响应.

    满足要求,wating状态的连接过多.

    1.2: 解决waiting进程过多的问题.

    解决办法: keepalive_timeout = 0;  

    : 请求结果后,不保留tcp连接.

    在高并发的情况下, keepalive会占据大量的socket连接.

    结果: waiting状态的连接明显减少.

    1.3: 解决服务端 too many open files

    分析: nginx要响应,

    1是要建立socket连接,

    2 是要读本地文件

    这两个者限制.

    1: nginx接受的tcp连接多,能否建立起来?

    2: nginx响应过程,要打开许多文件 ,能否打开?

    1个问题: 在内核层面(见下)

    2个问题 (见下)

    系统内核层面:

    net.core.somaxconn = 4096 允许等待中的监听

    net.ipv4.tcp_tw_recycle = 1  tcp连接快速回收

    net.ipv4.tcp_tw_reuse = 1    tcp连接重用   

    net.ipv4.tcp_syncookies = 0  不抵御洪水攻击

    ulimit -n 30000

    Nginx层面:

    解决: nginx.conf 下面: work_connection 加大

    socket:worker_connections  10240;

    文件:Worker_rlimit_nofiles 10000;

    Keepalive_timeout 0;


    Nginx---->php-fpm之间的优化:

    在很多个nginx来访问fpm, fpm的进程要是不够用, 会生成子进程.

    生成子进程需要内核来调度,比较耗时,

    如果网站并发比较大,

    我们可以用静态方式一次性生成若干子进程,保持在内存中. 

    方法 -- 修改php-fpm.conf

    Pm = static  fpm进程始终保持,不要动态生成

    Pm.max_children= 32  始终保持的子进程数量


    Php-mysql的优化

    Linux机器下 ,php 通过IP连接其他mysql服务器时,容易出的问题

    ping,connect不到.

    一般是由:mysql服务器的防火墙影响的.

    并发1万连接,响应时间过长.

    优化思路: 同上的nginx

    1: 内核层面,加大连接数,并加快tcp回收

    2: mysql层面,增大连接数

    3: php层面,用长连接,节省连接数

    4: memcached缓存,减轻mysql负担

    具体:

    1.1  , PHP服务器增大 ulimint -n选项

    1.2 mysql服务器内核配置

    添加或修改如下选项

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_syncookies = 0

    # syscttl -p 使修改立即生效

    2.1  修改mysql.cnf

    Vi  /etc/my.conf

    # service mysqld restart 重启mysql

    3.1 PHP层面 ,用长连接

    Mysql_connect ---> mysql_pconnect

    : pconnect PHPapache模块的形式存在时,无效果.


    Nginx+php+mysql+nginx

    在引入memcached,性能提升不明显,甚至还略有下降

    memcached使50%的请求变快了,但是一部分,反倒慢了.

    原因在于--PHP->memcached也要建立tcp连接,代价挺高,

    但缓存了数据之后,就省去了mysql的查询时间.

    总结: memcached适合存复杂的sql,尤其是连接查询/模糊查询的sql结果

    Memcached服务器的优化(集中在内核的ipv4设置上,不再重复)

  • 相关阅读:
    JUnit测试框架使用
    Android开发环境搭建与SD card
    深入Java泛型(Java泛型擦除机制,使用泛型强转时机,擦除对复写影响,协变返回类型)
    DHTML5(控件动态效果综合应用与表单校验)
    DHTML4(select与checkbox应用)
    DHTML3(表格动态创建,删除行/列,表格行排序,行颜色交替高亮显示)
    DHTML2(window对象,下拉列表)
    DHTML1(节点操作)
    JavaScript_语法,语句,函数,对象
    Html/CSS2_了解CSS
  • 原文地址:https://www.cnblogs.com/setevn/p/7786950.html
Copyright © 2011-2022 走看看