Google App Engine:在部署期间扫描JSP时旋转

时间:2012-04-11 20:31:23

标签: java regex google-app-engine

使用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}}中一个非常讨厌的错误,在那里 - 有人可能会发现代码...

2 个答案:

答案 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中一个非常讨厌的错误,无论在哪里找到该代码...