1

我在只运行 8 核和 16GB 内存的 mysql 的 linux 机器上。所有连接都来自同一网络中另一台机器上的 web 服务器,该机器使用 codeigniter 运行 php。

我无法在 mysql 上获得超过 150 个连接。

我的 my.cnf 是:

[mysqld]
user=mysql
port            = 3306
socket          = /tmp/mysql.sock
datadir = /usr/local/mysql/var/
skip-external-locking
max_connections=500
max_user_connections=500
open-files-limit = 500
key_buffer_size = 2048M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 128M
thread_cache_size = 250
table_definition_cache = 1024

query_cache_size = 32M
query_cache_limit = 32M
table_cache=1024
max_heap_table_size=1024M
key_buffer=2048M
wait_timeout=60
thread_concurrency = 16
long_query_time = 1
tmp_table_size=256M

show status 返回 max_connections 和 max_user_connections 为 500。

由于 mysql 说连接限制为 500,我认为 PHP、apache 或 codeigniter 中还有其他设置限制了对 mysql 的请求,但我找不到任何设置。我已经在谷歌搜索了几天试图找到答案,但没有任何运气。

是否对上述任何软件设置了限制?如有必要,我将发布配置。

谢谢你。

4

2 回答 2

0

检查 httpd.conf 中的最大 Apache 工作进程数(ServerLimit 和 MaxClients)。假设每个工作人员的连接数固定,您可能会最大化工作人员的数量,因此没有请求新的 MySQL 连接。

于 2012-11-20T17:57:23.517 回答
0

抱歉,刚刚在 Google 上找到了这个,但你的配置是 foobar

max_connections=500
open-files-limit = 500
table_open_cache = 512
table_definition_cache = 1024

打开文件限制:500 #; 不好!

table_open_cache: 512... * 每个表 2+ 个打开文件 = 最少使用 1024 个打开文件

max_connections: 500 每个打开的连接都会启动一个新的文件句柄来缓冲。

您的 mysql 将打开大约 130 个表以启动(核心表),这使您只有 240 个文件句柄可以在数据查询和连接之间共享。对于表查询的每个连接,都会消耗 3 个以上的文件句柄(连接、数据表、索引文件)。在您获得 150 个连接之前,这会使您的打开文件最大化。对于这种数据库使用,open-files-limit 需要从 >2048 开始。

更多帮助:

show global status like '%open%';
show global status like '%onnect%';

亲自查看实际使用了多少文件/连接。某些操作系统 (Windows XP) 硬限制文件/网络连接。尝试谷歌搜索“mysql 'YOUR-OS' 150 connections”,看看这是否是限制因素。

于 2013-11-13T20:00:16.287 回答