星点互联edus视频培训演示站
标题: PHP连接mysql时卡死 [打印本页]
作者: small团团子 时间: 2020-11-28 10:02
标题: PHP连接mysql时卡死
最近线上一台服务器偶尔会出现连接mysql的时候PHP进程卡死的情况,排查后发现,PHP当时和mysql之间的tcp连接已经建立,但怀疑tcp连接建立后,mysql没有发送greeting packet给PHP,然后就导致PHP一直在等待。
模拟测试然后我写了下面一段测试代码,为了模拟上述的那种情况,数据库地址和端口是使用百度主页的地址和端口,然后在浏览器里访问运行,代码如下:
- $mysql = new mysqli();
- $mysql->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
- $mysql->real_connect('www.baidu.com', 'root', 'xxx', 'xxx', 80);
复制代码
代码里已经有使用MYSQLI_OPT_CONNECT_TIMEOUT设置了连接超时时间为5秒,但并没有生效,运行后PHP还是卡死了,不会超时,跟线上环境的情况一模一样。请问有什么方法可以设置超时时间吗?
测试环境windows 10
PHP 5.6
作者: admin 时间: 2020-11-28 10:02
找到解决方法了,这个场景的超时是属于读写超时,不是连接超时,所以MYSQLI_OPT_CONNECT_TIMEOUT配置的超时是不会生效的。读写超时需要通过php.ini里的mysqlnd.net_read_timeout参数来配置才能生效。
注:PHP 5.3(含) ~ PHP 7.1(含) 只能通过修改php.ini文件来调整 net_read_timeout 的值,PHP 7.2(含)之后的版本可以在代码里通过 ini_set 函数来调整,例如:ini_set('mysqlnd.net_read_timeout', 1)
欢迎光临 星点互联edus视频培训演示站 (http://47.100.112.22/demo/edus/) |
Powered by Discuz! X3.5 |