我可以让Tomcat作为服务运行以转储堆吗?

莱尔德·纳尔逊(Laird Nelson):

我正在尝试将Tomcat(当前作为Windows 2003框上的服务运行)转储到上OutOfMemoryError

(Tomcat正在运行Hudson,它在我的构建的末尾报告了堆空间问题。手动运行该构建不会产生此类错误。Hudson的家伙需要堆转储才能开始。)

按照其他地方的指示,我已OutOfMemoryError通过将以下内容添加到JVM选项来告诉Apache Service Monitor配置用于运行Tomcat来转储堆的JVM:-XX:+ HeapDumpOnOutOfMemoryError然后我再次运行构建。果然,它报告有堆错误。我扫描整个磁盘以查找默认java_pid123.hprof文件(显然123已被JVM的PID替换)。没有.hprof文件存在任何地方。

我被困在陷阱22中:我需要Hudson家伙使用堆转储来解决他们的内存泄漏,但是如果我在Tomcat下运行Hudson,则无法获得堆转储。

当Tomcat作为Windows服务运行时,有什么特殊的方法可以在OutOfMemoryError上从中获取堆转储吗?

我尝试过的另一件事是在“启动”和“关闭”选项卡上告诉它使用“ Java”选项而不是“ jvm”选项。我相信这应该告诉服务管理器尝试使用Java可执行命令启动Tomcat,而不是jvm.dll直接启动Tomcat 当我这样做时,该服务将无法启动。

当然其他人也有类似的问题吗?

莱尔德·纳尔逊(Laird Nelson):

终于把这个放在床上之后,我想为其他可能遇到相同问题的人回答这个问题。

首先,如果在Windows上安装Tomcat .exe,则即使Apache升级安装程序,也不要使用该安装程序。无论您做什么,它都不允许您以系统帐户以外的任何其他方式运行Tomcat。似乎该系统帐户没有权限.hprof在当前目录中写入文件,并且似乎没有进行任何Windows安全性调整都可以使此问题消失。

好的,因此您已经从.zip发行版中安装了Tomcat 使用service.bat脚本将其作为服务安装确保将其设置为以为此目的专门创建的特定用户身份运行。同样,请确保您希望Tomcat在堆转储时写入的文件夹是该用户可写的。

编辑service.bat文件以将-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=C:\whatever选项包含在正确的位置(您可以在其中放置JVM选项)。这应该够了吧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章