[英]PHP pdo-mysql timeouts on 2000sec(too long!)
在高通信量的环境中,某些PHP会话停留约30分钟,并最终出现PDOException: SQLSTATE[HY000] [2002] connection timed out
PDO构造函数中的PDOException: SQLSTATE[HY000] [2002] connection timed out
。
根据New Relic的追踪,等待时间仅为2000秒。
漫长的等待似乎是PHP已到达MySQL服务器,但连接建立将停止一半。
我想将等待时间缩短到30秒,但是我找不到在哪里设置任何配置。 有什么建议吗?
环境
我测试过但没用的东西
set_time_limit(30)
ini_set("default_socket_timeout", 30)
new PDO($dsn, 'user', 'pass', [PDO::ATTR_TIMEOUT => 30])
pcntl_signal()
作为尝试中止PHP脚本的异步库。 new PDO()
时,该事件永远不会发生 MySQL变量包含time
+---------------------------------+-------------------+
| Variable_name | Value |
+---------------------------------+-------------------+
| binlog_max_flush_queue_time | 0 |
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| flush_time | 0 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_old_blocks_time | 1000 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| long_query_time | 0.010000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| slow_launch_time | 2 |
| timed_mutexes | OFF |
| wait_timeout | 28800 |
+---------------------------------+-------------------+
try {
$pdo = new PDO("mysql:host={$db_host};port={$db_port};dbname={$db_name};charset={$db_charset}", $db_user, $db_pass, [
PDO::ATTR_TIMEOUT=>2, // ATTR_TIMEOUT here means connection timeout, in senconds
]);
} catch(PDOException $e) {
echo $e->getMessage;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.