记一次数据库连接问题

最近做项目的时候发现一个问题,网站打开的时候,一停的在转,大概5分钟以后返回504网关超时

当时第一反应是我的网络架构出问题了,于是从前端LVS一直往下查,我的架构是LVS+NGINX+TOMCAT,一直到nginx这块都没问题,从nginx的错误日志也看不出什么,同样的报504网关超时,当时就在想502坏的网关是以为nginx把请求抛给tomcat的时候找不到tomcat的端口,504会不会也一样呢?

[[email protected] ~]# netstat  -lntup|grep 800
tcp        0      0 :::8000                     :::*                        LISTEN      4208/java              
tcp        0      0 :::8002                     :::*                        LISTEN      4208/java           
没看出什么问题,再与线上服务器对比的时候找到问题

[[email protected] ~]# netstat  -lntup|grep 800
tcp        0      0 :::8000                     :::*                        LISTEN      4208/java           
tcp        0      0 ::ffff:127.0.0.1:8001       :::*                        LISTEN      4208/java           
tcp        0      0 :::8002                     :::*                        LISTEN      4208/java          
发现tomcat少了一个端口,为什么没会导致这个问题呢?

查看tomcat日志,发现tomcat没起来,一直卡在连接连接数据库那块

于是我在web端查看mysql端口,发现能通

[[email protected] server]# telnet 10.10.0.126 3306
Trying 10.10.0.126...
Connected to 10.10.0.126.
Escape character is ‘^]‘.
^]
telnet> \q
Connection closed.

到这里发现自己的思路断了!!

峰回路转,无意中在db2上查看了一下mysql端口,发现和在web上的结果不一样

[[email protected] root]# telnet 10.10.0.126 3306
Trying 10.10.0.126...
Connected to 10.10.0.126.
Escape character is ‘^]‘.
N
5.5.32-log0pKhJw=db!>MIgIxAwW,s"mysql_native_password
这是为什么呢?

于是一点点的回忆,思考web和db的区别,最后终于找到问题所在

10.10.0.126和10.10.0.127是我数据的读vip和写vip,只有这两台机器才有10.10.0.0网段的ip

web上只有一个外网ip,于是route -n查看了一下web和db的网关

[[email protected] server]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
202.192.168.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth1
0.0.0.0         202.192.168.1   0.0.0.0         UG    0      0        0 eth1

[[email protected] ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
202.192.168.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.10.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         202.192.168.1   0.0.0.0         UG    0      0        0 eth0

很明显,web上缺少10.10.0.0的网关

于是在web端添加了一个网关
route add -net 10.10.0.0 netmask 255.255.255.0 dev eth1
再查看一下

[[email protected] server]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
202.192.168.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.10.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth1
0.0.0.0         202.192.168.1   0.0.0.0         UG    0      0        0 eth1
已经和db端一样了

查看一下mysql端口

[[email protected] server]# telnet 10.10.0.126 3306
Trying 10.10.0.126...
Connected to 10.10.0.126.
Escape character is ‘^]‘.
N
5.5.32-log±vj3[SkES!Q{9H=9E0]fjamysql_native_password
成功啦!!!!!

重启tomcat,查看tomcat端口

[[email protected] server]# netstat -lntup|grep 800
tcp        0      0 :::8000                     :::*                        LISTEN      4208/java           
tcp        0      0 ::ffff:127.0.0.1:8001       :::*                        LISTEN      4208/java           
tcp        0      0 :::8002                     :::*                        LISTEN      4208/java           
端口起来啦

页面访问也正常了!!!

时间: 2024-11-06 23:45:25

记一次数据库连接问题的相关文章

记一次排查mysql数据库连接未关闭问题的过程

在一些项目中由于一些特殊原因仍然保留着显示的获取数据库连接(Connection).提交事务.回滚事务.关闭连接等操作:其中关闭连接是比较容易疏忽又比较难在前期发现的问题. 我是如何排查连接未关闭的问题的? 首先还是提出3W: 1.What? 数据库连接是应用服务器和数据库之间建立的tcp连接,在获取连接并进行操作后需要手动关闭以释放资源,就像是文件流一样,资源是有限的. 2.Why? 连接不释放会导致连接池无法回收连接,进而数据库连接逐渐被占满,直到超出数据库设置的最大连接数而拒绝服务,显而易

从HelloWorld启航——数据库连接字符串的困惑

程序员方阵 数据库连接字符串的困惑 数据库连接字符串的组成 驱动程序 ODBC OLE DB JDBC 比较 数据库链接字符串大全 SQL Server 2005 SQL Native Client ODBC Driver SQL Native Client OLE DB Provider SqlConnection NET MySQL MyODBC OLE DB OleDbConnection NET MySqlConnection NET Oracle ODBC OLE DB OleDbCo

Tomcat6.0数据库连接池配置

http://blog.163.com/magicc_love/blog/static/185853662201111101130969/ oracle驱动包Tomcat 6.0配置oracle数据库连接池 安装Tomcat后,在我的电脑-属性—>高级-->环境变量系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat); CATALINA_HOME: c:\tomcat CATALINA_BASE: c:\tomcat TOMCAT_HOME: c:\tomcat 然后修改

记weblogic JDBC 'No operations allowed after statement closed' 缘由

平台应用开发人员向我们平台报了一个issue,说在测试他们应用的时候遇到一个奇怪的问题,系统报了undefinedexception(开发人员自定义的exception,捕捉了jpa exception之后发现无法处理的情况下就抛出未定义异常),他们贴出了weblogic里面报出的异常栈信息: <Sep 17, 2014 7:56:45 AM SAST> <Error> <org.hibernate.transaction.JDBCTransaction> <BE

数据库连接池的工作原理

对于共享资源,有一个很著名的设计模式:资源池(resource pool).该模式正是为解决资源频繁分配.释放所造成的问题.数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个了,使用完毕后再放回去.我们可以通过设定连接池最大数来防止系统无尽的与数据库连接.更为重要的是我们可以通过连接池的管理机制监视数据库连接使用数量,使用情况,为系统开发,测试以及性能调整提供依据. 连接池的相关问题分析: 1.并发问题.

记一次诡异的调优

最近碰到的一个Java应用,费了半天劲还是没定位到是哪儿的问.发上来给大家看看,给点建议. 环境 DB Server:32core HPUX DB2 App Server * 2:8core HPUX WAS6.1 每个节点2个app 初次测试现象 WAS,DB2CPU均上不去,CPU.内存.磁盘.网络等都正常. 从loadrunner报告来看,有两个用例很奇怪,在16/24/50用户下,呈线性增长.根据经验,这两个用例可能存在资源争用,造成串行的地方. 检查DB2,正常,语句执行都很快,部分用

重构版机房收费系统之分层、接口、数据库连接、反射+工厂(vb.net)

分层 分层是为了减少层与层之间的依赖,添加程序的可读性,让整个系统结构清晰明白.还可大大减少维护成本,可是分层也有一定的缺点,有些能够直接訪问数据库的层,却要通过负责訪问数据库的层进行訪问.这样,在訪问数据库过程中就多出一个环节,添加了系统的开销,有时候要在表示层添加某个功能.为了减少耦合,就不得不自上而下,在每一层里面添加这个功能所需的服务类,这样就添加了开发成本 分层越多越好吗?答案是否定的,引用一句话"我们也要     时刻谨记:不能盲目分层,不应分层而分层不应模式而模式. 这是非常重要的

数据库连接池简单介绍和 C3P0的JDBC配置

前面一节我们介绍了怎样利用jdbc连接数据库,已经实现了数据库的连接,可是在实际的项目开发中,能够发现基本上都使用了数据库连接池技术.为什么要使用数据库连接池呢?根源在于对数据库连接的低效管理 答: 普通的JDBC数据库连接,用户请求一次查询的时候就会向数据库发起一次连接.运行完后就断开连接,这种方式会消耗大量的资源和时间.数据库的连接资源并没有得到非常好的重复利用. 若是同一时候有几百人甚至几千人在线.频繁地进行数据库连接操作,这将会占用非常多的系统资源,严重的甚至会造成server的奔溃.这

记一次因网卡心跳故障引发RAC节点重启故障分析

数据库与CRS版本:10.2.0.4 down机过程分析 序号 节点 时间 动作 日志源 1 二 Jul 4 22:48:15 XXdb2 kernel: NETDEV WATCHDOG: eth1: transmit timed out bnx2: fw sync timeout, reset code = 1020015 OS 2 二 Jul 4 22:48:29 -- Jul 4 22:49 CRS-1612:node XXdb1 (1) at 50% heartbeat fatal, e