Java Wrapper OutofMemory - PullRequest
       8

Java Wrapper OutofMemory

2 голосов
/ 06 января 2020

У меня есть программа, работающая в оболочке 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

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Означает ли это, что нет предела памяти, которое может использовать это приложение?

Я полагаю, что оно будет использовать значение по умолчанию, настроенное для вашей системы: Как это по умолчанию Java размер кучи определен?

Поскольку вы упомянули, что проблема возникает после запуска вашего приложения в течение нескольких недель, скорее всего, у вас утечка памяти. Я советую вам сделать дамп с использованием JvisualVm для вашего процесса java, а затем просто проанализируйте дамп с помощью анализатора Mat https://www.eclipse.org/mat/.

0 голосов
/ 06 января 2020

Таким образом, вы в основном спрашиваете, какие параметры для Heap java фактически выделяет, когда вы не указываете init и max memory (которые, я считаю, переводятся в хорошо известные -Xmx и -Xms

Как правило, это зависит от системы, и алгоритм также много раз менялся, поэтому, чтобы быть уверенным, вы должны проверить свою систему:

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

Затем проверьте:

  • InitialHeapSize
  • MaxHeapSize
...