请教一个关于Linux下java内存的问题 本帖最后由 wapigzhu 于 2012-10-15 08:23:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 遇见过一次,就是服务长时间运行内存一直上升,登陆的人越多越慢。我们的是数据库连接的问题,不释放资源。数据库连接池从dbcp换成c3p0解决问题。不知道对你的有帮助没 谢谢你的回复~因为我们数据量不是很大,一个小时2,30w条大概对并发的顺序执行要求又很严,就是说程序里sql语句调用顺序是a,b的话,执行顺序也要是a,b只用了一个数据库的连接,这个连接一直不释放然后把所有执行sql的地方全部放在一个队列里,用这个连接一次执行这个队列应该不会是数据库的资源的问题吧 谢谢你的建议~现在有点麻烦的是服务器部署是在客户那边,他们又不允许我们远程登录,很多事情都只有告诉他们的运维人员每个步骤然后他们来操作,下一个dump都要花半天时间我们拿到之前几次的dump,确实查出有5,6个内存泄漏的地方但是数据量并不大,最大一个也就占用300M的样子,完全解释不了为什么那么那边内存会疯狂的上涨而且修改了以后还是这个样子,最新的dump还没拿到最奇怪的问题是用top看见java进程占用的内存是8g,表现出来也是对客户端的响应很慢但是把当时的dump拿来看只有3g,实际有效引用的地方只有1.3g,也就是所有的shallow size之和如果加上未被引用的对象,shallow size在2.3g另外的5g内存不知道是被什么占用了把内存先设小店,然后开启GC日志这个建议不错,先这么试试 我觉得是top和dump本来就没有测一样的内容,对dump不了解,但top是linux的内置命令,按理应该更准确一点吧可不可以找一个linux上更权威强力的工具来测呢,也可以印证一下top结果找到一个:http://valgrind.org/ 其实两者都是准的,但是统计口径不同。要注意到JVM所有申请的内存,首先不是全都让程序给消耗光了,其次更不见得就已经全部实际被分配完毕;各位应该记得Runtime对象有几个函数,比如:freeMemory()、totalMemory()。top统计的是整个Java所有申请的内存,从操作系统角度来说,这是合理的。dump只是把Java中程序已经使用的部分导出来,从JVM的角度来说,这也是合理的。 让用户自定义资源类型 请教大家一个超简单的问题 友好的等待效果怎么做? jacob问题 ajax刷新问题 Java 实现银行字符终端报表打印问题 struts真的能使表示层和逻辑层分离吗? 怎样用一个sessionbean去调用一个entitybean啊,谢谢 大家看看是什么问题????? spring boot jpa 同一事务内数据不一致问题 最近领导让我用hibernate+Spring整合做个模块,但是不是很熟悉,会,但是不是很精通..大家有什么速成的好书或者资料推荐么,只有五天时间。 extremeComponents里面的table,如何禁用分页
我们的是数据库连接的问题,不释放资源。
数据库连接池从dbcp换成c3p0解决问题。不知道对你的有帮助没
因为我们数据量不是很大,一个小时2,30w条大概
对并发的顺序执行要求又很严,
就是说程序里sql语句调用顺序是a,b的话,执行顺序也要是a,b
只用了一个数据库的连接,这个连接一直不释放
然后把所有执行sql的地方全部放在一个队列里,
用这个连接一次执行这个队列
应该不会是数据库的资源的问题吧
现在有点麻烦的是服务器部署是在客户那边,
他们又不允许我们远程登录,
很多事情都只有告诉他们的运维人员每个步骤
然后他们来操作,下一个dump都要花半天时间
我们拿到之前几次的dump,确实查出有5,6个内存泄漏的地方
但是数据量并不大,最大一个也就占用300M的样子,
完全解释不了为什么那么那边内存会疯狂的上涨
而且修改了以后还是这个样子,最新的dump还没拿到最奇怪的问题是用top看见java进程占用的内存是8g,
表现出来也是对客户端的响应很慢
但是把当时的dump拿来看只有3g,
实际有效引用的地方只有1.3g,也就是所有的shallow size之和
如果加上未被引用的对象,shallow size在2.3g另外的5g内存不知道是被什么占用了把内存先设小店,然后开启GC日志
这个建议不错,先这么试试
可不可以找一个linux上更权威强力的工具来测呢,也可以印证一下top结果找到一个:http://valgrind.org/
其实两者都是准的,但是统计口径不同。
要注意到JVM所有申请的内存,首先不是全都让程序给消耗光了,其次更不见得就已经全部实际被分配完毕;各位应该记得Runtime对象有几个函数,比如:freeMemory()、totalMemory()。
top统计的是整个Java所有申请的内存,从操作系统角度来说,这是合理的。dump只是把Java中程序已经使用的部分导出来,从JVM的角度来说,这也是合理的。