星点互联edus视频培训演示站

标题: PHP连接mysql时卡死 [打印本页]

作者: small团团子    时间: 2020-11-28 10:02
标题: PHP连接mysql时卡死
最近线上一台服务器偶尔会出现连接mysql的时候PHP进程卡死的情况,排查后发现,PHP当时和mysql之间的tcp连接已经建立,但怀疑tcp连接建立后,mysql没有发送greeting packet给PHP,然后就导致PHP一直在等待。


模拟测试
然后我写了下面一段测试代码,为了模拟上述的那种情况,数据库地址和端口是使用百度主页的地址和端口,然后在浏览器里访问运行,代码如下:

  1. $mysql = new mysqli();
  2. $mysql->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
  3. $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