Java JVM内存问题

Java JVM内存问题,java,tomcat,garbage-collection,jvm,Java,Tomcat,Garbage Collection,Jvm,请帮我解决一个问题。我有CentOS,内存为4GB,Tomcat配置了大约1500MB的内存。在某些情况下,当我的机器达到其上配置的最大线程数(即200个)时,它会挂起。我们必须重新启动应用程序服务器才能使其再次工作。 参数为: JAVA_OPTS="-server -Xss128k -Xms2048m -Xmx2048m -XX:MaxPermSize=512m -XX:NewRatio=3 -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+CM

请帮我解决一个问题。我有CentOS,内存为4GB,Tomcat配置了大约1500MB的内存。在某些情况下,当我的机器达到其上配置的最大线程数(即200个)时,它会挂起。我们必须重新启动应用程序服务器才能使其再次工作。 参数为:

JAVA_OPTS="-server -Xss128k -Xms2048m -Xmx2048m -XX:MaxPermSize=512m -XX:NewRatio=3 -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80 -Dfile.encoding=UTF8"
jvm mem详细信息粘贴在下面。 堆


我认为您的记忆力没有问题。

我认为您刚刚用完了tomcat内部线程池中可用的线程 如果Tomcat的内部请求处理线程池没有任何空闲线程来做更多的工作,并且只是等待这种情况发生变化(可能永远),则Tomcat将无法再处理请求

我的猜测是,您的一个web应用程序中至少有一个servlet/jsp从未完成/返回


进行线程转储以确认这一点,并轻松确定导致这一问题的软件部分。

这个问题是否有一个编程组件,还是纯粹关于配置Tomcat?我们也检查了依赖编程的组件。分析了使用堆转储和jhat创建的对象。我很不确定定义的内存大小和GC调优。所以我想和其他人一起重新检查它。在它卡住的时候进行线程转储,看看他们在做什么。可能有一些僵局。您可以使用jconsole来收集此信息。要在没有jconsole的情况下获得线程转储,您只需使用
kill-QUIT pid
,另请参见感谢mrembisz和beny23,我也会检查一下。我使用jstack进行线程转储。一旦应用程序达到其maxthreads,它将进行线程转储并对其进行研究。
 PSYoungGen      total 435456K, used 73027K [0x00000000e0c00000, 0x00000000fb580000, 0x0000000100000000)
  eden space 435200K, 16% used [0x00000000e0c00000,0x00000000e5350c70,0x00000000fb500000)
  from space 256K, 0% used [0x00000000fb540000,0x00000000fb540000,0x00000000fb580000)
  to   space 256K, 88% used [0x00000000fb500000,0x00000000fb538600,0x00000000fb540000)
 PSOldGen        total 741376K, used 132680K [0x00000000a2400000, 0x00000000cf800000, 0x00000000e0c00000)
  object space 741376K, 17% used [0x00000000a2400000,0x00000000aa592030,0x00000000cf800000)
 PSPermGen       total 22912K, used 22880K [0x0000000092400000, 0x0000000093a60000, 0x00000000a2400000)
  object space 22912K, 99% used [0x0000000092400000,0x0000000093a58088,0x0000000093a60000)

Code Cache  [0x00002aaaab021000, 0x00002aaaab311000, 0x00002aaaae021000)
 total_blobs=1033 nmethods=670 adapters=317 free_code_cache=47372736 largest_free_block=12096

0x00002aaab41b7800 JavaThread ""http-apr-80"-exec-214" daemon [_thread_blocked, id=2636, stack(0x0000000043b06000,0x0000000043b27000)]