线上的tomcat 无法启动,一直停留在:
Jun 22, 2016 4:12:01 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Jun 22, 2016 4:12:02 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Jun 22, 2016 4:24:19 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Jun 22, 2016 4:24:19 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
没有日志输出,应该是出现这个应该出在tomcat上,跟应用无关; 在运维的同事的支持下, 发现 tomcat启动参数:
-Xmx8192m -Xms8192m -Xmn4g -Xss256k
-Xmx:最大堆大小
-Xms:初始堆大小
-Xss: 单线程的堆大小(这个值的设置会影响到应用能够支持的线程数量)
后来把 这个
-Xss512k
线上的tomcat 可以正常启动;在这里感谢运维同事的辛勤劳动……
附上: 常用查错误的常用命令:
jmap (生成堆转储快照(heapdump))
常用指令
jmap -heap 3331:查看java 堆(heap)使用情况
jmap -histo 3331:查看堆内存(histogram)中的对象数量及大小
jmap -histo:live 3331:JVM会先触发gc,然后再统计信息
jmap -dump:format=b,file=heapDump 3331:将内存使用的详细情况输出到文件,之后一般使用其他工具进行分析。
详细介绍
jhat (一般与jmap搭配使用,用来分析jmap生成的堆转储文件)
由于有很多可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不过在没有可视化工具的机器上也是可用的。
常用指令
jmap -dump:format=b,file=heapDump 3331 + jhat heapDump:解析Java堆转储文件,并启动一个 web server
详细介绍
jstack(生成当前时刻的线程快照)
常用指令
jstack 3331:查看线程情况
jstack -F 3331:正常输出不被响应时,使用该指令
jstack -l 3331:除堆栈外,显示关于锁的附件信息
详细介绍
常见问题定位过程
1) 频繁GC问题或内存溢出问题
一、使用jps查看线程ID
二、使用jstat -gc 3331 250 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况.
三、使用jstat -gccause:额外输出上次GC原因
四、使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件
五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
六、结合代码解决内存溢出或泄露问题.
2) 死锁问题
一、使用jps查看线程ID
二、使用jstack 3331:查看线程情况