我在Linux机器上运行只有8核和16GB内存的mysql。所有连接都来自运行php with codeigniter的同一网络中另一台机器上的Web服务器。
我无法在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的请求,但我找不到任何设置。我搜索谷歌几天试图找到答案没有任何运气。
是否对上述任何软件设置了限制?如有必要,我会发布配置文件。
谢谢。
答案 0 :(得分:0)
检查httpd.conf中的最大Apache工作进程数(ServerLimit和MaxClients)。假设每个工作者有一个固定数量的连接,那么你可能会最大化你的工作者数量,所以没有任何东西要求新的MySQL连接。
答案 1 :(得分:0)
抱歉,您刚在Google上找到此邮件,但您的配置是foobar
max_connections=500
open-files-limit = 500
table_open_cache = 512
table_definition_cache = 1024
open-files-limit:500#;不好!</ p>
table_open_cache:512 ... * 2+每个表打开文件= 1024个最小打开文件
max_connections:500个每个打开的连接启动一个新的文件句柄来缓冲。
你的mysql只会启动130个表(核心表),只剩下240个文件句柄,可以在数据查询和连接之间共享。对于具有表查询的每个连接,消耗3个以上的文件句柄(连接,数据表,索引文件)。在获得150个连接之前,这会使您的打开文件最多。对于那种数据库使用情况,open-files-limit需要启动&gt; 2048。
更多帮助:
show global status like '%open%';
show global status like '%onnect%';
自己查看实际使用的文件/连接数。某些操作系统(Windows XP)硬限制文件/网络连接。尝试谷歌搜索“mysql'YOUR-OS'150个连接”,看看这是否是限制因素。