-
tomcat内存持续暴涨45
现网一应用,使用apache +tomcat部署,运行2-3天后,内存就被用完了,服务器内存8G,设置MMX为7G;
当停止apache后,不再接收任何请求,TOMCAT内存使用率能够慢慢的降下来。服务器并发在200左右,高峰在500左右。
数据库为MYSQL,使用C3P0链接池,ehcache进行缓存
EHCACHE.xml<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="/wd/cache/cache" /> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskPersistent="false" memoryStoreEvictionPolicy="LRU" /> <cache name="org.hibernate.cache.UpdateTimestampsCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true" /> <cache name="org.hibernate.cache.StandardQueryCache" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskPersistent="false" /> </ehcache>
hibernate.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="jdbc:mysql://${jdbc..url}?useUnicode=true&characterEncoding=utf-8" /> <property name="user" value="${}" /> <property name="password" value="${}" /> <property name="maxPoolSize" value="50" /> <property name="maxIdleTime" value="300" /> <property name="checkoutTimeout" value="2000" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" lazy-init="true"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan"><list><value>com.model</value></list></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop> <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop key="hibernate.jdbc.fetch_size">50</prop> <prop key="hibernate.jdbc.batch_size">25</prop> <prop key="hibernate.connection.release_mode">after_transaction</prop> <prop key="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.SingletonEhCacheProvider </prop> <prop key="hibernate.cache.use_query_cache">true</prop> <!-- 强制Hibernate以更人性化的格式将数据存入二级缓存 --> <prop key="hibernate.cache.use_structured_entries">true</prop> <!-- Hibernate将收集有助于性能调节的统计数据 --> <prop key="hibernate.generate_statistics">true</prop> </props> </property> </bean>
MAT分析jmap内存结果截图:实在是没看出什么问题
问题补充:感谢大家的回答,问题还未解决,但大家的答案给了我很多启发,有无均分悬赏的功能呢?2012年8月30日 15:55
9个答案 按时间排序 按投票排序
-
JAVA_OPTS='-server -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M -XX:NewSize=256m -XX:MaxNewSize=512m -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseAdaptiveSizePolicy' JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.42 -Djava.util.logging.mannager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=$CATALINA_HOME/conf/logging.properties"
之前我也遇到类似情况,但加这个之后就可以了,但其原因我也不知道,别人给的解释是把tomcat的内存交给自己管理,但我看配置貌似没这层含义,我不知道是不是把日志交给tomcat的预案,我的理解是加了这行-Djava.util.logging.mannager=org.apache.juli.ClassLoaderLogManager
你可以先在本地测试下,你看看是否有用然后再部署到服务器。我觉得也许是日志文件越来越大的原因。2012年8月31日 08:46
-
从“TOMCAT内存使用率能够慢慢的降下来”判断——内存泄漏概率比较小。
“内存全部用完时,倒是没怎么报OutOfMemory,只是不响应了”——这个时候推荐看看:netstat -ant 端口使用情况。
要么是某个业务随着时间的增长处理速度变慢了。
“这是一个客户端应用,有一个每6秒检查新消息的请求”——是不是某个时候消息很多,而用户又没有登录或者没有处理,导致消息处理过程越来越慢。
或者:占用内存越来越多(如果消息提醒放在内存中)2012年8月30日 20:51
-
别折腾了,eccache的问题,老年代对象满了,那块的垃圾回收非常慢,so,如果你对缓存机制不是太别了解的话,别去踩那个雷了!
2012年8月31日 10:30
-
按我一般的理解。-Xmx 不宜设置的太大,设置太大会导致gc时间间隔太长。
长时间不垃圾回收,积攒过多的垃圾内存,一次垃圾回收系统肯定会无法响应。
试着将 xms xmx 相应设置小一些。初始值和最大值都不要超过2g试试。
如果你要解决高并发量,应该考虑的是负载均衡而不是提升jvm初始内存。2012年8月31日 10:02
-
用%JAVA_HOME%\bin 下的 jvisualVM 看一下 内存情况 到底是哪个区域的内存大了
没有报OOMException吗??2012年8月31日 09:12
-
你既然 用了 jmap ,干嘛不用 jconsole 来监控一下 toomcat 的内存分配了,至少可以看出 tomcat 分配了 多少内存了
在 你的 tomcat 配置文件里面 , 把 端口暴露 出来,CATALINA_OPTS="-Djava.rmi.server.hostname=172.27.1.188 \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9004 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false"
运行 java 目录下面的jconsole ,host 172.27.1.188:9004
关于 jconsole 监控 tomcat 的 例子很多 的 ,可以 查看 ,顺便可以调 tomcat 的内存
http://www.iteye.com/topic/801445
http://badboy-blue.iteye.com/blog/1040471
2012年8月30日 20:07
相关推荐
这是一个查看Tomcat内存的文件。放在应用工程中,直接访问就可以。 个人感觉这是一个非常有用的文件。
### 修改Tomcat内存大小 在部署Java Web应用时,经常需要根据实际运行需求调整Tomcat服务器的内存配置。本文将详细介绍如何修改Tomcat的内存大小,包括常用的内存参数及其意义,并提供具体的设置方法。 #### 一、...
监控Tomcat内存使用情况是确保应用稳定运行的关键环节。Tomcat作为一款广泛应用的Java Servlet容器,其内存管理直接影响到Web应用程序的性能和响应速度。理解并监控这些内存指标可以帮助我们及时发现并解决潜在的...
Tomcat内存溢出之解决方法 Tomcat内存溢出是指Tomcat服务器在处理大数据量时出现的内存溢出错误,导致系统崩溃或返回HTTP状态码500的错误页面。本文将详细介绍Tomcat内存溢出之解决方法,包括问题分析、解决方法和...
"TOMCAT内存大小调整" TOMCAT内存大小调整是指在使用Java程序从数据库中查询大量数据或应用服务器(如Tomcat、JBoss、WebLogic)加载jar包时,出现java.lang.OutOfMemoryError异常的解决方法。这种异常主要是由于...
### Tomcat内存设置详解 #### 引言 在构建高性能且稳定的Web应用时,合理配置Tomcat内存参数是至关重要的一步。Tomcat作为一款广泛使用的开源应用服务器,其性能受到诸多因素的影响,其中内存配置尤为关键。正确的...
在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。本文就介绍了Tomcat内存溢出的三种情况及解决办法分析
在IT行业中,Tomcat作为一款广泛应用...总的来说,解决Tomcat内存溢出的关键在于理解和配置JVM内存管理,以及持续监控和优化应用程序。通过上述步骤,我们可以提升Tomcat的服务稳定性,降低因内存溢出导致的系统故障。
Tomcat内存泄漏是Java应用服务器在运行过程中常见的问题,它可能导致系统性能下降,服务不稳定,甚至引发系统崩溃。解决这个问题需要深入理解Tomcat的内存管理机制以及如何诊断和修复内存泄漏。以下是对“tomcat内存...
可以监测tomcat设置的内存是否生效,监测当前使用的内存和剩余内存,监测当前在线用户量。不错的工具,作为一个tomcat的web项目运行,不需要额外安装插件和程序。登录用户直接使用tomcat的用户,请有conf\tomcat_...
根据提供的部分内容,我们可以看到Tomcat内存参数的设置涉及到了以下几个方面: 1. **修改Tomcat的启动脚本**:通过编辑`G:\apache-tomcat-6.0.37\bin\catalina.bat`文件,添加`set JAVA_OPTS=-Xms256m -Xmx512m`来...
**修改TOMCAT内存的方法详解** Apache Tomcat是一款流行的开源Java Servlet容器,它用于部署和运行Java Web应用程序。在处理大型或复杂应用时,可能需要调整Tomcat的内存配置以优化性能。本文将详细介绍如何在不同...
### Tomcat内存配置的重要性 在实际的应用场景中,由于不同的应用场景对资源的需求不同,因此合理设置Tomcat的内存参数至关重要。例如,在高并发环境下,如果不合理地配置内存参数,可能会导致服务器响应变慢、应用...
### Java Excel导出Tomcat内存溢出处理方法 在Java应用开发过程中,特别是在进行大量数据处理如Excel导出等操作时,经常会遇到Tomcat服务器内存溢出的问题。内存溢出是指程序运行时申请的内存超过了系统能提供的...