0 0

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&amp;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
  • 大小: 34.5 KB
  • 大小: 126.7 KB
  • 大小: 192.7 KB
  • 大小: 150.5 KB
  • 大小: 134.2 KB
  • 大小: 191.7 KB
  • 大小: 273.9 KB
  • 大小: 114.2 KB
  • 大小: 182.6 KB
  • 大小: 71.5 KB

9个答案 按时间排序 按投票排序

1 0

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
1 0

从“TOMCAT内存使用率能够慢慢的降下来”判断——内存泄漏概率比较小。

“内存全部用完时,倒是没怎么报OutOfMemory,只是不响应了”——这个时候推荐看看:netstat -ant 端口使用情况。

要么是某个业务随着时间的增长处理速度变慢了。


“这是一个客户端应用,有一个每6秒检查新消息的请求”——是不是某个时候消息很多,而用户又没有登录或者没有处理,导致消息处理过程越来越慢。
或者:占用内存越来越多(如果消息提醒放在内存中)

2012年8月30日 20:51
0 0

进来多学习学习,还没有了解这块内容

2012年10月24日 08:27
0 0

别折腾了,eccache的问题,老年代对象满了,那块的垃圾回收非常慢,so,如果你对缓存机制不是太别了解的话,别去踩那个雷了!

2012年8月31日 10:30
0 0

按我一般的理解。-Xmx 不宜设置的太大,设置太大会导致gc时间间隔太长。
长时间不垃圾回收,积攒过多的垃圾内存,一次垃圾回收系统肯定会无法响应。

试着将 xms  xmx 相应设置小一些。初始值和最大值都不要超过2g试试。

如果你要解决高并发量,应该考虑的是负载均衡而不是提升jvm初始内存。

2012年8月31日 10:02
0 0

从lz描述的情况看,是不是程序往session里面放了太多数据而没有及时清空,导致内存一直增长呢?

2012年8月31日 09:29
0 0

用%JAVA_HOME%\bin 下的 jvisualVM 看一下 内存情况 到底是哪个区域的内存大了

没有报OOMException吗??

2012年8月31日 09:12
0 0

你既然 用了 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
0 1

从你第一张内存图 看到你分配的内存是200M??

2012年8月30日 16:00

相关推荐

    查看Tomcat内存文件

    这是一个查看Tomcat内存的文件。放在应用工程中,直接访问就可以。 个人感觉这是一个非常有用的文件。

    修改tomcat内存大小.txt

    ### 修改Tomcat内存大小 在部署Java Web应用时,经常需要根据实际运行需求调整Tomcat服务器的内存配置。本文将详细介绍如何修改Tomcat的内存大小,包括常用的内存参数及其意义,并提供具体的设置方法。 #### 一、...

    监控tomcat内存使用情况

    监控Tomcat内存使用情况是确保应用稳定运行的关键环节。Tomcat作为一款广泛应用的Java Servlet容器,其内存管理直接影响到Web应用程序的性能和响应速度。理解并监控这些内存指标可以帮助我们及时发现并解决潜在的...

    TOMCAT内存溢出之解决方法

    Tomcat内存溢出之解决方法 Tomcat内存溢出是指Tomcat服务器在处理大数据量时出现的内存溢出错误,导致系统崩溃或返回HTTP状态码500的错误页面。本文将详细介绍Tomcat内存溢出之解决方法,包括问题分析、解决方法和...

    TOMCAT内存大小调整

    "TOMCAT内存大小调整" TOMCAT内存大小调整是指在使用Java程序从数据库中查询大量数据或应用服务器(如Tomcat、JBoss、WebLogic)加载jar包时,出现java.lang.OutOfMemoryError异常的解决方法。这种异常主要是由于...

    Tomcat内存设置详解

    ### Tomcat内存设置详解 #### 引言 在构建高性能且稳定的Web应用时,合理配置Tomcat内存参数是至关重要的一步。Tomcat作为一款广泛使用的开源应用服务器,其性能受到诸多因素的影响,其中内存配置尤为关键。正确的...

    Tomcat内存溢出的三种情况及解决办法分析

    在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。本文就介绍了Tomcat内存溢出的三种情况及解决办法分析

    解决tomcat内存溢出的配置方法

    在IT行业中,Tomcat作为一款广泛应用...总的来说,解决Tomcat内存溢出的关键在于理解和配置JVM内存管理,以及持续监控和优化应用程序。通过上述步骤,我们可以提升Tomcat的服务稳定性,降低因内存溢出导致的系统故障。

    tomcat内存泄漏备份方法

    Tomcat内存泄漏是Java应用服务器在运行过程中常见的问题,它可能导致系统性能下降,服务不稳定,甚至引发系统崩溃。解决这个问题需要深入理解Tomcat的内存管理机制以及如何诊断和修复内存泄漏。以下是对“tomcat内存...

    tomcat内存监测工具probe。

    可以监测tomcat设置的内存是否生效,监测当前使用的内存和剩余内存,监测当前在线用户量。不错的工具,作为一个tomcat的web项目运行,不需要额外安装插件和程序。登录用户直接使用tomcat的用户,请有conf\tomcat_...

    Eclipse + Tomcat 内存溢出参数设置

    根据提供的部分内容,我们可以看到Tomcat内存参数的设置涉及到了以下几个方面: 1. **修改Tomcat的启动脚本**:通过编辑`G:\apache-tomcat-6.0.37\bin\catalina.bat`文件,添加`set JAVA_OPTS=-Xms256m -Xmx512m`来...

    修改 TOMCAT 内存 的 方法 有图 有真相

    **修改TOMCAT内存的方法详解** Apache Tomcat是一款流行的开源Java Servlet容器,它用于部署和运行Java Web应用程序。在处理大型或复杂应用时,可能需要调整Tomcat的内存配置以优化性能。本文将详细介绍如何在不同...

    tomcat内存配置

    ### Tomcat内存配置的重要性 在实际的应用场景中,由于不同的应用场景对资源的需求不同,因此合理设置Tomcat的内存参数至关重要。例如,在高并发环境下,如果不合理地配置内存参数,可能会导致服务器响应变慢、应用...

    java excel导出tomcat内存溢出处理方法

    ### Java Excel导出Tomcat内存溢出处理方法 在Java应用开发过程中,特别是在进行大量数据处理如Excel导出等操作时,经常会遇到Tomcat服务器内存溢出的问题。内存溢出是指程序运行时申请的内存超过了系统能提供的...

Global site tag (gtag.js) - Google Analytics