mysql connection 连接拒绝

龙雪刚 发布于 2011/07/20 17:34
阅读 4K+
收藏 0
public void Test(){
int threadCount = 500;
for (int i = 0; i < threadCount; ++i) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
       Thread thread = new Thread() {
           public void run() {
               try {
                int LOOP_COUNT = 10000; 
for (int i = 0; i < LOOP_COUNT; ++i) {
                       int router = new Random().nextInt(2);
                       if (router == 1) {
                        insert();
}else {
select();
}
    log.info("--------------operate sucessful . ------");
}
               } catch (Exception ex) {
                ex.printStackTrace(); 
               }
           }
       };
   thread.start();
}
} 

我在测试的时候,运行一分钟左右出现了错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.

This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. 

For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.

[root@localhost log]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 137216
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 137216
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

[root@localhost log]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.ip_local_port_range = 1024 65500
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.ip_conntrack_max = 8192

实在想不出其它的办法了,各位有没有好的思路?太诡异了。但是我连我本地的机器是没有问题的。本机是XP系统。

以下是问题补充:

@龙雪刚:我代码风格挺好的,只是贴到这里就成这样子。 (2011/07/20 17:53)
@红薯:代码的风格实在是。。。。太乱了,排版太乱了 (2011/07/20 17:46)
加载中
0
V
V
你这个问题我在linux下也遇到过

可以参考后来改过来的mysql参数调置:

max_connections = 500
#可以设更大些

interactive_timeout = 86400
#这是一天的设置

wait_timeout = 86400  
#这两个主要是用来解决的我超时问题

event_scheduler=ON
innodb_lock_wait_timeout = 120
max_allowed_packet = 8M

#下面这三个照写
0
V
V
但细看你的问题好像跟我遇到的问题不太一样
0
V
V

his is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. 

这句话应该是重点,我觉得你应该从这里突破

0
龙雪刚

我也是从这点来解决问题,上面贴出来的linux下tcp连接数就是修改后的情况,但还是不行。

我的MAX_CONNECTIONS = 1000

0
hnynes
hnynes
你先确认下,能不能连上那个mysql的机器,直接用mysql的客户端先连接下.先排除这种情况,再看是什么问题
0
nightjar
nightjar
从错误日志看是你客户端的socket端口不够用了 可能需要把操作系统的最大文件句柄数调大
0
loulley
loulley
我也碰到楼上的问题了,现在还没解决,楼主解决了吗?
0
龙雪刚
是由于我的测试端处于XP下面,是XP下面的端口不够用造成的。
0
h
hwlcathy
想知道楼主的具体解决方法,我也遇到了同样的问题,在处理大数据的时候报这个错,我在每个调用链接之后都关闭了,可还是报这个错,单纯调大最大连接数也只是让这个错晚点出现,感觉光靠调大最大连接数并不是根本上解决问题的方法,求助楼主怎么解决问题的?
0
三国vip
三国vip
我也遇到相同的问题了,请教楼主是怎么解决的?
返回顶部
顶部