更改

跳到导航 跳到搜索
添加3,305字节 、 2019年10月29日 (二) 23:03
第166行: 第166行:  
== 进程间的通信方式  ==
 
== 进程间的通信方式  ==
 
== fpm ==
 
== fpm ==
 +
* 进程管理方式pm,静态、动态。
 
* 合适的超时时间request_terminate_timeout、max_execution_time
 
* 合适的超时时间request_terminate_timeout、max_execution_time
 
* 看服务器性能,设置进程数量max_children
 
* 看服务器性能,设置进程数量max_children
 
* fpm进程处理最大请求数max_requests
 
* fpm进程处理最大请求数max_requests
      
== nginx ==
 
== nginx ==
第196行: 第196行:     
# HTML静态化
 
# HTML静态化
  效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
+
#: 效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
 
# 图片服务器分离
 
# 图片服务器分离
  把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
+
#: 把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
# 数据库集群和库表散列及缓存
+
# 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化
  数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
+
#: 避免慢查询过多阻塞
 +
# 数据库集群和库表散列及缓存,使用缓存、尽量减少数据库IO
 +
#: 数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
 
# 镜像:
 
# 镜像:
  尽量减少下载,可以把不同的请求分发到多个镜像端。
+
#: 尽量减少下载,可以把不同的请求分发到多个镜像端。
 
# 负载均衡:
 
# 负载均衡:
  Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。
+
#: Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。
 +
 
 +
== Laravel请求生命周期 ==
 +
 
 +
#、Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。
 +
#、注册类文件自动加载器 : Laravel通过 composer 进行依赖管理,无需开发者手动导入各种类文件,而由自动加载器自行导入。
 +
#、创建服务容器:从 bootstrap/app.php 文件中取得 Laravel 应用实例 $app (服务容器)。
 +
#、创建 HTTP / Console 内核:传入的请求会被发送给 HTTP 内核或者 console 内核进行处理
 +
#、载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。
 +
#、分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件
 +
 
 +
https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/80637277
 +
 
 +
== php生命周期 ==
 +
# 模块初始化阶段  ---   php_module_startup()
 +
这个阶段主要进行php框架、zend引擎的初始化操作。这个阶段一般是在SAPI启动时执行一次,对于FPM而言,就是在fpm的master进行启动时执行的。php加载每个扩展的代码并调用其模块初始化例程(MINIT),进行一些模块所需变量的申请,内存分配等。
 +
# 请求初始化阶段  ---   php_request_startup()
 +
当一个页面请求发生时,在请求处理前都会经历的一个阶段。对于fpm而言,是在worker进程accept一个请求并读取、解析完请求数据后的一个阶段。在这个阶段内,SAPI层将控制权交给PHP层,PHP初始化本次请求执行脚本所需的环境变量。
 +
# 执行脚本阶段     ---   php_execute_script()
 +
php代码解析执行的过程。Zend引擎接管控制权,将php脚本代码编译成opcodes并顺次执行
 +
# 请求关闭阶段     ---   php_request_shutdown()
 +
请求处理完后就进入了结束阶段,PHP就会启动清理程序。这个阶段,将flush输出内容、发送http响应内容等,然后它会按顺序调用各个模块的RSHUTDOWN方法。 RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
 +
# 模块关闭阶段     ---   php_module_shutdown()
 +
该阶段在SAPI关闭时执行,与模块初始化阶段对应,这个阶段主要是进行资源的清理、php各模块的关闭操作,同时,将回调各扩展的module shutdown钩子函数。这是发生在所有请求都已经结束之后,例如关闭fpm的操作。(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)
 +
 
 +
 
 +
== 504问题排查 ==
 +
Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI
 +
 
 +
* 问题排查:nginx错误日志,fpm日志,应用日志。
 +
** nginx作为调用方交由php处理的任务长时间没有返回、php作为服务提供者,严重耗时,长时间延迟。
 +
** php-fpm模式下,php处理耗时比较长任务时,会发生堵塞。
 +
* 解决
 +
** 修改配置,最大内存,执行时间。。。
 +
** 如果是数据库耗时,优化数据库结构,比如加索引
 +
** 如果是程序耗时,可以采用异步的方法,
 +
 
    +
== laravel orm加全局条件? ==
    +
# 实现Illuminate\Database\Eloquent\ScopeInterface接口,apply方法
 +
# 重写boot方法, static::addGlobalScope(new ScopeName);
   −
== Laravel请求生命周期 ==
     −
1、Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。
+
== laravel 事件 ==
2、注册类文件自动加载器 : Laravel通过 composer 进行依赖管理,无需开发者手动导入各种类文件,而由自动加载器自行导入。
+
# 创建事件、 监听器
3、创建服务容器:从 bootstrap/app.php 文件中取得 Laravel 应用实例 $app (服务容器)
+
# EventServiceProvider中注册
创建 HTTP / Console 内核:传入的请求会被发送给 HTTP 内核或者 console 内核进行处理
+
# event函数调用
4、载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。
+
 
5、分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件
+
== sql优化举例 ==
 +
# 加索引
 +
# 尽量避免计算,大于小于不等于、使用函数、隐式类型转换
 +
# like ”%“开头的
 +
# 批量insert
 +
# 分页
 +
 
 +
* sql语句优化,索引优化
 +
* 使用缓存、尽量减少数据库IO
 +
* 分布式
 +
 
 +
== sql语句的执行顺序 ==
 +
开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果
匿名用户

导航菜单