gpt4 book ai didi

php - MySql Processlist 填充了 "Sleep"导致 "Too many Connections"的条目?

转载 作者:IT老高 更新时间:2023-10-28 12:06:37 28 4
gpt4 key购买 nike

我想就一个长期存在的 php/mysql 连接问题寻求您的帮助。

每次我执行“SHOW PROCESSLIST”命令时,它都会显示大约 400 个空闲(状态: sleep )连接到我们的 5 个 Web 服务器的数据库服务器。

这从来都不是什么大问题(而且我没有找到快速的解决方案),直到最近流量增加,从那时起 MySQL 反复报告“to many connections”问题,即使这些连接中有 350 多个在“ sleep ”状态。即使与同一台服务器有休眠连接,服务器也无法获得 MySQL 连接。

当 apache 服务器重新启动时,所有这些连接都会消失。

用于创建数据库连接的 PHP 代码使用普通的“mysql”模块、“mysqli”模块、PEAR::DB 和 Zend Framework Db 适配器。 (不同的项目)。没有一个项目使用持久连接。

提高连接限制是可能的,但似乎不是一个好的解决方案,因为它现在是 450,而且一次只有 20-100 个“真实”连接。

我的问题:

为什么有这么多处于 sleep 状态的连接,我该如何防止呢?

-- 更新:

一次运行的 Apache 请求的数量从不超过 50 个并发请求,所以我猜是关闭连接有问题,或者 apache 在没有附加 phpscript 或其他东西的情况下保持端口打开(?)

my.cnf 以防万一:

innodb_buffer_pool_size = 1024M

max_allowed_packet = 5M
net_buffer_length = 8K

read_buffer_size = 2M
read_rnd_buffer_size = 8M

query_cache_size = 512M
myisam_sort_buffer_size = 128M

max_connections = 450
thread_cache = 50
key_buffer_size = 1280M
join_buffer_size = 16M

table_cache = 2048
sort_buffer_size = 64M
tmp_table_size = 512M
max_heap_table_size = 512M

thread_concurrency = 8

log-slow-queries = /daten/mysql-log/slow-log
long_query_time = 1
log_queries_not_using_indexes

innodb_additional_mem_pool_size = 64M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table

最佳答案

基本上,您会在以下情况下获得处于 sleep 状态的连接:

  • 一个 PHP 脚本连接到 MySQL
  • 执行了一些查询
  • 然后,PHP 脚本会做一些需要时间的事情
    • 无需断开与数据库的连接
  • 最后,PHP 脚本结束
    • 这意味着它与 MySQL 服务器断开连接

因此,当您有许多 PHP 进程保持连接时,通常会导致许多进程处于 sleep 状态,而实际上并没有在数据库端执行任何操作。

一个基本的想法,所以:确保您的 PHP 进程没有运行太久——或者一旦它们不再需要访问数据库就强制它们断开连接。


另一件事,我经常在服务器上有负载时看到:

  • 越来越多的请求来到 Apache
    • 这意味着要生成许多页面
  • 每个 PHP 脚本为了生成一个页面,都会连接到数据库并执行一些查询
  • 随着数据库服务器负载的增加,这些查询会花费越来越多的时间
  • 这意味着更多的进程不断堆积

一个可以提供帮助的解决方案是减少您的查询所花费的时间——优化最长的查询。

关于php - MySql Processlist 填充了 "Sleep"导致 "Too many Connections"的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2407732/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com