两周以来,我一直在尝试在 Win 2K3 R2 上将 Atlassian Fisheye/Crucible 设置为服务。我不断收到各种“java.lang.OutOfMemoryError: PermGen space”错误,这会导致 Fisheye 崩溃并迫使我重新启动服务。
我已经关注例子在 Atlassian 支持网站上,在服务包装器中配置 MaxPermSize。但是,当我检查 Fisheye 管理页面和调试日志中的 SysInfo 时,我没有看到任何确认信息。Java 堆信息在两个地方都有,所以我希望 MaxPermSize 设置出现在两个地方。
错误仍然存在,并且 Atlassian 支持也没有什么帮助。
我感谢任何帮助。
答案1
您可以在 Wrapper.conf 文件中进行设置。这是我的配置文件,它对我来说效果很好,我将其与在 Windows Server 2008 R2 上运行的 Fisheye 2.6.3 一起使用。此文件与示例/默认配置基本相同,但有一些重要的补充,我将在最后进行评论。
#******************************************************************** # 包装器属性 #******************************************************************** # 工作目录 包装器.工作.目录=../../ Java 应用程序 wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe # Java Main 类。该类必须实现 WrapperListener 接口 # 或者保证 WrapperManager 类已初始化。Helper 提供了 # 个类来为您执行此操作。请参阅集成部分 # 请参阅文档以了解详细信息。 wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper # Java Classpath(包括wrapper.jar)添加类路径元素为 # 需要从 1 开始(首先添加 lib,以便首先加载 log4j 配置) wrapper.java.classpath.1=./fisheyeboot.jar 包装器.java.classpath.2=包装器/lib/*.jar # Java 库路径(Wrapper.DLL 或 libwrapper.so 的位置) 包装器.java.库.路径.1=包装器/lib wrapper.java.library.path.2=lib/native/linux-i386 wrapper.java.library.path.3=lib/native/osx-ppc wrapper.java.library.path.4=lib/native/solaris-sparc wrapper.java.library.path.5=lib/native/win32-x86 # Java 附加参数 wrapper.java.additional.1=-服务器 wrapper.java.additional.2=-显示版本 wrapper.java.additional.3=-Djava.awt.headless=true # JDK 1.5 jmx 的附加参数 wrapper.java.additional.4=-Dcom.sun.management.jmxremote 包装器.java.additional.5=-Dcom.sun.management.jmxremote.port=4242 包装器.java.additional.6=-Dcom.sun.management.jmxremote.authenticate=false 包装器.java.additional.7=-Dcom.sun.management.jmxremote.ssl=false 包装器.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false wrapper.java.additional.9=-Dcom.sun.management.jmxremote.password.file=./wrapper/jmxremote.password wrapper.java.additional.10=-Dwrapper.mbean.name="wrapper:type=Java 服务包装器控制" wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin\." wrapper.java.additional.12=-XX:MaxPermSize=256m 包装器.java.additional.13=-Xrs 包装器.java.additional.14=-Dfile.encoding=UTF-8 # 初始 Java 堆大小(以 MB 为单位) 包装器.java.初始化内存=64 # 最大 Java 堆大小(以 MB 为单位) 包装器.java.最大内存=1024 # 应用参数,从1开始根据需要添加参数 # 第一个应用程序参数是其主类的名称 # 方法将在应用程序启动时调用。该类 # 名称后面跟着要传递给其主函数的参数数量 # 方法。接下来是实际参数。 wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl 包装器.应用程序.参数.2=1 包装器.应用程序.参数.3=开始 # 启动参数后面跟着主类的名称 # 方法是用来停止应用程序的。停止类名 # 后面跟着一个标志,控制包装器是否应该 # 等待所有非守护线程完成后再退出 JVM。 # 标志后面跟着要传递给 # 停止类的 main 方法。最后是实际参数。 wrapper.app.parameter.4=com.cenqua.fisheye.FishEyeCtl 包装器.应用程序.参数.5=true 包装器.应用程序.参数.6=1 包装器.应用程序.参数.7=停止 #******************************************************************** # 包装器日志属性 #******************************************************************** # 控制台输出的格式。(请参阅文档了解格式) 包装器.控制台.格式=M # 控制台输出的日志级别。(请参阅文档了解日志级别) wrapper.console.loglevel=INFO # 用于包装器输出日志的日志文件。 wrapper.log文件=var/log/wrapper.log # 日志文件的输出格式。(请参阅文档了解格式) 包装器.日志文件.格式=LPTM # 日志文件输出的日志级别。(请参阅文档了解日志级别) 包装器.日志文件.日志级别=INFO # 日志文件允许增长到的最大大小 # 日志被滚动。大小以字节为单位指定。默认值 0 号,禁用日志滚动。可以用“k”(kb)或 # 'm' (mb) 后缀。例如:10m = 10 兆字节。 包装器.日志文件.最大大小=50m # 在旧日志文件之前允许的最大滚动日志文件数 删除 # 个文件。默认值为 0,表示没有限制。 包装器.日志文件.最大文件数=10 # 系统/事件日志输出的日志级别。(请参阅文档了解日志级别) wrapper.syslog.loglevel=NONE #******************************************************************** # 包装器窗口属性 #******************************************************************** # 作为控制台运行时使用的标题 wrapper.console.title=鱼眼 #******************************************************************** # 包装器 Windows NT/2000/XP 服务属性 #******************************************************************** # 警告 - 应用程序 #使用此配置文件已经安装为服务。 # 修改此部分前,请先卸载该服务。 然后可以重新安装#服务。 # 服务名称 wrapper.ntservice.name=鱼眼 # 服务的显示名称 wrapper.ntservice.displayname=鱼眼 # 服务描述 wrapper.ntservice.description=鱼眼 # 服务依赖项。从 1 开始,根据需要添加依赖项 wrapper.ntservice.dependency.1= # 安装服务的模式。AUTO_START 或 DEMAND_START wrapper.ntservice.starttype=AUTO_START # 允许服务与桌面交互。 包装器.ntservice.interactive=false
值得注意的台词
wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe
JDK“热点”服务器可执行文件的完整路径。请注意,下载完整的 JDK,而不仅仅是 JRE。
wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin.."
wrapper.java.additional.12=-XX:MaxPermSize=256m
wrapper.java.additional.13=-Xrs
wrapper.java.additional.14=-Dfile.encoding=UTF-8
以上内容均未在 Atlassian 文档中显示,我通过反复试验逐渐添加了这些内容。当 FeCru 首次在服务包装器下启动时,它可能会因内存不足错误而停止,'MaxPermSize' 行可修复该问题。
我还发现有必要指定 FISHEYE_INST,如上所示。我不知道为什么路径/..
末尾要用 指定,我找到的例子中就是这样的。毫无疑问,这是一些 cookie linux 惯例。其他行,我不记得它们是做什么用的,但我出于某种原因添加了它们,但没有记录原因。人无完人 ;-)
包装器.java.初始化内存=64 包装器.java.最大内存=1024
堆内存分配从默认值增加了 - 我索引了一些相当重要的存储库,并且我可以负担得起额外的资源 - 您可以使用默认的较小分配。