在哪里为 Ubuntu 9.04 下的 Tomcat 6 设置 java 堆选项(例如 -Xmx)?

在哪里为 Ubuntu 9.04 下的 Tomcat 6 设置 java 堆选项(例如 -Xmx)?

我正在使用 Ubuntu 9.04 中的 tomcat6 包运行 Tomcat,它使用 jsvc 将 Tomcat 变成守护进程。我想知道设置 Java 堆选项的正确方法,就像-XmxTomcat 一样。我想将配置放在风格最正确、最不可能被 Ubuntu 包更新覆盖的地方。

我现在看到的选项:

  • 在某处对它们进行硬编码/etc/init.d/tomcat6
  • 在某处对它们进行硬编码/usr/share/tomcat6/bin/catalina.sh
  • 创建一行来/usr/share/tomcat6/bin/startup.sh设置 CATALINA_OPTS 以具有所需的标志,然后将 CATALINA_OPTS 导出为环境变量。(这看起来会被选中catalina.sh。)

最后一种选择听起来最好,并且被提倡(但没有解释原因)在 Tomcat 启动脚本中增加 Java 的堆空间。但我想听听第二种意见。有人想确认一下有没有更好的方法吗?

答案1

至少在 Ubuntu 10.04 上,/etc/init.d/tomcat6 会引用 /etc/default/tomcat6(如果存在)。这就是我放置覆盖的地方,我相信这通常是进行此类更改的“认可”方式。

答案2

如果您查看安装的 bin 目录,您将看到 catalina.sh 或 .bat 脚本。如果您查看这些脚本,您将看到它们分别运行 setenv.sh 或 setenv.bat 脚本(如果存在)来设置环境变量。相关环境变量在 catalina.sh/bat 顶部的注释中描述。要使用它们,例如,创建一个文件 $CATALINA_HOME/bin/setenv.sh,其内容为

export JAVA_OPTS="-server -Xmx512m"

对于 Windows,你需要在 setenv.bat 中执行类似以下操作:

set JAVA_OPTS=-server -Xmx768m

从 tomcat 5.5 到 7 都是如此。原始答案https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra

答案3

寻找/etc/tomcat6/tomcat6.conf它已经准备好了 JAVA_OPTS 之类的东西并等待您取消注释(但只有当您拥有它时,我使用的是 Centos 而不是 Ubuntu)。

# System-wide configuration file for tomcat6 services
# This will be sourced by tomcat6 and any secondary service
# Values will be overridden by service-specific configuration
# files in /etc/sysconfig
#
# Use this one to change default values for all services
# Change the service specific ones to affect only one service
# (see, for instance, /etc/sysconfig/tomcat6)
#
...
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

答案4

到目前为止我发现的最优雅的方法是编辑 /etc/init.d/tomcat6 并将其添加到文件顶部:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

我在问题中列出的其他选项似乎不起作用。在研究了脚本并进行了更多实验后,我现在怀疑 /usr/share/tomcat6/bin/catalina.sh 和 /usr/share/tomcat6/bin/startup.sh 在使用 tomcat6 Ubuntu 软件包启动 tomcat 时是否发挥任何作用。相反,/etc/init.d/tomcat6 完全取代了 catalina.sh/startup.sh 通常可能完成的任何工作。

我仍然有点担心在未来的某些软件包更新中丢失这些配置选项,但我想如果发生这种情况,恢复它们会很容易。

相关内容