如何为在 Win2k3 上作为服务运行的 Atlassian Fisheye/Crucible 设置“MaxPermSize”?

如何为在 Win2k3 上作为服务运行的 Atlassian Fisheye/Crucible 设置“MaxPermSize”?

两周以来,我一直在尝试在 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

堆内存分配从默认值增加了 - 我索引了一些相当重要的存储库,并且我可以负担得起额外的资源 - 您可以使用默认的较小分配。

相关内容