使用1.6.4.1 SDK,当我运行appcfg.sh时,我得到“5%扫描jsp文件”,然后 它永远旋转(我让它一夜之间运行),消耗了我的一个CPU的100%。起初,我怀疑它与compiling JSPs issue相同,但我甚至没有那么远。它看起来像是AbstractGlob和/或javax.util.Regex中的某种错误。项目is here,以防您想自己复制。
其他人有这种经历吗?知道可能导致它的原因吗?有什么方法可以绕过它,以便我可以上传我的应用程序?
这是来自kill -QUIT的堆栈跟踪:
1)
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415 mixed mode):
"Timer-0" daemon prio=5 tid=1029d0000 nid=0x10c304000 in Object.wait() [10c303000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f45077b0> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Timer.java:509)
- locked <7f45077b0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)
"Poller SunPKCS11-Darwin" daemon prio=1 tid=10b078000 nid=0x10c201000 waiting on condition [10c200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692)
at java.lang.Thread.run(Thread.java:680)
"Low Memory Detector" daemon prio=5 tid=10b00b800 nid=0x10bd01000 runnable [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=9 tid=10b00a800 nid=0x10ba04000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=9 tid=10b00a000 nid=0x10b901000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=9 tid=10b009000 nid=0x10a704000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=10b008000 nid=0x10a601000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=1028d2000 nid=0x10a0ef000 in Object.wait() [10a0ee000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=1028d1000 nid=0x109fec000 in Object.wait() [109feb000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f4507570> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <7f4507570> (a java.lang.ref.Reference$Lock)
"main" prio=5 tid=102801000 nid=0x100501000 runnable [1004ff000]
java.lang.Thread.State: RUNNABLE
at java.lang.Character.codePointAt(Character.java:2335)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3344)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3770)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Slice.match(Pattern.java:3482)
at java.util.regex.Matcher.match(Matcher.java:1127)
at java.util.regex.Matcher.matches(Matcher.java:502)
at com.google.apphosting.utils.glob.AbstractGlob.matches(AbstractGlob.java:48)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:56)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:52)
at com.google.apphosting.utils.glob.GlobIntersector.reorderAndBlendChildren(GlobIntersector.java:95)
at com.google.apphosting.utils.glob.GlobIntersector.getIntersection(GlobIntersector.java:68)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.getGlobPatterns(AppYamlTranslator.java:416)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.size(AppYamlTranslator.java:390)
at com.google.appengine.tools.admin.AppYamlTranslator.translateWebXml(AppYamlTranslator.java:191)
at com.google.appengine.tools.admin.AppYamlTranslator.getYaml(AppYamlTranslator.java:83)
at com.google.appengine.tools.admin.Application.generateAppYaml(Application.java:897)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:473)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:641)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:172)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
"VM Thread" prio=9 tid=1028cc800 nid=0x109ee9000 runnable
"Gang worker#0 (Parallel GC Threads)" prio=9 tid=102802800 nid=0x102401000 runnable
"Gang worker#1 (Parallel GC Threads)" prio=9 tid=102803000 nid=0x102504000 runnable
"Gang worker#2 (Parallel GC Threads)" prio=9 tid=102803800 nid=0x102607000 runnable
"Gang worker#3 (Parallel GC Threads)" prio=9 tid=102804000 nid=0x10270a000 runnable
"Concurrent Mark-Sweep GC Thread" prio=9 tid=10287f800 nid=0x109bf0000 runnable
"VM Periodic Task Thread" prio=10 tid=10b01d000 nid=0x10be04000 waiting on condition
"Exception Catcher Thread" prio=10 tid=102801800 nid=0x1017f9000 runnable
JNI global references: 1671
Heap
par new generation total 19136K, used 13388K [7f3000000, 7f44c0000, 7f44c0000)
eden space 17024K, 77% used [7f3000000, 7f3cf67e8, 7f40a0000)
from space 2112K, 5% used [7f42b0000, 7f42cca00, 7f44c0000)
to space 2112K, 0% used [7f40a0000, 7f40a0000, 7f42b0000)
concurrent mark-sweep generation total 63872K, used 4234K [7f44c0000, 7f8320000, 7fae00000)
concurrent-mark-sweep perm gen total 21248K, used 14477K [7fae00000, 7fc2c0000, 800000000)
2)
^\2012-04-12 19:03:02
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415 mixed mode):
"Timer-0" daemon prio=5 tid=1029d0000 nid=0x10c304000 in Object.wait() [10c303000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f45077b0> (a java.util.TaskQueue)
at java.lang.Object.wait(Object.java:485)
at java.util.TimerThread.mainLoop(Timer.java:483)
- locked <7f45077b0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)
"Poller SunPKCS11-Darwin" daemon prio=1 tid=10b078000 nid=0x10c201000 waiting on condition [10c200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692)
at java.lang.Thread.run(Thread.java:680)
"Low Memory Detector" daemon prio=5 tid=10b00b800 nid=0x10bd01000 runnable [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=9 tid=10b00a800 nid=0x10ba04000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=9 tid=10b00a000 nid=0x10b901000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=9 tid=10b009000 nid=0x10a704000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=10b008000 nid=0x10a601000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=1028d2000 nid=0x10a0ef000 in Object.wait() [10a0ee000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=1028d1000 nid=0x109fec000 in Object.wait() [109feb000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f4507570> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <7f4507570> (a java.lang.ref.Reference$Lock)
"main" prio=5 tid=102801000 nid=0x100501000 runnable [1004ff000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Slice.match(Pattern.java:3482)
at java.util.regex.Matcher.match(Matcher.java:1127)
at java.util.regex.Matcher.matches(Matcher.java:502)
at com.google.apphosting.utils.glob.AbstractGlob.matches(AbstractGlob.java:48)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:56)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:52)
at com.google.apphosting.utils.glob.GlobIntersector.reorderAndBlendChildren(GlobIntersector.java:95)
at com.google.apphosting.utils.glob.GlobIntersector.getIntersection(GlobIntersector.java:68)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.getGlobPatterns(AppYamlTranslator.java:416)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.size(AppYamlTranslator.java:390)
at com.google.appengine.tools.admin.AppYamlTranslator.translateWebXml(AppYamlTranslator.java:191)
at com.google.appengine.tools.admin.AppYamlTranslator.getYaml(AppYamlTranslator.java:83)
at com.google.appengine.tools.admin.Application.generateAppYaml(Application.java:897)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:473)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:641)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:172)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
"VM Thread" prio=9 tid=1028cc800 nid=0x109ee9000 runnable
"Gang worker#0 (Parallel GC Threads)" prio=9 tid=102802800 nid=0x102401000 runnable
"Gang worker#1 (Parallel GC Threads)" prio=9 tid=102803000 nid=0x102504000 runnable
"Gang worker#2 (Parallel GC Threads)" prio=9 tid=102803800 nid=0x102607000 runnable
"Gang worker#3 (Parallel GC Threads)" prio=9 tid=102804000 nid=0x10270a000 runnable
"Concurrent Mark-Sweep GC Thread" prio=9 tid=10287f800 nid=0x109bf0000 runnable
"VM Periodic Task Thread" prio=10 tid=10b01d000 nid=0x10be04000 waiting on condition
"Exception Catcher Thread" prio=10 tid=102801800 nid=0x1017f9000 runnable
JNI global references: 1709
Heap
par new generation total 19136K, used 9948K [7f3000000, 7f44c0000, 7f44c0000)
eden space 17024K, 58% used [7f3000000, 7f39b6118, 7f40a0000)
from space 2112K, 0% used [7f40a0000, 7f40a1000, 7f42b0000)
to space 2112K, 0% used [7f42b0000, 7f42b0000, 7f44c0000)
concurrent mark-sweep generation total 63872K, used 4726K [7f44c0000, 7f8320000, 7fae00000)
concurrent-mark-sweep perm gen total 21248K, used 14489K [7fae00000, 7fc2c0000, 800000000)
第3)
^\2012-04-12 19:03:50
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415 mixed mode):
"Timer-0" daemon prio=5 tid=1029d0000 nid=0x10c304000 in Object.wait() [10c303000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f45077b0> (a java.util.TaskQueue)
at java.lang.Object.wait(Object.java:485)
at java.util.TimerThread.mainLoop(Timer.java:483)
- locked <7f45077b0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)
"Poller SunPKCS11-Darwin" daemon prio=1 tid=10b078000 nid=0x10c201000 waiting on condition [10c200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692)
at java.lang.Thread.run(Thread.java:680)
"Low Memory Detector" daemon prio=5 tid=10b00b800 nid=0x10bd01000 runnable [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=9 tid=10b00a800 nid=0x10ba04000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=9 tid=10b00a000 nid=0x10b901000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=9 tid=10b009000 nid=0x10a704000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=10b008000 nid=0x10a601000 waiting on condition [00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=1028d2000 nid=0x10a0ef000 in Object.wait() [10a0ee000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <7f44f0e08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=1028d1000 nid=0x109fec000 in Object.wait() [109feb000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <7f4507570> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <7f4507570> (a java.lang.ref.Reference$Lock)
"main" prio=5 tid=102801000 nid=0x100501000 runnable [1004ff000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Curly.match0(Pattern.java:3789)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Slice.match(Pattern.java:3482)
at java.util.regex.Matcher.match(Matcher.java:1127)
at java.util.regex.Matcher.matches(Matcher.java:502)
at com.google.apphosting.utils.glob.AbstractGlob.matches(AbstractGlob.java:48)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:56)
at com.google.apphosting.utils.glob.AbstractGlob.matchesAll(AbstractGlob.java:52)
at com.google.apphosting.utils.glob.GlobIntersector.reorderAndBlendChildren(GlobIntersector.java:95)
at com.google.apphosting.utils.glob.GlobIntersector.getIntersection(GlobIntersector.java:68)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.getGlobPatterns(AppYamlTranslator.java:416)
at com.google.appengine.tools.admin.AppYamlTranslator$AbstractHandlerGenerator.size(AppYamlTranslator.java:390)
at com.google.appengine.tools.admin.AppYamlTranslator.translateWebXml(AppYamlTranslator.java:191)
at com.google.appengine.tools.admin.AppYamlTranslator.getYaml(AppYamlTranslator.java:83)
at com.google.appengine.tools.admin.Application.generateAppYaml(Application.java:897)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:473)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:641)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:172)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
"VM Thread" prio=9 tid=1028cc800 nid=0x109ee9000 runnable
"Gang worker#0 (Parallel GC Threads)" prio=9 tid=102802800 nid=0x102401000 runnable
"Gang worker#1 (Parallel GC Threads)" prio=9 tid=102803000 nid=0x102504000 runnable
"Gang worker#2 (Parallel GC Threads)" prio=9 tid=102803800 nid=0x102607000 runnable
"Gang worker#3 (Parallel GC Threads)" prio=9 tid=102804000 nid=0x10270a000 runnable
"Concurrent Mark-Sweep GC Thread" prio=9 tid=10287f800 nid=0x109bf0000 runnable
"VM Periodic Task Thread" prio=10 tid=10b01d000 nid=0x10be04000 waiting on condition
"Exception Catcher Thread" prio=10 tid=102801800 nid=0x1017f9000 runnable
JNI global references: 1709
Heap
par new generation total 19136K, used 9956K [7f3000000, 7f44c0000, 7f44c0000)
eden space 17024K, 58% used [7f3000000, 7f39b81b8, 7f40a0000)
from space 2112K, 0% used [7f40a0000, 7f40a1000, 7f42b0000)
to space 2112K, 0% used [7f42b0000, 7f42b0000, 7f44c0000)
concurrent mark-sweep generation total 63872K, used 4726K [7f44c0000, 7f8320000, 7fae00000)
concurrent-mark-sweep perm gen total 21248K, used 14489K [7fae00000, 7fc2c0000, 800000000)
[编辑]
当我将security-constraint
的Web /**
的WebXml映射从/*
更改为/foo
时,可以解决问题。我的理解是,这个新的安全约束设置将匹配/foo/bar
但不匹配AbstractGlob
:是吗?如果是这样,那么我可能有办法绕过这个bug。但它看起来像{{1}}中一个非常讨厌的错误,在那里 - 有人可能会发现代码...
答案 0 :(得分:0)
Java GAE SDK的版本为1.6.4.1 ......它似乎可以解决其他问题,但它可能值得一试。 https://groups.google.com/d/msg/google-appengine/V4KHnq2f03Y/X24dzXVJyMQJ
答案 1 :(得分:0)
当我将安全约束的WebXml映射从/ **更改为/ *时,可以解决此问题。我的理解是,此新的安全性约束设置将匹配/ foo但不匹配/ foo / bar:是吗?如果是这样,那么我可能有办法规避此错误。但这似乎是AbstractGlob中一个非常讨厌的错误,无论在哪里找到该代码...