Sitio web de resúmenes de películas - E-sports - Problema de error de falta de memoria en la base de datos de consulta JAVA

Problema de error de falta de memoria en la base de datos de consulta JAVA

Configuración de memoria JVM y Tomcat

Estrategia de optimización de Tomcat5.5 en condiciones de gran concurrencia en la plataforma del sistema Linux (2009-03-11 12:45:24)

Etiqueta: estrategia de optimización de linux tomcat5.5 it Categoría: java

Después de implementar el sistema, para aumentar la concurrencia del sistema y la velocidad de respuesta del sistema, se realizó algo de trabajo que se resume a continuación;

1. Modifique el archivo server.xml

maxHttpHeaderSize="8192"

maxThreads="1000" minSpareThreads="75" maxSpareThreads="300"

enableLookups="false" redirigirPort="8443" aceptarCount="200"

tiempo de espera de conexión = "50000" enableUploadTimeout="true"/>

MaxThreads y AcceptCount modificados principalmente.

Cita

La información de Google dice "Si desea aumentar el número de conexiones simultáneas, debe aumentar estos dos parámetros al mismo tiempo. El número máximo de conexiones permitidas por la web el servidor también está sujeto al kernel del sistema operativo. La configuración de parámetros suele ser de unos 2000 para Windows y de unos 1000 para Linux. ”

2. Se agregó la configuración de memoria inicial de inicio de Tomcat: se agregó la configuración de memoria de parámetros.

Memoria para situación 2G:

JAVA_OPTS="-server -Xms1500M -Xmx1500M -Xss256K -Djava.awt.headless=true -XX:PermSize=64M -XX:MaxPermSize= 128 m"

(Suplemento: se agrega -Dfile.encoding=utf8 para establecer el método de codificación para la escritura de archivos)

Cita

El tamaño máximo del montón no debe exceder el 80% de la memoria física disponible, generalmente Para establecer las opciones -Xms y -Xmx en la misma

Asignación de memoria de montón

La memoria asignada inicialmente por la JVM se especifica mediante - Xms. El valor predeterminado es 1/64 de la memoria física; la asignación máxima de JVM La memoria se especifica mediante -Xmx y el valor predeterminado es 1/4 de la memoria física. De forma predeterminada, cuando la memoria del montón libre es inferior al 40%, la JVM aumentará el montón hasta el límite máximo de -Xmx; cuando la memoria del montón libre es superior al 70%, la JVM reducirá el montón hasta el límite mínimo de; -Xms. Por lo tanto, el servidor generalmente establece -Xms y -Xmx en iguales para evitar ajustar el tamaño del montón después de cada GC.

Asignación de memoria no dinámica

JVM usa -XX:PermSize para establecer el valor inicial de la memoria no dinámica, el valor predeterminado es 1/64 de la memoria física XX:MaxPermSize; establece el tamaño máximo de memoria no dinámica. El valor predeterminado es 1/4 de la memoria física.

Límite de memoria JVM (valor máximo)

En primer lugar, la memoria JVM está limitada a la memoria física máxima real. Suponiendo que la memoria física es infinita, el valor máximo de la memoria JVM. Es muy diferente de la relación del sistema operativo. En pocas palabras, aunque el espacio de memoria controlable de un procesador de 32 bits es de 4 GB, el sistema operativo específico establecerá un límite. Este límite es generalmente de 2 GB a 3 GB (en términos generales, es 1,5 G-2 G en sistemas Windows y 1,5). G-2G en sistemas Linux) y no habrá restricciones para procesadores superiores a 64 bits.

-Djava.awt.headless=true

Java llama a la biblioteca de procesamiento de gráficos local durante el procesamiento de gráficos. Cuando se utiliza Java para el procesamiento de gráficos (como escalado de imágenes, firma de imágenes, generación de informes), no habrá ningún problema si se ejecuta en Windows. Si trasplanta el programa a Linux/Unix, puede haber un error que indique que no se pueden mostrar los gráficos. Mensaje de aviso: "No se puede conectar al servidor de ventana X11" Esto se debe a que el procesamiento de gráficos de Linux requiere un servidor X. La solución es establecer parámetros.

Xss: Tamaño de pila de cada hilo. El tamaño de la pila limita el número de subprocesos. Si la pila es demasiado grande, puede provocar un desbordamiento de la memoria. El parámetro -Xss determina el tamaño de la pila, por ejemplo -Xss1024K. Si la pila es demasiado pequeña, también provocará un desbordamiento de la pila.

¿Cómo aumentar la memoria en Tomcat?

Inicie el método de reimpresión y modificación

Abra el directorio bin, busque catalina.bat (sistema Windows) o catalina.sh (sistema Linux) y agregue un montón de # comentarios después al final Configure de la siguiente manera

Windows:

set CATALINA_OPTS="-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m"

p>

Linux:

JAVA_OPTS=='-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m'

Fin del método de modificación de la reimpresión

Recompensa: 3 Tiempo de lanzamiento: 2008-08-14 Preguntado por: rihoonet (programador junior)

< > Puesto de cazatalentos: Beijing: Bueno -Sitio web móvil conocido en Beijing que recluta programadores senior de Java

Informe de error: java.lang.OutOfMemoryError: espacio de almacenamiento dinámico de Java

TOMCAT versión 5.5.23

Métodos I Lo he intentado antes.

/tomcat/bin/catalina.bat Agregue el siguiente comando:

set JAVA_OPTS=-Xms32m -Xmx1024m: esto no lo iniciará. . extrañeza.

Respuesta adoptada

2008-08-14 Little Madman (programador senior)

Código Java

set JAVA_OPTS=-Xms32m -Xmx1024m %JAVA_OPTS%

establezca JAVA_OPTS=-Xms32m -Xmx1024m %JAVA_OPTS%, debe hacer referencia al JAVA_OPTS original, de lo contrario se sobrescribirá el original.

Aumente el tamaño de la memoria virtual de Tomcat

p>

------------------------------------------ --- ----------------------------------

Configuración del tamaño de JVM (plataforma Unix tomcat): Ajuste el archivo $CATALINA_HOME\bin\catalina.sh.

elif [ "$1" = "start" ] ; luego

shift

toca "$CATALINA_BASE"/logs/catalina.out

if [ "$1" = "-security" ] ; entonces

echo "Usando el Administrador de seguridad"

shift

"$_RUNJAVA" $JAVA_OPTS $ CATALINA_OPTS \

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

-Djava.security.manager \

-Djava .security.policy=="$CATALINA_BASE"/conf/catalina.policy \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

-Djava.io.tmpdir="$CATALINA_TMPDIR" \

org.apache.catalina.startup.Bootstrap "$@" inicio \

> > "$CATALINA_BASE"/logs/catalina.out 2>&1 &

else

"$_RUNJAVA" $JAVA_OPTS -Xms1024m -Xmx1024m $CATALINA_OPTS \

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME " \

-Djava.io.tmpdir="$CATALINA_TMPDIR" \

org.apache.catalina.startup.Bootstrap "$@" inicio \

>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

fi

Preste atención a la parte roja –Xms1024m –Xmx1024m Esta oración significa que el valor mínimo de. jvm es 1024M y el tamaño máximo es 1024M. El ajuste de esta parte debe ajustarse de acuerdo con las diferentes configuraciones de hardware del host del servidor web. El tamaño del montón de inicialización determina el tamaño de la memoria que la máquina virtual aplica. sistema cuando se inicia. En términos generales, este parámetro no es importante. Sin embargo, algunas aplicaciones ocuparán drásticamente más memoria bajo una carga pesada. En este momento, este parámetro es muy importante si la memoria utilizada cuando se inicia la máquina virtual es relativamente pequeña y hay muchos objetos en este caso. Después de la inicialización, la virtual. La máquina debe aumentar repetidamente la memoria para satisfacer el uso. Por esta razón, generalmente configuramos -Xms y -Xmx para que tengan el mismo tamaño, y el tamaño máximo del montón está limitado por la memoria física utilizada por el sistema. Generalmente, las aplicaciones que utilizan grandes cantidades de datos utilizarán objetos persistentes y el uso de memoria puede crecer rápidamente. Cuando la memoria requerida por una aplicación excede el valor máximo del montón, la máquina virtual provocará un desbordamiento de memoria y provocará que el servicio de la aplicación falle. Por lo tanto, generalmente se recomienda establecer el tamaño máximo del montón en el 80 % de la memoria máxima disponible.

Configuración del tamaño de JVM (plataforma Windows Tomcat):

1) Detener el servicio Tomcat actual (suponiendo que se haya iniciado)

net stop "Apache Tomcat 4.1 "

2) Desinstalar el servicio Tomcat

tomcat.exe -desinstalar "Apache Tomcat 4.1"

3) Reconfigurar los parámetros de inicio

tomcat.exe -instalar "Apache Tomcat 4.1" "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path="%CATALINA_HOME%\bin\bootstrap.jar;%JAVA_HOME%\lib\ herramientas .jar" -Dcatalina.home="%CATALINA_HOME%" -Xrs -Xmx512m -Xms512m -start org.apache.catalina.startup.Bootstrap -params start -stop org.apache.catalina.startup.Bootstrap -params stop -out " %CATALINA_HOME%\logs\stderr.log"

4) Reinicie el servicio Tomcat en el servicio para completar la configuración.

La parte roja también es el lugar para ajustar el tamaño de la jvm. El principio de ajuste es el mismo que el anterior.

Además: Cómo ver jvm: $webapp\cache.jsp. Cabe recordar que a través de esta página puede ver la cantidad aproximada de JVM utilizadas. Generalmente, el tamaño real de JVM es mayor que el que se muestra en la página.

------------------------------------------- ----- -------------------------------------

Qin Min: rem Establecer tamaño de memoria JVM

set JAVA_OPTS=-Xms800m -Xmx1024m

---------------------- -------------------------------------------------- -- ---------

Todos en Windows saben que cuando se inicia un programa JAVA, la JVM asignará una memoria inicial y una memoria máxima a la aplicación. Esta memoria inicial y la memoria máxima afectarán el rendimiento del programa hasta cierto punto. Por ejemplo, cuando una aplicación utiliza la memoria máxima, la JVM primero debe realizar una recolección de basura para liberar parte de la memoria ocupada.

Entonces, si desea ajustar la memoria inicial y la memoria máxima de Tomcat cuando se inicia, debe declararlo en la JVM. Cuando se ejecuta un programa JAVA general, puede ajustar la memoria inicial y la máxima. memoria de la aplicación a través de -Xms -Xmx:

Por ejemplo: java -Xms64m -Xmx128m a.jar

El programa de inicio de Tomcat está empaquetado y no se puede cambiar directamente usando java. -X..... tomcat.* Configuración de memoria.

Hay dos formas de cambiar esta configuración en Tomcat:

1. Debe agregar dos atributos TOMCAT_OPTS y CATALINA_OPTS a la variable de entorno,

Por ejemplo, SET CATALINA_OPTS= -Xms64m -Xmx512m. ;

ms es el más pequeño, mx es el más grande, 64 my 512 m se refieren a la capacidad de memoria respectivamente

2 Modifique el archivo Catalina.bat

p><. p>En cada línea debajo de la línea 166 "rem Ejecutar Java con las propiedades aplicables"

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsesed.dirs="%JAVA_ENDORSED_DIRS% " -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% Reemplazar medio %CATALINA_OPTS % con -Xms64m -Xmx512m (reemplace todo %CATALINA_OPTS% en las cuatro líneas, incluido el % en ambos lados)

____________________________________________________________________________________________

Tomcat en sí no se puede ejecutar directamente en la computadora, lo cual Requiere un sistema operativo y una máquina virtual Java basada en hardware. Puede elegir diferentes sistemas operativos y las versiones de JDK correspondientes según sus necesidades (siempre que cumplan con las especificaciones de Java publicadas por Sun), pero le recomendamos que utilice el JDK publicado por Sun. Asegúrese de estar utilizando la última versión, ya que Sun y otras empresas han estado realizando mejoras en la máquina virtual Java para mejorar el rendimiento. Algunos informes muestran que JDK1.4 mejora el rendimiento entre un 10% y un 20% con respecto a JDK1.3.

Puedes configurar la memoria utilizada por la máquina virtual Java, pero si tu elección es incorrecta, la máquina virtual no te compensará. Puede cambiar el tamaño de la memoria utilizada por la máquina virtual a través de la línea de comando. Como se muestra en la siguiente tabla, se utilizan dos parámetros para configurar el tamaño de memoria utilizado por la máquina virtual.

Parámetros

Descripción

-Xms

Tamaño del montón de inicialización de JVM

-Xmx

El tamaño máximo del montón JVM

Los tamaños de estos dos valores generalmente se establecen según las necesidades. El tamaño del montón de inicialización determina el tamaño de memoria que la máquina virtual aplica al sistema cuando se inicia. En términos generales, este parámetro no es importante. Sin embargo, algunas aplicaciones ocuparán drásticamente más memoria bajo una carga pesada. En este momento, este parámetro es muy importante si la memoria utilizada cuando se inicia la máquina virtual es relativamente pequeña y hay muchos objetos en este caso. Después de la inicialización, la virtual. La máquina debe aumentar repetidamente la memoria para satisfacer el uso. Por esta razón, generalmente configuramos -Xms y -Xmx para que tengan el mismo tamaño, y el tamaño máximo del montón está limitado por la memoria física utilizada por el sistema. Generalmente, las aplicaciones que utilizan grandes cantidades de datos utilizarán objetos persistentes y el uso de memoria puede crecer rápidamente. Cuando la memoria requerida por una aplicación excede el valor máximo del montón, la máquina virtual provocará un desbordamiento de memoria y provocará que el servicio de la aplicación falle. Por lo tanto, generalmente se recomienda establecer el tamaño máximo del montón en el 80 % de la memoria máxima disponible.

La memoria predeterminada que Tomcat puede usar es 128 MB. En proyectos de aplicaciones más grandes, esta memoria no es suficiente y es necesario aumentarla.

En Windows, en el archivo /bin/catalina.bat, en Unix, delante del archivo /bin/catalina.sh, agregue la siguiente configuración:

JAVA_OPTS=' -Inicialización de Xms Tamaño de memoria: la memoria máxima que Xmx puede usar.

Es necesario aumentar los valores de estos dos parámetros. Por ejemplo:

JAVA_OPTS='-Xms256m -Xmx512m'

Indica que la memoria inicial es 256 MB y la memoria máxima que se puede utilizar es 512 MB.

Otra cosa a considerar es el mecanismo de recolección de basura proporcionado por Java. El tamaño del montón de una máquina virtual determina cuánto tiempo y frecuencia dedica la máquina virtual a recolectar basura. La velocidad aceptable de recolección de basura depende de la aplicación y debe ajustarse analizando el tiempo y la frecuencia reales de recolección de basura. Si el tamaño del montón es grande, la recolección completa de basura será más lenta pero menos frecuente. Si mantiene el tamaño del montón coherente con los requisitos de memoria, las colecciones completas son más rápidas, pero más frecuentes. El propósito de ajustar el tamaño del montón es minimizar el tiempo de recolección de basura para maximizar el procesamiento de las solicitudes de los clientes dentro de un tiempo específico. Durante la prueba comparativa, para garantizar el mejor rendimiento, el tamaño del montón debe establecerse en un tamaño grande para garantizar que no se produzca recolección de basura durante toda la prueba comparativa.

Si el sistema pasa mucho tiempo recogiendo basura, reduzca el tamaño del montón. Una recolección de basura completa no debería tomar más de 3 a 5 segundos. Si la recolección de basura se convierte en un cuello de botella, entonces debe especificar el tamaño de generación, examinar el resultado detallado de la recolección de basura y estudiar el impacto de los parámetros de recolección de basura en el rendimiento. En términos generales, se debe utilizar el 80% de la memoria física como tamaño de montón. Al agregar procesadores, recuerde agregar memoria porque las asignaciones pueden ocurrir en paralelo, mientras que la recolección de basura no.

Optimización y configuración comunes de Tomcat 5

1. Optimización de la memoria JDK:

La memoria que Tomcat puede usar de forma predeterminada es 128 MB en Windows, en el. archivo {tomcat_home} /bin/catalina.bat, en Unix, agregue la siguiente configuración delante del archivo {tomcat_home}/bin/catalina.sh:

JAVA_OPTS='-Xms[Tamaño de memoria de inicialización] -Xmx[se puede usar la memoria máxima]

En términos generales, debe usar el 80% de la memoria física como tamaño del montón.

2. Optimización del conector:

En la configuración en el archivo de configuración de Tomcat server.xml, los parámetros relacionados con el número de conexiones son:

maxThreads:

Tomcat utiliza subprocesos para manejar cada solicitud recibida. Este valor representa la cantidad máxima de subprocesos que Tomcat puede crear. El valor predeterminado es 200.

AcceptCount:

Especifica el número de solicitudes que se pueden colocar en la cola de procesamiento cuando se utilizan todos los subprocesos disponibles para procesar solicitudes. Las solicitudes que superen este número no se aceptarán. . El valor predeterminado es 10.

minSpareThreads:

El número de subprocesos creados cuando se inicializa Tomcat. El valor predeterminado es 4.

maxSpareThreads:

Una vez que el número de subprocesos creados supera este valor, Tomcat cerrará los subprocesos del socket que ya no sean necesarios. El valor predeterminado es 50.

enableLookups:

Ya sea para verificar el nombre de dominio de manera inversa, el valor predeterminado es verdadero. Para mejorar las capacidades de procesamiento, se debe establecer en falso

connectionTimeout:

Tiempo de espera de conexión de red, valor predeterminado 60000, unidad: milisegundos. Establecerlo en 0 significa que nunca expirará, lo cual es una configuración peligrosa. Por lo general, se puede configurar en 30000 milisegundos.

maxKeepAliveRequests:

Número de solicitudes de mantenimiento, el valor predeterminado es 100.

bufferSize:

Tamaño del búfer del flujo de entrada, valor predeterminado 2048 bytes.

compresión:

Transmisión de compresión, el valor es activado/desactivado/forzado, el valor predeterminado es desactivado.

Los parámetros relacionados con el número máximo de conexiones son maxThreads y AcceptCount. Si desea aumentar la cantidad de conexiones simultáneas, debe aumentar estos dos parámetros al mismo tiempo. El número máximo de conexiones permitidas por el servidor web también está sujeto a la configuración de los parámetros del kernel del sistema operativo. Por lo general, es de aproximadamente 2000 para Windows y aproximadamente 1000 para Linux.

3. Cómo prohibir y permitir que los archivos en el directorio se incluyan en Tomcat

En {tomcat_home}/conf/web.xml, establezca el parámetro de listados en falso, de la siguiente manera :

...

listados

false

...

4. Cómo prohibir y Permitir acceso por host o dirección IP

...

enable="*.mycompany.com,www.yourcompany.com"/>

deny= " 192.168.1.*"/>

...

Esta es la configuración de nuestro servidor. No puedo darle el archivo específico porque implica confidencialidad de la empresa, así que lo haré. Te doy esa línea, la copié

JAVA_OPTS='-server -Xms512m -Xmx768m -XX:NewSize=128m -XX:MaxNewSize=192m -XX:SurvivorRatio=8'

.