jprofiler6.2.2使用

以前没有实际的backend开发经验,这两天后台刚上线,由于之前没有做过压力测试,上线后发现内存会在半天或一天内慢慢耗尽。开始怀疑ehcache设置的比较大,服务器只分配了5G内存,所以调低了ehcache的缓存数。

例如从

<cache name="com.telenavsoftware.doudouy.entity.User" maxElementsInMemory="100000 " maxElementsOnDisk="0" eternal="false" overflowToDisk="true" diskPersistent="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" />

改为

<cache name="com.telenavsoftware.doudouy.entity.User" maxElementsInMemory="10000" maxElementsOnDisk="0" eternal="false" overflowToDisk="true" diskPersistent="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" />

不行还是耗尽。

增大服务器内存到8G

还是耗尽

 

开始用jconsole监控内存

http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

用jmap 到处heap

./jmap -histo -F pid

都不是很方便

搜索内存泄漏的解决方法,发现很多人都使用Jprofiler来定位问题。从官网上下载Jprofiler最新版6.2.2

网上的一些配置方法都是针对之前的版本,有些已经不适用了。6.2.2的使用更简单。

服务器上安装jprofiler_linux_6_2_2.sh 直接运行

注意要有运行权限,要有java的环境。

ldd libjprofiler.so 查看文件依赖关系

 

将 -agentpath:/opt/jprofiler6/bin/linux-x64/libjprofilerti.so=port=8849 配到java的启动参数里

 

安装windows上的jprofiler配置简单

参考网上教程即可

 

jms 如果使用<amq:kahaPersistenceAdapter directory="${application.jms.directory}/database"> 持久化

lucence 使用<entry key="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider" />

 

都会是server打开过多文件 改为

<amq:jdbcPersistenceAdapter dataSource="#dataSource" />

<entry key="hibernate.search.default.directory_provider" value="ram" />

 

这样server 使用内存稳定多了

 

 

 

 

你可能感兴趣的:(jprofiler6.2.2使用)