tomcat设置java jvm参数 优化

本文详细介绍了如何调整Java虚拟机(JVM)内存设置以解决大数据处理时遇到的内存溢出问题。包括JVM内存分配参数解释、如何在不同环境下设置内存分配、以及查看JVM内存信息的方法。特别强调了调整-xms、-xmx、-xmn和-xss参数的重要性,以确保程序稳定运行和高效利用资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编辑器加载中...

一、jvm内存的设置的原理

默认的java 虚拟机的大小比较小,在对大数据进行处理时java 就会报错:java .lang.outofmemoryerror。

设置jvm内存的方法,对于单独的.class,可以用下面的方法对test运行时的jvm内存进行设置。

java -xms64m -xmx256m test

-xms是设置内存初始化的大小

-xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

二、jvm内存分配设置

1. jvm内存分配设置的参数有四个:

-xmxjava heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

-xmsjava heap初始值,server端jvm最好将-xms和-xmx设为相同值,开发测试机jvm可以保留默认值;

-xmnjava heap young区大小,不熟悉最好保留默认值;

-xss每个线程的stack大小,不熟悉最好保留默认值;

2. 如何设置jvm的内存分配:

(1)当在命令提示符下启动并使用jvm时(只对当前运行的类test生效):

java -xmx128m -xms64m -xmn32m -xss16m test

(2)当在集成开发环境下(如eclipse)启动并使用jvm时:

a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的jvm内存分配):

-vmargs

-xms40m

-xmx256m

-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-xmn,-xss,另外,eclipse.ini内还可以设置非堆内存,如:-xx:permsize=56m,-xx:maxpermsize=128m。

此处设置的参数值可以通过以下配置在开发工具的状态栏显示:

在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showheapstatus=true

修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:

-debug

options

-vm

javaw.exe

重新启动eclipse,就可以看到下方状态条多了jvm信息。

b. 打开eclipse-窗口-首选项-java-已安装的jre(对在当前开发环境中运行的java程序皆生效)

编辑当前使用的jre,在缺省vm参数中输入:-xmx128m -xms64m -xmn32m -xss16m

c. 打开eclipse-运行-运行-java应用程序(只对所设置的java类生效)

选定需设置内存分配的类-自变量,在vm自变量中输入:-xmx128m -xms64m -xmn32m -xss16m

注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:

开发环境的设置为:-xmx256m,而类test的设置为:-xmx128m -xms64m,则运行test时生效的设置为:

-xmx256m -xms64m

(3)当在服务器环境下(如tomcat)启动并使用jvm时(对当前服务器环境下所以java程序生效):

a. 设置环境变量:

变量名:catalina_opts

变量值:-xmx128m -xms64m -xmn32m -xss16m

b. 打开tomcat根目录下的bin文件夹,编辑catalina.bat,在set java_opts=%java_opts%....这句之后加上:set java_opts=%java_opts% -xms1024m -xmx1024m

c、若没有catalina.bat,只有tomcat.exe,tomcat6w.exe;则可以在启动tomcat6w.exe 后 右键配置--java--java option 下面输入:

-xmx256m

-xms64m

也可以找到注册表hkey_local_machine/software/apache software foundation/tomcat service manager/tomcat6/parameters/javaoptions

原值为

-dcatalina.home="c:/apachegroup/tomcat 6.0"

-djava.endorsed.dirs="c:/apachegroup/tomcat 6.0/common/endorsed"

-xrs

加入

-xms300m

-xmx350m

重起tomcat服务,设置生效

三、查看jvm内存信息

runtime.getruntime().maxmemory(); //最大可用内存,对应-xmx

runtime.getruntime().freememory(); //当前jvm空闲内存

runtime.getruntime().totalmemory(); //当前jvm占用的内存总数,其值相当于当前jvm已使用的内存及freememory()的总和

关于maxmemory(),freememory()和totalmemory():

maxmemory()为jvm的最大可用内存,可通过-xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;

totalmemory()为当前jvm占用的内存总数,其值相当于当前jvm已使用的内存及freememory()的总和,会随着jvm使用内存的增加而增加;

freememory()为当前jvm空闲内存,因为jvm只有在需要内存时才占用物理内存使用,所以freememory()的值一般情况下都很小,而 jvm实际可用内存并不等于freememory(),而应该等于maxmemory()-totalmemory()+freememory()

==============================================================================

set java_opts=-server -dsun.io.usecanoncaches=false -xms1024m -xmx1024m -xx:permsize=128m -xx:maxpermsize=256m -xx:+aggressiveheap -xx:+useparallelgc

rem set java_opts=-server -xmx1024m -xms1024m -xx:+aggressiveheap -xx:+useparallelgc -dsun.io.usecanoncaches=false -xx:maxpermsize=512m


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值