大家好!   我的应用设置为 300个连接时候,连接数据库出现异常:
"Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Data source rejected establishment of connection,  message from server: "Too man
y connections"如果我把连接数调到 3000,又会出现异常:
"Caused by: java.sql.SQLException: Out of memory (Needed 257408 bytes)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)"是不是MySQL的连接数和内存是互相影响的? 每次增加一个连接需要申请多少M内存?? 我得机器是双核CPU,8g内存,应该都够用的,请问MySQL出现这2个异常应该怎样调节参数呢?谢谢!

解决方案 »

  1.   

    解决方法是修改/etc/mysql/my.cnf,添加以下一行:
    set-variable = max_connections=500或在启动命令中加上参数 max_connections=500
    就是修改最大连接数,然后重启mysql.默认的连接数是100,太少了,所以容易出现如题错误.
      

  2.   

    连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout  都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。
      

  3.   

    在my.ini文件中[mysqld]下添加
    set-variable = max_connections= 10000然后Save modification 保存修改。
    最后把mysql重新启动一次即可。
      

  4.   

    3000 已经没有"Too man 
    y connections"的错误,但是又报Out of memory  ????
      

  5.   

    每个连接到MySQL服务器的线程都需要有自己的缓冲。大概需要立刻分配256K
      

  6.   

    你的并发连接数调成上边所说的500,差不多够了。
    然后在java应用里使用连接池,最大连接数搞成200个,也足够了。
      

  7.   

    我得内存和CPU都足够用,为什么会报错说 out of memory?java服务器设置为: set OPT=-Xms4096m ?Xmx8192m -Xss8m -XX:PermSize=4096m -XX:MaxPermSize=8192m都已经很大了,而且我得硬件都跟上了!
      

  8.   

    用java的应该用java的连接池,不要在数据库上开这么多连接,非常耗资源的
    连接、断开也慢
      

  9.   

    mysql的内存参数应该是在机器配置允许范围内越大越好吧? 为什么官方说mysql配置的内存过大会引起崩溃?
      

  10.   

    估计是会导致mysql请求分配内存失败!特别是每连接独享的内存设置存在问题,当连接数过多时,内存会相当稀缺!
      

  11.   

    innodb
    不能理解的是为什么我机器内存越大,给MySQL分配的内存越大反而也会出现问题? 数据库不是分配可使用的内存越大越好吗? 我的机器有 8G足够了.  哪里看是连接独享? 独享需要修改哪些设置? 谢谢!
      

  12.   

    Here is the final solution.
    http://bbs.chinaunix.net/thread-1219829-1-3.html
      

  13.   

    请注意官方手册上的一句话:警告:在32位GNU/Linux x86上,你必须要小心不要设置过高的内存用量。glibc可能允许进程堆积在线程堆栈上发展,它会造成你的服务器崩溃。如果下列表达式的值接近或者超过2GB,系统会面临危机:innodb_buffer_pool_size+ key_buffer_size+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)+ max_connections*2MB每个线程使用一个堆栈(通常是2MB,但在MySQL AB二进制分发版里只有256KB)并且在最坏的情况下也使用sort_buffer_size + read_buffer_size附加内存。