linux下tomcat指定jdk和配置运行参数
一.指定运行jdk
1)set classpath.sh和catalina.sh中写入:
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
export JRE_HOME=/usr/local/java/jdk1.8.0_121/jre/
二.指定运行参数大小:
1)catalina.sh中写入
服务器配置 内存大小1G
参考一:JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
服务器配置 内存大小2G
实际使用 JAVA_OPTS="-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m"
三.参数详解
export JAVA_OPTS= -Xms128m -Xmx512m 设置JAVA虚拟机的内存
export CATALINA_OPTS= -Xms128m -Xmx256m 设置tomcat可以使用多少内存
-Xms128m 【初始化内存大小】 128M
-Xmx512m 【可以使用的最大内存】 512M
四.查看堆大小
在程序中查看,返回值单位是字节,当然还有其他JVM参数可以查看。
Runtime.getRuntime().maxMemory();
或者在命令行 执行jvisualvm 命令
或者%java_home%\bin 目录下点击jvisualvm.exe
或者在命令行执行jconsole 命令
或者%java_home%\bin 目录下点击jconsole.exe
五. java内存可以分为堆内存和非堆内存
堆和非堆:堆是给开发人员用的,是在JVM启动时创建; 非堆是留给JVM自己用的,用来存放类型(类和接口)的信息。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者 tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多,热部署上几次就java.lang.OutOfMemoryError: PermGen space .
---- 堆内存设置:程序可以到达的,可以操作的
-Xms 初始堆内存 默认物理内存1/64,也是最小分配堆内存。当空余堆内存小于40%时,会增加到-Xms的最大限制
-Xmx 最大堆内存分配 默认物理内存1/4,当空余堆内存大于70%时,会减小到-Xms的最小限制。
一般设置 -Xms和Xms大小相等
---- 非堆内存设置
-XX:PermSize 非堆内存的初始值,默认物理内存的1/64 ,也是最小非堆内存。
-XX:MaxPermSize 非堆内存最大值,默认物理内存的1/4,
六. 典型JVM参数设置:
java -Xmx128m -Xms128m -Xmn64m -Xss1m
-Xmx128m:设置JVM最大可用内存为128M。
-Xms128m:设置JVM最小内存为128m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。 JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更 多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。