网站首页 > 开源技术 正文
问题
今天上线新功能,有一个接口原始请求方式是get,后来改为post方式,预发环境测试正常,然后发布到线上,线上直接报错,错误信息如下:
[2017-11-29 19:09:02] xxxx,line:242 message:[code => 405 | msg => 请求方法错误(GET or POST)。
追查
提示就是请求方式错误,但是看代码一切正常,直接op重启php-fpm,然后正常了,线上开启了opcache,但是在发布代码后会自动触发fpm重启,不过并没有生效,追查问题。
查看路由文件(stat):
Access: 2017-11-29 18:28:17.553780923 +0800
Modify: 2017-11-29 18:35:15.539780895 +0800
Change: 2017-11-29 18:35:16.539780895 +0800
fpm重启正常,发现最后访问时间明显比modify时间晚,说明更新后并没有访问文件,还是走的缓存。大致问题在于机器更新代码并未完成时,fpm就重启了,这两个操作存在秒级差的问题,偶现,应该和一次上线n个机器从一台代码服务器上拉取代码存在延迟导致的。
解决方法
1. 在根目录建立一个php文件,里面包含<?php opcache_reset();?> ,通过http请求(浏览器)来运行(最好限制下本地IP运行),因为opcache_reset在某些模式下不支持cli模式,所以为了统一,最好都通过http请求运行
2. 工具 Cachetool
3. 手动重启fpm,强制opcache更新
opcache配置项
开启方式:在php.ini中设置,
[opcache]zend_extension = "G:/PHP/php-5.5.6-Win32-VC11-x64/ext/php_opcache.dll"
; Zend Optimizer + 的开关, 关闭时代码不再优化
opcache.enable=1
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
; Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB); 推荐 128
opcache.memory_consumption=64
; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB); 推荐 8
opcache.interned_strings_buffer=4
; 最大缓存的文件数目 200 到 100000 之间; 这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和
opcache.max_accelerated_files=2000
; 内存“浪费”达到此值对应的百分比,就会发起一个重启调度.
opcache.max_wasted_percentage=5
; 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,; 以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,; 但是会对已存在的应用造成破坏.
opcache.use_cwd=0
; 开启文件时间戳验证,当这个选项被启用(设置为1),PHP会在opcache.revalidate_freq设置的时间到达后检测文件的时间戳(timestamp)。如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查
opcache.validate_timestamps=1
; 2s检查一次文件更新 注意:0是一直检查不是关闭; 推荐 60,这个选项用于设置缓存的过期时间(单位是秒),当这个时间达到后,opcache会检查你的代码是否改变,如果改变了PHP会重新编译它,生成新的opcode,并且更新缓存。值为“0”表示每次请求都会检查你的PHP代码是否更新
opcache.revalidate_freq=2
; 允许或禁止在 include_path 中进行文件搜索的优化
opcache.revalidate_path=0
; 是否保存文件/函数的注释 如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释; 推荐 0
opcache.save_comments=1
; 是否加载文件/函数的注释
opcache.load_comments=1
; 打开快速关闭, 打开这个在PHP Request Shutdown的时候会收内存的速度会提高,推荐 1
opcache.fast_shutdown=1
这里只列出部分配置,全部配置项请参考官方文档,关于opcache相关问题,欢迎留言讨论。
参考文档:
http://php.net/manual/zh/opcache.configuration.php#ini.opcache.revalidate-freq
猜你喜欢
- 2024-10-25 centos 5.4 32位安装nginx php mysql
- 2024-10-25 php中Opcache是什么?Opcache原理和使用的介绍
- 2024-10-25 使用 OpCache 提升 PHP 性能(php开启opcache)
- 2024-10-25 Win2003+IIS下安装Xcache加速的配置方法分享
- 2024-10-25 怎样正确做 Web 应用的压力测试?(web端怎么做压力测试)
- 2024-10-25 常见的LNMP 502错误解决方法(502 503错误)
- 2024-10-25 「预警」程序员要当心 PhpStudy被曝植入“后门”
- 2024-10-25 Window下PHP环境安装(php 安装)
- 2024-10-25 ubuntu超级简单一键安装LNMP环境(ubuntu lnmp)
- 2024-10-25 如何用phpstudy搭建本地服务并建dedecms网站?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)