Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java进程的完全锁定_Java_Lockup - Fatal编程技术网

Java进程的完全锁定

Java进程的完全锁定,java,lockup,Java,Lockup,这一点令人困惑。突然之间,我们开始遇到这样一种情况:Java进程中的所有线程都达到阻塞状态,进程完全冻结。没有jvm.log或hs*.log文件来指示正在发生的事情 jstack转储列出了许多线程,所有线程都处于阻塞状态,其中一些线程令人困惑,如下所示: Thread 14766: (state = BLOCKED) - java.lang.String.substring(int, int) @bci=62, line=1939 (Compiled frame) - java.util.For

这一点令人困惑。突然之间,我们开始遇到这样一种情况:Java进程中的所有线程都达到阻塞状态,进程完全冻结。没有jvm.log或hs*.log文件来指示正在发生的事情

jstack转储列出了许多线程,所有线程都处于阻塞状态,其中一些线程令人困惑,如下所示:

Thread 14766: (state = BLOCKED)
- java.lang.String.substring(int, int) @bci=62, line=1939 (Compiled frame)
- java.util.Formatter.parse(java.lang.String) @bci=73, line=2469 (Compiled frame)
- java.util.Formatter.format(java.util.Locale, java.lang.String, java.lang.Object[]) @bci=213, line=2438 (Compiled frame)
- java.util.Formatter.format(java.lang.String, java.lang.Object[]) @bci=7, line=2367 (Compiled frame)
- java.lang.String.format(java.lang.String, java.lang.Object[]) @bci=9, line=2769 (Compiled frame)
(其余部分被剪掉)

或者这个:

Thread 14794: (state = BLOCKED)
- java.lang.Throwable.toString() @bci=17, line=344 (Interpreted frame)
- java.lang.String.valueOf(java.lang.Object) @bci=10, line=2826 (Compiled frame)
- java.io.PrintWriter.println(java.lang.Object) @bci=1, line=710 (Interpreted frame)
- java.lang.Throwable.printStackTrace(java.io.PrintWriter) @bci=6, line=509 (Compiled frame)
- org.apache.log4j.DefaultThrowableRenderer.render(java.lang.Throwable) @bci=19, line=60 (Compiled frame)
- org.apache.log4j.spi.ThrowableInformation.getThrowableStrRep() @bci=50, line=87 (Interpreted frame)
- org.apache.log4j.spi.LoggingEvent.getThrowableStrRep() @bci=13, line=413 (Compiled frame)
- org.apache.log4j.WriterAppender.subAppend(org.apache.log4j.spi.LoggingEvent) @bci=26, line=313 (Compiled frame)
- org.apache.log4j.RollingFileAppender.subAppend(org.apache.log4j.spi.LoggingEvent) @bci=2, line=276 (Interpreted frame)
- org.apache.log4j.WriterAppender.append(org.apache.log4j.spi.LoggingEvent) @bci=10, line=162 (Compiled frame)
- org.apache.log4j.AppenderSkeleton.doAppend(org.apache.log4j.spi.LoggingEvent) @bci=106, line=251 (Compiled frame)
- org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(org.apache.log4j.spi.LoggingEvent) @bci=41, line=66 (Compiled frame)
- org.apache.log4j.Category.callAppenders(org.apache.log4j.spi.LoggingEvent) @bci=26, line=206 (Compiled frame)
- org.apache.log4j.Category.forcedLog(java.lang.String, org.apache.log4j.Priority, java.lang.Object, java.lang.Throwable) @bci=14, line=391 (Interpreted frame)
- org.apache.log4j.Category.error(java.lang.Object, java.lang.Throwable) @bci=37, line=322 (Interpreted frame)
(其余部分被剪掉)

我必须承认,虽然我试图在网上寻找一个原因,但我不知道从哪里开始寻找它


这是在jdk1.6.031下发生的操作系统是什么?多线程问题往往依赖于操作系统,因为它们的实现是特定于操作系统的。Java线程只是操作系统线程的抽象


/Koya

是否在字符串操作中都被阻塞?您是否已经用完了heap perm gen空间(在挂起的进程上执行“jstat-gc”)

我将使用
-verbosegc
运行该程序。它似乎在等待一些可用空间时被阻止。

此部分异常:

org.apache.log4j.Category.callAppenders(org.apache.log4j.spi.LoggingEvent) @bci=26, line=206 (Compiled frame)
org.apache.log4j.Category.forcedLog(java.lang.String, org.apache.log4j.Priority, java.lang.Object, java.lang.Throwable) @bci=14, line=391 (Interpreted frame)
org.apache.log4j.Category.error(java.lang.Object, java.lang.Throwable) @bci=37, line=322 (Interpreted frame)
可能与log4j中的一个bug有关。请浏览以下网页:


欢迎来到多线程编程的奇妙世界:在IDE中检查死锁,在IDE中可以查看每个线程的执行情况。有多少线程正在运行?有足够的内存吗?在这个日志中似乎有类似的情况:为什么Throwable.toString()和String.substring(int,int)@aioobe是的,看起来很相似,知道发生了什么吗?不知道如何添加注释。感谢您大声说出。jstat的结果:S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGC FGC GCT 40000.0 36928.0 9345.7 0.0 557952.0 518204.3 1271808.0 339799.0 145408.0 144225.6 1254 68.950 403 1281.828 1350.778看起来可能存在永久空间问题确实如此。但是,最大烫发大小设置为“-XX:MaxPermSize=192m”。那么,为什么只有140mb左右的可用空间呢?嗯,它可能正试图扩大容量,并达到其他一些限制。据我所知,Xmx(max heap size)是新一代和老一代组合的最大值,perm gen空间是除此之外的,所以这不应该是限制因素。但是,当perm gen填满时,JVM的行为似乎总是有点奇怪,所以可以尝试设置一个固定的、更大的大小(-XX:PermSize=192m)。也可以尝试使用CMS收集器打开perm gen收集。-XX:+UseConMarkSweepGC-XX:+CMSPermGenSweepingEnabled-XX:+CmsClassUnloadingEnable您是否在32位操作系统上运行?可能是3GB进程虚拟机限制