请大家帮我定位这个OutOfMemoryError的问题。是数据库?还是连接池?抑或是Java ?
现在有一个画面做文件上传,将上传的文件写入到数据库的操作。
系统是:linux。
Web+APP:apche + tomcat
数据库:postgreSql
概述:上传文件大小在20M左右,数据大概在12万条左右。已经将tomcat里面文件上传时缓冲池设为最大8192。以前在另外一台linux服务器上也出现过这个问题,后来发现是因为做DB插入的时候用批处理将12万条数据一次处理出错,然后作了修改,每一万条数据做一次批处理操作,能够正常登录。
但是在现在的这台服务器上又出现了OutOfMemoryError的错误(减小到每一千条数据作一次批处理都不行)。通过log跟到做批处理插入的时候就坐不下去了。但是现在这台机器的postgreSql配置跟原来那台服务器是一样的。tomcat的配置也是一样的。不同的是现在这台机器是用公网IP地址来访问的,原来那台服务器是私网。
问题分析:
首先我觉得这个OutOfMemoryError不是tomcat内存不够的原因,因为已经全部把文件内容读到内存里,准备做数据库操作了。有可能是数据库连接池或者数据库本身缓冲池的原因。但到底是哪一个的原因不知道怎么查。另外,两台服务器的数据库,tomcat的配置都是一样的,为什么一个正常,一个不正常呢?
另外有一点儿就是不知道跟他们的ip地址有没有关系。在其他机器上使用客户端工具连接现在这台服务器的数据库的时候,过一段时间就会timeout,需要重新连接。但连接能够正常登录的那台服务器则没有timeout。难道是网络设定的问题?但网络设定跟OutOfMemoryError又有什么关系呢?
不知道大家有什么想法?