当前位置:编程学习 > JAVA >>

tomcat内存使用暴涨,求帮助

之前一直做开发,整天傻傻的就知道在那写程序,没有搞过服务器方面的东西。现在接手一个老项目,服务器的系统为windows2003,内存16G,tomcat6.下图为tomcat的配置信息。只把应用程序部署在这台机器上面,数据库在另外一台机器上。基本情况就是这样,下面来说问题。

系统的使用人数大概在五六百人,刚启动的时候tomcat的内存只有3G左右,但是慢慢的会涨到6G,到了6G基本上稳定了,但是还是会上涨,只不过涨的比较慢,由于内存使用较多,导致项目很慢。我怀疑是数据库的连接没有释放,但是不知道怎么查看,还有就是这种情况该如何找原因呢,很迷茫,期望大家能指点一下。在此先谢谢了!
--------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 通常情况有数据库连接未释放,每个用户的数据加载在内存中太多,这个看下相关的代码。还有log日志 --------------------编程问答-------------------- 貌似系统都会这样,用着用着就涨上去了,前期暴涨是因为很多东西需要首次加载吧。
我那个自己的VPS隔三差五的还得重启一遍。。
代码中注意点回收就行了,当然即使代码没问题,还是会涨的 --------------------编程问答-------------------- 好久没来,打个酱油 看看自己什么等级 --------------------编程问答-------------------- 数据库连接,io流, 上传文件, --------------------编程问答-------------------- 用jmap导出内存映像文件,然后用mat工具可以看到内存里的对象是什么东西 --------------------编程问答-------------------- 如果数据库连接未释放,最终的结果肯定是无法拿到新的连接,最终系统会崩掉。看你的现象没有出现系统宕掉的情况。
但是6G的内存确实太多了,建议用工具查看下内存里面的情况,是否有大对象一直持有没有gc。 --------------------编程问答-------------------- --------------------编程问答-------------------- 你去看一下这个程序  数据库连接 是怎么做的

不会是JDBC  每个人自己随意写的吧。


我以前带过一个小孩 这个哥们 居然在while 循环里给我开数据源   还不给关闭。

弄的 我们的那个系统   要死了 --------------------编程问答-------------------- 这不是linux,不能直接查看多少数据库连接状态。只能手动检查代码中数据库启用后是否关闭。 --------------------编程问答-------------------- 可以用一些系统监控软件查看是什么原因引起的~ --------------------编程问答-------------------- 请问LZ,tomcat容器的容量没有限制的吗? --------------------编程问答--------------------
引用 12 楼 u010684923 的回复:
请问LZ,tomcat容器的容量没有限制的吗?

tomcat容量?什么意思啊 --------------------编程问答-------------------- 检查一下执行什么操作时候暴涨的,然后确定怎么处理。 --------------------编程问答--------------------
引用 11 楼 concernings 的回复:
可以用一些系统监控软件查看是什么原因引起的~

能说得详细点吗,我目前用jmap导出内存映像文件,然后用mat工具可以看到内存里的对象,但是具体不知道是要看什么东东 --------------------编程问答--------------------
引用 14 楼 anchor1 的回复:
检查一下执行什么操作时候暴涨的,然后确定怎么处理。

慢慢涨上去的,看不到是哪个操作 --------------------编程问答--------------------
引用 13 楼 qq1145174853 的回复:
Quote: 引用 12 楼 u010684923 的回复:

请问LZ,tomcat容器的容量没有限制的吗?

tomcat容量?什么意思啊

假如说你查询的数据过多,容器不会报outMemery异常吗? --------------------编程问答-------------------- visualvm 用 这个工具看看 JVM中你的项目类方法的变化
找到那个方法进行优化。 --------------------编程问答--------------------
引用 17 楼 u010684923 的回复:
Quote: 引用 13 楼 qq1145174853 的回复:

Quote: 引用 12 楼 u010684923 的回复:

请问LZ,tomcat容器的容量没有限制的吗?

tomcat容量?什么意思啊

假如说你查询的数据过多,容器不会报outMemery异常吗?

没有报错 --------------------编程问答--------------------
引用 19 楼 qq1145174853 的回复:
Quote: 引用 17 楼 u010684923 的回复:

Quote: 引用 13 楼 qq1145174853 的回复:

Quote: 引用 12 楼 u010684923 的回复:

请问LZ,tomcat容器的容量没有限制的吗?

tomcat容量?什么意思啊

假如说你查询的数据过多,容器不会报outMemery异常吗?

没有报错

我最近就碰到这样的问题,数据超过一定量,容器就out了,你是怎么解决的? --------------------编程问答-------------------- 有性能测试工具,直接测试到你的哪段代码占用内存的 --------------------编程问答--------------------
引用 20 楼 u010684923 的回复:
Quote: 引用 19 楼 qq1145174853 的回复:

Quote: 引用 17 楼 u010684923 的回复:

Quote: 引用 13 楼 qq1145174853 的回复:

Quote: 引用 12 楼 u010684923 的回复:

请问LZ,tomcat容器的容量没有限制的吗?

tomcat容量?什么意思啊

假如说你查询的数据过多,容器不会报outMemery异常吗?

没有报错

我最近就碰到这样的问题,数据超过一定量,容器就out了,你是怎么解决的?

还没解决呢,我们这的tomcat还没到挂掉那一步,还在慢慢查了,每天乱七八糟的事情一大堆,只能有空的时候查查 --------------------编程问答-------------------- 用用工具分析下吧,jprofiler这个不错。 --------------------编程问答-------------------- 也有可能是tomcat与jdk GC不及时导致的问题。
之前项目使用tomcat6.13,jdk5.18,性能测试的时候就会出现内存释放不及时的问题。后来jdk换成6以上运行,就好多了。

老系统,毕竟就百八十人用,可以做个定时任务,夜深人静的时候,偷偷重启下好了。 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 多大的系统用这么多内存·· --------------------编程问答-------------------- 用工具分析下,看看是否有内存泄露 --------------------编程问答-------------------- 查看一下是不是有很多数据缓存起来了,放在Map等集合里面了。修改代码,释放一些不必要的或者是非热点的数据,或者直接改使用Redis,memcached作为缓存。 --------------------编程问答-------------------- 出现这种情况十有八九就是内存对象没有及时的回收或内存对象因为交X引用无法回收,JVM自已的内存GC周期又设置的太长.对于软件开发说,应该很明确在一个系统中哪些需要缓存,哪些不需要缓存,对程序员来说要任何地方都要注意主动释放不再会用到的内存对象,这种问题光靠系统管理者是没法根本解决问题的 --------------------编程问答-------------------- 哥们一朋友做系统维护的,曾经每天上班第一件事就是重启服务器 --------------------编程问答--------------------
引用 24 楼 oh_Maxy 的回复:
也有可能是tomcat与jdk GC不及时导致的问题。
之前项目使用tomcat6.13,jdk5.18,性能测试的时候就会出现内存释放不及时的问题。后来jdk换成6以上运行,就好多了。

老系统,毕竟就百八十人用,可以做个定时任务,夜深人静的时候,偷偷重启下好了。

这个倒是个好主意,现在已经这样搞了 --------------------编程问答--------------------
引用 31 楼 qq1145174853 的回复:
Quote: 引用 24 楼 oh_Maxy 的回复:

也有可能是tomcat与jdk GC不及时导致的问题。
之前项目使用tomcat6.13,jdk5.18,性能测试的时候就会出现内存释放不及时的问题。后来jdk换成6以上运行,就好多了。

老系统,毕竟就百八十人用,可以做个定时任务,夜深人静的时候,偷偷重启下好了。

这个倒是个好主意,现在已经这样搞了


你们两个! --------------------编程问答-------------------- --------------------编程问答--------------------
引用 32 楼 wenzuowei110 的回复:
Quote: 引用 31 楼 qq1145174853 的回复:

Quote: 引用 24 楼 oh_Maxy 的回复:

也有可能是tomcat与jdk GC不及时导致的问题。
之前项目使用tomcat6.13,jdk5.18,性能测试的时候就会出现内存释放不及时的问题。后来jdk换成6以上运行,就好多了。

老系统,毕竟就百八十人用,可以做个定时任务,夜深人静的时候,偷偷重启下好了。

这个倒是个好主意,现在已经这样搞了


你们两个!

我这个也是没办法呀 --------------------编程问答-------------------- 用监控工具看哪些对象占用大内存,然后优化对应的类,jmap和jvisualvm都可以看
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,