Ordene cuidadosamente los temas y las respuestas de las entrevistas de Tomcat más completos en toda la Red. ¡Esto es suficiente para leer esta entrevista de Tomcat!

1. ¿Cuál es el puerto predeterminado de Tomcat y cómo modificarlo?

1) Busque la carpeta conf en el directorio Tomcat
2) Ingrese la carpeta conf y busque el archivo server.xml
3) Abra el archivo server.xml
4) Busque la siguiente información en el archivo server.xml

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>

port = "8080" al puerto que desee

2. ¿Qué tipos de modos de funcionamiento del conector (optimización) tiene Tomcat?

bio: Operaciones tradicionales de E / S Java, E / S síncronas y de bloqueo. maxThreads = ”150” // Tomcat usa hilos para procesar cada solicitud recibida. Este valor representa el número máximo de subprocesos que puede crear Tomcat. El valor predeterminado es 200. Se puede ajustar según el período de rendimiento y el tamaño de la memoria de la máquina, generalmente 400-500. El máximo puede rondar los 800. minSpareThreads = ”25”: el número de subprocesos creados cuando se inicializa Tomcat. El valor predeterminado es 4. Si actualmente no hay subprocesos inactivos y no se excede maxThreads, el número de subprocesos inactivos creados a la vez. Este valor también establece el número de subprocesos creados cuando se inicializa Tomcat. maxSpareThreads = ”75” -Una vez que los subprocesos creados superan este valor, Tomcat cerrará los subprocesos de socket que ya no sean necesarios. El valor predeterminado es 50. Una vez que el número de subprocesos creados supera este valor, Tomcat cerrará los subprocesos que ya no sean necesarios. El número de subprocesos se puede calcular aproximadamente por "el número medio de usuarios que operan al mismo tiempo por segundo y el tiempo medio de funcionamiento del sistema". acceptCount = ”100”: especifique 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 procesarán. El valor predeterminado es 10. Si el número de subprocesos disponibles actualmente es 0, la solicitud se coloca en la cola de procesamiento. Este valor limita el tamaño de la cola de solicitudes. Las solicitudes que superen este valor no se procesarán. connectionTimeout = ”20000” -La conexión de red agotó el tiempo de espera, el valor predeterminado es 20000, unidad: milisegundos. Establecerlo en 0 significa que nunca se agota el tiempo de espera, por lo que la configuración tiene peligros ocultos. Por lo general, se puede establecer en 30000 milisegundos.

nio: JDK1.4 comenzó a admitir, bloqueo síncrono o IO sin bloqueo síncrono. Especifique el modelo NIO para aceptar solicitudes HTTP protocol = ”org.apache.coyote.http11.Http11NioProtocol” Especifique el modelo NIO para aceptar solicitudes HTTP. El valor predeterminado es BlockingIO y la configuración es protocol = ”HTTP / 1.1” acceptThreadCount = ”2” El número de subprocesos de recepción cuando se utiliza el modelo NIO aio (nio.2): JDK7 comienza a admitir E / S asíncrona sin bloqueo.

apr: Tomcat llamará a la biblioteca de enlace dinámico central del servidor Apache HTTP en forma de JNI para procesar la lectura de archivos o las operaciones de transmisión de red, mejorando así en gran medida el rendimiento de procesamiento de Tomcat para archivos estáticos.

<!--
 <Connector connectionTimeout="20000" port="8000"
protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>
 -->
 <!-- protocol 启用 nio 模式,(tomcat8 默认使用的是 nio)(apr 模式利用系统级异步 io) -->
 <!-- minProcessors 最小空闲连接线程数-->
 <!-- maxProcessors 最大连接线程数-->
 <!-- acceptCount 允许的最大连接数,应大于等于 maxProcessors-->
 <!-- enableLookups 如果为 true,requst.getRemoteHost 会执行 DNS 查找,反向解析 ip 对应域名或主机名-->
 <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443 maxThreads=“500” minSpareThreads=“100” maxSpareThreads=“200” acceptCount="200" enableLookups="false"/>

Otras configuraciones maxHttpHeaderSize = “8192” La extensión máxima de la información del encabezado de la solicitud http, la parte que exceda esta longitud no será procesada. Generalmente 8K. URIEncoding = "UTF-8" especifica el formato de codificación de URL del contenedor Tomcat. disableUploadTimeout = "true" Si se utilizará el mecanismo de tiempo de espera al realizar la carga enableLookups = "false": si se debe realizar una verificación inversa del nombre de dominio, el valor predeterminado es verdadero. Para mejorar la capacidad de procesamiento, se debe establecer en false compress = "on" Activar la función de compresión compressMinSize = "10240" Activar el tamaño del contenido de salida comprimido, el valor predeterminado es 2KB noCompressionUserAgents = "gozilla, traviata" Para lo siguiente navegadores, no habilite la compresión compressableMimeType = "Text / html, text / xml, text / javascript, text / css, text / plain"

3. ¿Cuántos métodos de implementación tiene Tomcat?

1) Coloque el proyecto web directamente en webapps y Tomcat lo implementará automáticamente.2
) Configure el nodo en el archivo server.xml y establezca los atributos relevantes.3
) Configure a través de Catalina: ingrese el archivo conf \ Catalina \ localhost A continuación, cree un archivo xml cuyo nombre sea el nombre del sitio. La forma de escribir XML para configurar.

4. ¿Cómo crea el contenedor Tomcat una instancia de la clase de servlet? ¿Qué principio se utilizó?

Cuando el contenedor se inicia, leerá el archivo web.xml en todas las aplicaciones web del directorio webapps, luego analizará el archivo xml y leerá la información de registro del servlet. Luego, cargue la clase de servlet registrada en cada aplicación y ejecútela a través de la reflexión. (A veces también se instancia en la primera solicitud) En el registro del servlet, si es un número positivo, se instanciará al principio, si no está escrito o es un número negativo, se instanciará por primera vez.

5. Ajuste de la memoria

La configuración del modo de memoria está en catalina.sh, simplemente ajuste la variable JAVA_OPTS, porque los siguientes parámetros de inicio tratarán JAVA_OPTS como los parámetros de inicio de la JVM. Los ajustes específicos son los siguientes:

JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -
XX:NewRatio=4 -XX:SurvivorRatio=4"

Los parámetros son los siguientes: -Xmx3550m: establece la memoria máxima disponible de la JVM en 3550M.

-Xms3550m: configura la JVM para que la memoria sea de 3550 m. Este valor se puede establecer igual que -Xmx para evitar que la JVM reasigne memoria después de que se complete cada recolección de basura.

-Xmn2g: establece el tamaño de la generación joven en 2G. El tamaño completo del montón = tamaño de la generación joven + tamaño de la generación anterior + tamaño de la generación persistente. La generación permanente generalmente tiene un tamaño fijo de 64 m, por lo que después de aumentar la generación joven, el tamaño de la generación anterior se reducirá. Este valor tiene un gran impacto en el rendimiento del sistema. Sun recomienda oficialmente una configuración de 3/8 del montón completo.

-Xss128k: establece el tamaño de la pila de cada hilo. Después de JDK5.0, el tamaño de pila de cada subproceso es 1M, y el tamaño de pila de cada subproceso es 256K antes. Ajuste el tamaño de la memoria requerido por el hilo de la aplicación. Bajo la misma memoria física, reducir este valor puede generar más subprocesos. Sin embargo, el sistema operativo todavía tiene un límite en el número de subprocesos en un proceso, que no se puede generar indefinidamente. El valor de experiencia es de alrededor de 3000 ~ 5000.

-XX: NewRatio = 4: establece la proporción de la generación joven (incluidas las áreas de Edén y dos Supervivientes) y la generación anterior (excluida la generación permanente). Si se establece en 4, la relación entre la generación joven y la generación anterior es 1: 4, y la generación joven representa 1/5 de toda la pila.

-XX: SurvivorRatio = 4: establece la proporción entre el tamaño del área de Edén y el área de Superviviente en la generación joven. Establecido en 4, la proporción de dos áreas de Supervivientes a un área de Edén es 2: 4, y un área de Supervivientes ocupa 1/6 de toda la generación joven -XX: MaxPermSize = 16m: Establezca el tamaño de generación persistente en 16m.

-XX: MaxTenuringThreshold = 0: establece la edad máxima de la basura. Si se establece en 0, el objeto de la generación joven ingresará directamente a la generación anterior sin pasar por el área de Supervivientes. Para aplicaciones con generaciones más antiguas, se puede mejorar la eficiencia. Si este valor se establece en un valor mayor, el objeto de la generación joven se copiará varias veces en el área de Superviviente, lo que puede aumentar el tiempo de supervivencia del objeto en la generación joven y aumentar la teoría general de ser reciclado en la generación joven.

6. Procesamiento de sesiones compartidas

Los métodos de procesamiento actuales son los siguientes:
1). Utilice la función de replicación de sesión propia de Tomcat para consultar http://ajita.iteye.com/blog/1715312 (Configuración de replicación de sesión). La solución es que la configuración es simple, pero la La desventaja es que es un clúster. Cuando el número es grande, el tiempo de copia de la sesión será mayor, lo que afecta la eficiencia de la respuesta.

2). Utilice un tercero para almacenar sesiones compartidas. En la actualidad, memcached se utiliza para gestionar sesiones compartidas. Con la ayuda de memcached-sesson-manager, la gestión de sesiones de Tomcat se refiere a http://ajita.iteye.com/blog/ 1716320 (Utilice MSM para administrar la sesión del clúster de Tomcat)

3). En situaciones en las que la estrategia de sesión pegajosa no es muy exigente para la sesión (no hay facturación, se permite la re-solicitud si falla, etc.), la misma sesión de usuario puede ser procesada por nginx o apache a la misma Tomcat, esta es la llamada estrategia pegajosa de sesión, y hay más referencias para las aplicaciones actuales: http://ajita.iteye.com/blog/1848665 (sesión pegajosa de tomcat) nginx no incluye módulos pegajosos de sesión por defecto, y necesita ser recompilado. La ventaja es lidiar con él. La eficiencia es mucho mayor, la desventaja es que no es adecuado para ocasiones con fuertes requisitos de conversación.

7. Agregar monitoreo remoto de JMS

Para Tomcat implementado en otras máquinas en la LAN, puede abrir el puerto de monitoreo JMX y otras máquinas en la LAN pueden ver algunos parámetros de uso común a través de este puerto (pero algunas funciones más complejas no son compatibles), que también está configurado en el Parámetros de inicio de JVM. Sí, la configuración es la siguiente: -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false -Djava.rmi.server.hostname = 192.168.71.38 Dirección IP de la supervisión de JVM de la JVM, el objetivo principal es evitar la supervisión errónea de la dirección de intranet 127.0.0.1 -Dcom.sun.management.jmxremote.port = 1090 Establecer el puerto de supervisión de JVM por JMS -Dcom. sun.management.jmxremote.ssl = false Establecer la JVM La supervisión de JMS no es práctica SSL -Dcom.sun.management.jmxremote.authenticate = false Establecer la supervisión de JVM sin autenticación

8. Existen herramientas de análisis profesionales

IBM ISA, JProfiler, probe, etc., simplemente acceda a Internet para buscar métodos de análisis y monitoreo específicos

9. Sobre el número de sesiones de Tomcat

Esto se puede ver directamente desde la interfaz de administración web de Tomcat, o con la ayuda de una herramienta de terceros, Lambda Probe, que tiene un poco más de funciones que la propia administración de Tomcat, pero no muchas;

10. ¿Modo de trabajo de Tomcat?

Tomcat es un contenedor JSP / Servlet. Como contenedor de servlet, tiene tres modos de trabajo: contenedor de servlet independiente, contenedor de servlet en proceso y contenedor de servlet fuera de proceso.
Las solicitudes para ingresar a Tomcat se pueden dividir en las siguientes dos categorías según el modo de trabajo de Tomcat: Tomcat como servidor de aplicaciones: la solicitud proviene del servidor web front-end, que puede ser Apache, IIS, Nginx, etc .; Tomcat como servidor independiente: la solicitud proviene del dispositivo de navegación web

Beneficios del lector

¡Gracias por ver aquí!
He compilado muchas de las últimas preguntas de la entrevista de Java de 2021 (incluidas las respuestas) y notas de estudio de Java aquí, como se muestra a continuación
Inserte la descripción de la imagen aquí

Las respuestas a las preguntas de la entrevista anteriores están organizadas en notas de documentos. Además de las entrevistas, también recopiló información sobre algunos de los fabricantes y entrevistó a la última colección de Zhenti 2021 (ambas documentan una pequeña parte de la captura de pantalla) gratis para que todos la compartan, los que lo necesiten pueden hacer clic para ingresar a la señal: ¡CSDN! Libre para compartir ~

Si te gusta este artículo, reenvíalo y dale me gusta.

¡Recuerda seguirme!Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_49527334/article/details/112781048
Recomendado
Clasificación