windows环境 Web容器为Tomcat(版本为Tomcat6.0以前)
一 远程端口参数设置
在catalina.bat 或 startup.bat添加配置参数
set JAVA_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=7702,server=y,suspend=n
在startup.bat脚本中添加应在 在调用执行catalina.bat脚本之前添加(因为这个参数在catalina.bat中要用)
call "%EXECUTABLE%" start %CMD_LINE_ARGS% 在这句之前
catalina.bat 则在最前面添加就可以 (原则是在执行java 命令之前添加)
下面解释各个参数的含义
-Xdebug 启用调试特性
-Xrunjdwp 启动JDWP 包含一下几个参数
transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=8000 JVM远程监听端口
server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=n n表示启动的JVM会暂停等待,直到调试器连接上。
suspend=y这个选项很重要。如果你想从Tomcat启动的一开始就进行调试,那么就必须设置suspend=y。
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,
通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。
JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),
Java 调试线协议(JDWP),
Java 调试接口(JDI)
jdb -connect com.sun.jdi.SocketAttach:port=7702,hostname=10.10.198.50 这个命令也可以调试
但一直没有成功 留一个问题待以后解决
二 JVM 内存参数设置
set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -XX:PermSize=128M
-XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m
或
set JAVA_OPTS='-Xms256m-Xmx512m'
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
一般情况下 最大值和最小值设置成一样的
如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5秒。
如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,
研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的80%作为堆大小。当增加处理器时,记得增加内存,
因为分配可以并行进行,而垃圾收集不是并行的。
垃圾回收机制原理:参看 http://developer.51cto.com/art/201009/227004.htm
更多参数的详细信息
Java -Xms2g -Xmx2g -Xmn512M -Xss128K -XX:PermSize=128M -XX:MaxPermSize=128M -XX:NewRatio=4 -XX:SurivorRatio=4 -XX:MaxTenuringThreshold=1
-Xms2g:JVM启动初始化堆大小为2g,Xms的默认是物理内存的1/64但小于1G。
-Xmx2g:JVM最大的堆大小为2g,Xmx默认是物理内存的1/4但小于1G;将-Xms和-Xmx的值配置为一样,可以避免每次垃圾回收完成后对JVM堆大小进行重新的调整。
-Xmn512M:堆中的新生代大小为512M
-Xss128K:每个线程的堆栈大小为128K
-XX:PermSize=128M:JVM持久代的初始化大小为128M
-XX:MaxPermSize=128M:JVM持久代的最大大小为128M
-XX:NewRatio=4:JVM堆的新生代和老年代的大小比例为1:4
-XX:SurvivorRatio=4:新生代Surivor区(新生代有2个Surivor区)和Eden区的比例为2:4
-XX:MaxTenuringThreshold=1:新生代的对象经过几次垃圾回收后(如果还存活),进入老年代。如果该参数设置为0,这表示新生代的对象在垃圾回收后,不进入survivor区,直接进入老年代
Java -XX:+UseParallelGC -XX:ParallelGCThread=4 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
-XX:+UseParallelGC:使用并行的垃圾收集器,但仅针对新生代有效,老年代仍然使用串行收集器
-XX:ParallelGCThread=4:设置并行垃圾回收器的线程为4个,该设置最好与处理器的数目相同
-XX:+UseParalleOldGC:配置老年代使用并行垃圾收集器,JDK1.6支持老年代使用并行收集器
-XX:MaxGCPauseMillis=100:设置每次新生代每次收集器垃圾回收的最长时间,如果无法满足该时间,JVM会自动调整新生代区的大小,以满足该值
-XX:+UseAdaptiveSizePolicy:设置此值后,JVM会自动调整新生代大小以及相应的surivor区的比例,以达到设置的最低响应时间或者收集频率等
Java -XX:UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
-XX:UseConcMarkSweepGC:设置JVM堆的老年代使用CMS并发收集器,设置该参数后,-XX:NewRatio参数失效,但-Xmn参数依然有效
-XX:UseParNewGC:设置新生代使用并发收集器,在JDK1.5以上,JVM会根据系统自动设置
-XX:CMSFullGCsBeforeCompaction=5:设置5才CMSGC后对堆空间进行压缩、整理
-XX:+UseCMSCompactAtFullCollection:打开对老年代的压缩,可能会影响性能,但可以消除堆碎片