【发布时间】:2013-07-01 14:14:35
【问题描述】:
我们正在使用 ab (apachebench) 在创建 MySQL 连接、查询然后关闭连接(通过 PHP)的页面上对我们的一个网站进行基准测试。
我们已将 my.cnf 硬编码为 500 的 max_connections 限制。
当我们运行压力测试时,MySQL 似乎从未达到我们指定的连接限制,尽管我们确实有从我们的脚本返回的“无法连接到数据库”类型的错误。就好像 MySQL 一次打开的连接数不能超过大约 237 个。
这是我们当前的 my.cnf:
[mysqld]
max_connections = 500
port = 3306
socket = /var/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 128M
thread_concurrency = 8
max_heap_table_size = 512M
tmp_table_size = 512M
table_cache = 2048
用户限制:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 16384
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1250
virtual memory (kbytes, -v) unlimited
问题似乎出在 PHP 或 MySQL 上(或者当然是我们的错误配置)。
非常感谢任何帮助、建议和提示 - 提前致谢。
【问题讨论】:
-
你如何衡量活动连接?
-
我们不测量实时连接,我们在压力测试后使用状态变量 Max_used_connections 一次测量最大使用连接。此外,MySQLTuner(perl 脚本)显示:可用连接的最高使用率:47% (237/500)。
-
如果您收到 "unable to connect to the database" 作为错误,这不是因为它命中
max_connections- 您会看到 too many连接 在这种情况下。失败似乎还有另一个问题。 -
这不是我们看到的确切错误,因为我们使用自定义 SQL 连接脚本,目前它有点损坏......事实上,我不知道连接失败的确切原因只是 PHP 脚本无法连接到数据库服务器。我将重写 PHP 以提供 PHP MySQL 库发出的确切错误消息,然后在此处更新。把它留给我,感谢您的 cmets。
-
好的,所以我重新编写了我们的错误报告脚本,PHP/MySQL 发出的确切错误消息是:
MySQL Error: Connection refused所以这是一个连接被拒绝的问题。回到我原来的问题;为什么?感谢您提前提供任何帮助。
标签: mysql macos apache stress-testing ulimit