谷歌应用引擎(Google App Engine)使用JPA部署的应用程序卡住了

14

我有一个使用datanucleus作为JPA提供商的Java GAE Web应用程序。 在我的本地计算机上部署时,部署会挂起(需要几分钟时间)。 查看任务管理器,我发现有一个javac进程正在运行。 有什么想法是出了什么问题吗?


我也经常遇到这种情况。最终只能通过取消、回滚并重试来解决。有时甚至需要尝试几次。我怀疑应用程序没有正确启动(有时可以通过检查日志来确认),但有时候它只是因为某些原因需要很长时间才能完成。 - Steven
2
“本地部署”是什么意思?你要么在本地运行,要么部署它 - 不能两者兼顾。 - Nick Johnson
你能发布你的web.xml和appengine-web.xml文件吗? - Abduliam Rehmanius
我猜JPA是无辜的,只是Google有点超载了。遵循@Steven的建议。这还是个问题吗? - Thilo
我同意@Thilo的观点,我不知道JPA中可能会导致javac运行,但GWT肯定会。 - Andrew Wynham
它使用哪个编译器版本?这种javac挂起问题让我想起了1.4或者有时候是1.5,当虚拟机无法处理大量节点时,编译器会挂起。 - Gepsens
4个回答

1

同意。这是GAE的问题,它只有在进行6排列编译后才会部署应用程序并显示在浏览器上。我觉得这只是GAE的问题,而不是JPA的问题。我开发了一个类似的应用程序,如果您认为是因为JPA,您可以检查相应的数据库管理员以查看为用户打开了多少个线程。如果您发现一些线程没有被垃圾回收,请检查您的代码。否则,您可以使用ConnectionPooling机制(使用ORM加速数据库检索).....


0

这取决于您使用的平台

  1. Windows
  2. Linux
  3. Mac OS X

您可以通过检查信号来查看发生了什么

发送一个信号

Usage:

SendSignal <pid>
  <pid> - send ctrl-break to process <pid> (hex ok)
You can get the source via anonymous CVS at

cvs -d :pserver:anon@www.latenighthacking.com:/code-cvsroot co 2003/SendSignal

0

答案取决于几个参数

  • 你是如何部署的,是使用eclipse还是命令行?
  • GAE版本(以及GAE/GWT eclipse插件版本)
  • Windows还是Linux?

无论如何,Thread Dump都可以帮助查看哪些非守护线程被卡住了。

对于在Windows上进行命令行部署-在它挂起后按下CtrlBreak获取线程转储

Eclipse中,如果有一种以调试模式部署的方式,可以查看调试视图堆栈获取相同的信息。
还请参阅这个答案:How to Force Thread Dump in Eclipse?


0

我最近通过Eclipse将我的简单应用程序部署到Google App Engine,但是它在几次尝试后都未能成功部署。过了一段时间后,它终于成功部署了,我也能够访问该应用程序。如果出现卡顿情况,请停止部署进程并重新部署。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接