tomcat的jvm heap内存的设置问题

我现在用的是阿里云的centos, 内存只有[b]512M[/b]。

现在存在内存溢出的问题。 就是当使用thumbnail处理图片的时候。
我测试了一下, 大概是传150K以上的图片的时候, heap内存就会用到大约100M。
测试代码如下:
System.out.println("\tCurrent Heap Size in MB: "+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/(1024*1024));



我在网上查了一下, 貌似是说jvm会调用系统物理内存的[b]最多[/b]1/4作为heap内存。

所以我想修改一下这个参数、

但是发现修改了之后就会启动不了tomcat。

研究了很久, 才发现, 原来设置的内存不能超出系统所能提供的内存。


下面是我设置的参数:
# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-Xms64m -Xmx140m" //-Xms64m会影响到关闭tomcat。见下面
cygwin=false


这里我如果设置-Xms为256m,tomcat就会直接启动不了。
看来这系统提供不了最大256M的内存。

但是设置为128m,就会导致150K以上的图片依然不能上传,会报出OOM错误。
最后设置为140m, 试了一下居然可以了。。300K的也可以上传处理。但是600K的不行。


先运行一段时间试试, 看看会不会出什么问题。


=============================
5/3
刚关闭tomcat就出错了。

[img]http://dl2.iteye.com/upload/attachment/0096/7155/5668481f-1d32-3604-ba44-45c0ceaf8667.jpg[/img]

把-Xms64m去掉。
再次启动测试关闭。
就正常了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat服务器通常使用JVM (Java Virtual Machine) 来运行,内存配置对于它的性能至关重要。主要有以下几个方面的设置: 1. **JVM内存**(Heap Memory):这是Java应用的主要内存区域,用于存放对象实例。通过`-Xms`和`-Xmx`命令行参数设置初始堆大小(最小值)和最大堆大小(最大值)。例如:`-Xms512m -Xmx1024m`,分别表示初始512MB和最大1GB。 2. **非堆内存**(Non-heap Memory):包括常量池、元数据区和线程上下文类加载器等。这部分内存不会自动调整,需要手动配置,如`-XX:PermSize`(永久代大小)和`-XX:MaxPermSize`。 3. **年轻代**(Young Generation):包括Eden空间、Survivor Space和Tenured Generation,主要用于对象的创建和回收。可以设置为固定大小或分段,如`-XX:NewRatio`用于eden/survivor的比例。 4. **老年代**(Old Generation):长期存活的对象会被移入这里,设置`-XX:MetaspaceSize`限制元数据区域大小,避免溢出。 5. **持久化缓存**(如果启用了持久连接):Tomcat会分配额外的内存用于存储连接信息,这可以通过`org.apache.tomcat.util.http.fileupload.FileUploadSupport.MAX_FILE_SIZE`控制。 6. **JVM内存溢出监控**:可以启用JVM的堆转储日志(`-XX:+HeapDumpOnOutOfMemoryError`),以便在发生内存溢出时生成堆转储文件供分析。 为了保证稳定性和性能,建议根据实际应用需求和资源情况,通过监控工具(如VisualVM、JConsole等)动态调整这些配置。记得定期检查日志以诊断潜在的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值