Java包装器OutofMemory

Java包装器OutofMemory,java,wrapper,Java,Wrapper,我有一个在java包装器下运行的程序,因为应用程序必须作为Windows服务运行。但是,在每隔两周运行一次应用程序之后,我在线程“thread-5”java.lang.OutOfMemoryError:java堆空间中遇到了异常 内存值被注释掉。这是否意味着此应用程序不允许使用内存限制 我也在检查可能内存泄漏的代码,但是有没有办法修改配置以找到原因/防止内存不足错误 #****************************************************************

我有一个在java包装器下运行的程序,因为应用程序必须作为Windows服务运行。但是,在每隔两周运行一次应用程序之后,我在线程“thread-5”java.lang.OutOfMemoryError:java堆空间中遇到了异常

内存值被注释掉。这是否意味着此应用程序不允许使用内存限制

我也在检查可能内存泄漏的代码,但是有没有办法修改配置以找到原因/防止内存不足错误

#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
#  Locate the java binary on the system PATH:
#wrapper.java.command=%JAVA_HOME%\bin\java
#  Specify a specific java binary:
set.JAVA_HOME=%JAVA_HOME%
wrapper.java.command=%JAVA_HOME%\bin\java

# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=%JAVA_HOME%\lib\tools.jar
wrapper.java.classpath.3=C:\daifuku\wms\tomcat\webapps\wms\WEB-INF\classes
wrapper.java.classpath.4=C:\daifuku\wms\tomcat\webapps\wms\WEB-INF\lib\*.jar
wrapper.java.classpath.5=C:\daifuku\wms\tomcat\lib\comm.jar
wrapper.java.classpath.6=C:\daifuku\wms\tomcat\lib\servlet-api.jar
wrapper.java.classpath.7=C:\daifuku\wms\tomcat\lib\jsp-api.jar


# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=%JAVA_HOME%\jre\lib

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE

# Java Additional Parameters
wrapper.java.additional.1=

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=64

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=512

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=XXX

非常感谢

因此,您基本上是在询问当您不指定init和max内存(我相信这会转化为众所周知的
-Xmx
-Xms
时,java实际为Heap分配了哪些参数

一般来说,它依赖于系统,而且算法也发生了多次更改,因此可以肯定的是,您实际上应该检查您的系统:

java -XX:+PrintFlagsFinal -version | grep HeapSize // or run you application with that flag if you wish
// or on windows 
java -XX:+PrintFlagsFinal -version | findstr HeapSize
然后检查:

  • 初始化
  • 最大化
这是否意味着此应用程序不允许使用内存限制

我相信它将使用为您的系统配置的默认值:


由于您提到在运行应用程序数周后出现问题,很可能是内存泄漏。我建议您使用JvisualVm为java包装器进程进行转储,然后使用Mat analyzer分析转储。

与java参数-Xms和-Xmx对应的内存参数这些的默认值取决于平台和其他因素。请看,我不是在回答这个问题,因为我不确定包装器的等效值是什么,但您需要查看jvm设置“-XX:-heapdumponAutofmemoryError”,因为当OOM发生时,这将生成一个堆转储,您可以使用它来检查所有空间在何时被用完e崩溃时间(我倾向于将它们导入VisualVM进行调查)。请参阅