如何设置 Tomcat 的 JVM 虚拟机内存大小
Tomcat 本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个 java 虚
拟机。您可以选择自己的需要选择不同的操作系统和对应的 JDK 的版本(只要是符合 Sun
发布的 Java 规范的),但我们推荐您使用 Sun 公司发布的 JDK。确保您所使用的版本是最
新的,因为 Sun 公司和其它一些公司一直在为提高性能而对 java 虚拟机做一些升级改进。
一些报告显示 JDK1.4 在性能上比 JDK1.3 提高了将近 10%到 20%。
可以给 Java 虚拟机设置使用的内存,但是如果你的选择不对的话,虚拟机不会补偿。可通
过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用
内存的大小。
参数
描述
-Xms
JVM 初始化堆的大小
-Xmx
JVM 堆的最大值
这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申
请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急
剧地占用更多的内存,此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内
存比较小而在这种情况下有许多对象进行初始化,虚拟机就必须重复地增加内存来满足使
用。由于这种原因,我们一般把-Xms 和-Xmx 设为一样大,而堆的最大值受限于系统使用的
物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长
当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩
溃。因此一般建议堆的最大值设置为可用内存的最大值的 80%。
Tomcat 默认可以使用的内存为 128MB,在较大型的应用项目中,这点内存是不够的,需要
调大。
Windows 下,在文件/bin/catalina.bat,Unix 下,在文件/bin/catalina.sh 的前面,增加如下设
置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为 256MB,可以使用的最大内存为 512MB。
另外需要考虑的是 Java 提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃
圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集
的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低
如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的
的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试
的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程
中出现。