• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 如何解决php方法执行时间过长的问题

如何解决php方法执行时间过长的问题

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了php方法执行时间过长等相关知识,希望对您有所帮助

php方法执行时间过长的解决办法:1、进行Nginx网关请求超时设置;2、进行PHP脚本执行时间上限设置。


如何解决php方法执行时间过长的问题


如何解决php方法执行时间过长的问题?解决 PHP 方法执行时间过长导致 502 Bad Gateway

背景

最近遇到一个问题,有一段 PHP 代码需要涉及到长时间的 IO 操作,而这一段会阻塞请求所在的线程,导致请求超时。

你可能会说,这有啥难的,开个线程异步去做,做好了更新状态就 OK 了。这真是一个不错的方案,可惜这一整套代码都是别人的。如果要修改代码,业务上会牵一发而动全身,所以我的解决办法是尽量不修改代码的情况下,通过配置超时时间来解决这个问题。

解决方案

从以上问题来看,超时主要受到两个因素的影响:

Nginx 网关请求超时设置

PHP 脚本执行时间上限设置

我们依次进行设置。


Nginx 网关请求超时设置

Nginx 支持超时的设置粒度很细。主要使用的几个如下:

keepalive_timeout

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。

fastcgi_connect_timeout

与FastCGI服务器建立连接的超时。

fastcgi_send_timeout

设置将请求传输到FastCGI服务器的超时。 仅在两次连续写入操作之间设置超时,而不是为整个请求的传输。 如果FastCGI服务器在此时间内未收到任何内容,则关闭连接。

fastcgi_read_timeout

从FastCGI服务器读取响应的超时。 仅在两个连续的读操作之间设置超时,而不是为整个响应的传输。 如果FastCGI服务器在此时间内未传输任何内容,则关闭连接。

考虑到一次请求 PHP 脚本的执行和后三个设置比较相关。所以在对应网站的 Nginx 配置文件中添加设置即可。

fastcgi_connect_timeout 600s;fastcgi_send_timeout 600s;fastcgi_read_timeout 600s;


PHP 脚本执行时间上限设置

PHP 脚本的执行时间主要是受两个配置的影响:

php.ini 中 max_execution_time 和 max_input_time

php.ini 的默认位置在 /usr/local/php/etc/

将 php.ini 配置文件中的这两个配置项修改为超时时间上限。

max_execution_time = 600max_input_time = 600php-fpm.conf 中 request_terminate_timeout

php-fpm.conf 的默认位置在 /usr/local/php/etc/

request_terminate_timeout 也设置为超时时间的上限。

request_terminate_timeout = 600

修改完成后重启 Nginx 和 php-fpm 即可。

service nginx reload/etc/init.d/php-fpm reload


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2022-04-29AI制作立体三维线条字母标志
  • 2022-04-29mysql聚簇索引和非聚簇索引的区别
  • 2022-04-29Thinkphp5中是如何自定义全局异常
  • 2022-04-29PHP怎么判断字符串含不含中文
  • 2022-04-29ThinkPHP5通过ajax插入图片并实时显示(完整代码)
  • 2022-04-29PhotoShop打造Wacom中国风熊猫创意广告海报制作教程
  • 2022-04-29聊聊在Angular项目中怎么实现权限控制?
  • 2022-04-29Angular如何对请求进行拦截封装?
  • 2022-04-29Workerman中你不得不知道的属性reusePort
  • 2022-04-29PHP获取QQ用户昵称+头像API接口代码

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 浅析如何从小程序跳到H5页面/微信小程序跳转到H5页面实例解析
    • 浅析安卓app和微信授权登录及分享完整对接(代码分享)
    • Photoshop绘制十二生肖按钮图标教程
    • Photoshop设计立体质感的标签式按钮
    • html5新增的表单控件和表单属性有哪些
    • Photoshop制作折纸风格的短信软件图标
    • PhotoShop CS6 3D功能制作3D立体文字效果教程
    • Thinkphp中如何按照周来实现将数据分类
    • Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
    • 通过实例来了解Laravel中管道的使用方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有