NGINX PHP Redis Mysql性能瓶颈提升小计

6 篇文章 0 订阅

最近在弄个环境,使用PHP作为开发语言,辅助NGINX、Redis、Mysql进行架构设计,这里记录下性能提升的几个点。

PHP-FPM

php-fpm是一种多进程模型,来了一个请求就会分配一个进程去处理,处理完成之后进行销毁,通过修改www.conf提升php-fpm的处理效率。

;   static  - a fixed number (pm.max_children) of child processes;
;             pm.max_children      - the maximum number of children that can
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;             pm.max_spare_servers - the maximum number of children in 'idle'
;             pm.max_children           - the maximum number of children that
;             pm.process_idle_timeout   - The number of seconds after which
pm = dynamic
; The number of child processes to be created when pm is set to 'static' and the

示例

pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 100
pm.max_requests = 500

NGINX

nginx主要进行负载均衡以及限流优化,配置如下。

limit_req_zone $binary_remote_addr zone=test_req:10m rate=3r/s;
            upstream test {
                server 127.0.0.1:8080;
            }
            server {
                listen 80;
                error_page   503   /data/503.html;
                location / {
                        limit_req zone=test_req burst=5 nodelay;
                        proxy_redirect off;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_pass http://test;
                }
            }

负载均衡: 定义一个upstream,之后通过proxy_pass设置负载。

限流: 使用limit_req_zone定义一个zone=test_req,使用binary_remote_addr作为区分字段,后面10m表示存储大小,rate表示访问速率,示例中每秒3个。

之后在需要限流的请求里增加limit_req zone=test_req;应用请求即可。

MySql

MySQL主要就两点优化,一个是查询优化,这个就索引搞定。

# 修改索引
ALTER table tableName ADD INDEX indexName(columnName)

# 创建时索引
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
); 
# 唯一索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

第二个提升点是连接数优化

默认mysql支持的连接数很小,可以通过show variables like '%max_connection%' 查看

设置连接数可以直接在mysql中热设置,也可以通过修改my.conf,增加max_connections=32000字段即可,示例:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=32000

这里有个地方需要注意下,在设置连接数之后可能会遇到214最大限制的问题。

vi /etc/systemd/system/mariadb.service.d/limits.conf

[Service]

LimitNOFILE=65535

LimitNPROC=65535

保存,退出。

systemctl daemon-reload

systemctl restart mariadb.service

Redis

redis暂时没有出现瓶颈问题,以后需要再说。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值