问题描述
系统环境:内存8GWindows2003企业版32位本机安装了Sqlserver2000企业版我们有一个java的程序,用的jdbc、dbcp连接池,在服务器上跑一段时间后(大概4、5天)就会报数据库连接不上,而且频率很固定,此时windows的内存使用也达到了3G多。重启java程序没有用,比如重启服务器(windows才有用)。这个是为什么呢?我的理解是重启了java程序都没有用那就不是java程序的问题了,应该是sqlserver的问题了,这个观点对吗?如果的确是sqlserver的问题,那么我怎么才能够排查问题怎么解决呢?困扰很久了。忘java高手、sqlserver高手指点,谢谢!
解决方案
解决方案二:
检查程序有没有那个地方没有释放连接,打sqlserver的补丁。
解决方案三:
用工具跟踪一下比如jprofile,看看内存的使用情况然后再考虑解决办法,先找到问题
解决方案四:
java连接sqlserver是很弱的组合,根本体现不出两者的优势。jdbc连接MSSQL的性能也不好啊。这个问题估计是jdbc连接sqlserver的问题,如果条件允许将java程序迁到另一台设备上测试。推荐将应用部署到linux,微软的操作系统实在是不放心。
解决方案五:
你程序里的数据库连接在用完的时候释放掉了吗?有没有在其他数据库测试过你的java程序?这种情况很像资源没释放掉...
解决方案六:
对~~~数据库连接调用完一定要close~~~
解决方案七:
用企业管理器看数据库的活动连接数,看是否有未释放的连接、死锁的进程等,然后再检查程序中是否存在未能正常释放数据库连接的情况。例如try{conn.open();//打开连接conn.getRs(sql);//取得记录集for(rec:Rs){...}//正常关闭rs.release();//关闭记录集conn.release();//关闭连接}catch(Exception){//异常情况的处理。如何关闭记录集和连接}finally{//这里如何处理。。}程序代码方面如果没有解决好,再好的机器配置都是白搭。
解决方案八:
连接没有释放
解决方案九:
嗯,极有可能是连接没有关闭。检查Dao的实现代码!
解决方案十:
学习一下
解决方案十一:
你首先用windows任务管理器查看一下是哪个程序占用了这么多内存
解决方案十二:
用netstat查看了一下程序对1433端口连接数发现稳定在40~45之间,由于java的程序使用了连接池、并且利用Spring管理了DataSource。还发现MSSQL中进程大多数的状态是Awaitingcommand。出现问题重启数据库(在windows服务中重启)和java程序没有用,java的程序会报Errorestablishingsocket的错误。只有重启windows才有用。很是郁闷。在发生错误是,倒是没有试过johnsoh所提供的“測試一下用其他的程式可連SQLSERVER?”。刚才写了个程序半小时去连接一次(jdbc)。请问还有什么其他方面可以排查吗?谢谢了!