Preguntas de la entrevista Tomcat

最近面试了几家公司,总结了几个共性的问题。首先研究的是tomcat及先关应用。

P1: ¿Tomcat carga primero el paquete de la aplicación o el paquete en lib primero?
Esta pregunta examina la comprensión del mecanismo de carga de clases.
El mecanismo de carga de la clase JVM es el principio de la delegación primaria, es decir, el cargador de subclase primero encuentra que necesita cargar el archivo .class, no lo carga, y delega en la clase primaria para hacerlo, y delega en la clase raíz loader-BootstrapClassLoader. En este momento, si el cargador de clases principal no puede cargarse, se pasará a la clase secundaria para cargar, capa por capa hasta que se complete la carga. Esto garantiza que la clase java.long.String que escriba no anule el JDK.
El principio de delegación de padres es consultivo, y no todos se observan.
El mecanismo de carga de la clase tomcat es diferente. Debido a que se pueden colocar múltiples paquetes de proyectos debajo de la aplicación web Tomcat, cada paquete de proyecto puede tener diferentes versiones del mismo paquete jar de terceros. Si se sigue la delegación parental, los paquetes de terceros serán todos la misma versión, lo que obviamente es Está mal Por lo tanto, el mecanismo de carga de la clase tomcat se invierte. El cargador de aplicaciones web primero carga los archivos .class requeridos por el proyecto. Si no se puede cargar, se pasa hasta el cargador raíz.
P2: ¿Cuál es la diferencia entre publicar y obtener métodos? ¿Existe un límite superior en el tamaño de los parámetros pasados ​​por el método get? Si es así, ¿quién está restringiendo?
En primer lugar, la diferencia entre publicar y obtener métodos de seguridad, visibilidad, almacenamiento en caché, etc. No hace falta decir que puede consultar el siguiente enlace. El foco aquí está en el límite superior del siguiente parámetro. No hay publicación, hay un get, generalmente 2048 caracteres.
Pero, ¿es realmente posible transferir 2048? La respuesta no está necesariamente limitada por el navegador y el servidor web, y los diferentes navegadores tienen diferentes restricciones. Algunos amigos de código lo han probado y lo han puesto en el siguiente enlace.
P3: ¿Cuál es el uso del puerto 8009 de tomcat y cuándo?
Todos sabemos que el puerto 8080 de tomcat se usa generalmente para acceder a las aplicaciones implementadas y proporciona servicios generales HTTP para establecer enlaces con programas de clientes y aceptar solicitudes de clientes. Por supuesto, este puerto también se puede cambiar a lo que desea, en service.xml en conf.
Pero también hay un puerto Yege 8009 en la clase de configuración ¿Para qué se usa esto? En realidad, esto se usa para el protocolo AJP y es responsable de establecer conexiones con otros servidores HTTP. Este puerto es necesario cuando se integra Tomcat con otros servidores HTTP.
P4: ¿Tuncat tomcat?
El ajuste aquí se divide en dos partes, una es el entorno operativo tomcat jvm tuning y la otra es el ajuste tomcat.
Ajuste JVM: archivo bin \ catalina.sh (catalina.bat) en
conjunto de rutas tomcat JAVA_OPTS = -server
-Xms1400M
-Xmx1400M
-Xmn170m
-Xss512k
-XX: + AggressiveOpts
-XX: + UseBiasedLocking
-XX: PermSize = 128M
-XX: MaxPermSize = 256M
-XX: + DisableExplicitGC
-XX: MaxTenuringThreshold = 31
-XX: + UseConcMarkSweepGC
-XX: + UseParNewGC
-XX: + CMSParallelRemarkEnabled
-XX: + UseCMSCompactAtFullCollection
-XX: LargePageSize-
Método: BigAcceso
-XX: + UseCMSInitiatingOccupancyOnly
-Djava.awt.headless = la verdadera
configuración del servidor significa que tomcat se ha ejecutado en modo de producción real y tendrá más recursos;
xms y xmx indican la memoria de almacenamiento dinámico máxima y mínima utilizada por jvm, jvm se basará en el uso Ajuste dinámicamente la memoria ocupada entre los valores mínimos. Pero afectará al recolector de basura para cambiar de un lado a otro al reclamar memoria entre tamaños, lo que lleva tiempo. Por lo tanto, estos dos valores generalmente se configuran como significativos, aproximadamente 1/4 de la memoria física de la máquina.
Xmn, la generación permanente generalmente tiene un tamaño fijo de 64 m, por lo que aumentar la generación joven reducirá el tamaño de la generación anterior. Este valor tiene un mayor impacto en el rendimiento del sistema, la configuración recomendada oficial de Sun es 3/8 del montón completo.
Xss, el tamaño de la pila de cada hilo, el valor predeterminado es 1M, que se puede ajustar de acuerdo con el tamaño de memoria requerido por el hilo de la aplicación. Bajo la misma memoria física, la reducción de este valor puede generar más subprocesos. Sin embargo, el sistema operativo también tiene un límite en el número de subprocesos en un proceso, que no puede generarse indefinidamente, y el valor de la experiencia es de aproximadamente 3000 ~ 5000.
En general, estos son casi lo mismo.
Ajuste de rendimiento de Tomcat: archivo server.xml, busque el puerto 8080 y configúrelo allí.
maxThreads = "300": establece el número máximo actual de Tomcat concurrente. El número máximo de solicitudes configuradas por Tomcat es 150 de forma predeterminada, pero en uso real, el número máximo de solicitudes simultáneas está estrechamente relacionado con el rendimiento del hardware y el número de CPU. Esto se determina de acuerdo con su propio hardware.
minSpareThreads = "50": establece el número actual de subprocesos creados cuando se inicia Tomcat. El valor predeterminado es 25.
acceptCount = "250": cuando los hilos de las personas conectadas al mismo tiempo alcanzan el valor establecido por el parámetro maxThreads, también pueden recibir el número de conexiones en cola. Si se excede este número, la conexión se rechaza directamente. El valor predeterminado es 100. En aplicaciones prácticas, si desea aumentar el número de Tomcat concurrentes, también debe aumentar el valor de acceptCount y maxThreads.
enableLookups = "false": si se habilita la búsqueda inversa de nombres de dominio, generalmente establecida en false para mejorar la potencia de procesamiento, su valor es verdadero y rara vez se usa.
maxKeepAliveRequests = "1": nginx se transfiere dinámicamente a tomcat, nginx no puede mantener en vivo, y keepalive está habilitado de manera predeterminada en el lado de tomcat, y esperará el tiempo de espera de keepalive. De manera predeterminada, connectionTimeout no está configurado. Por lo tanto, debe establecer el tiempo de espera de tomcat y desactivar el keepalive de tomcat. De lo contrario, habrá una gran cantidad de tiempo de espera para tomcat. maxKeepAliveRequests = ”1” puede evitar que tomcat genere una gran cantidad de conexiones TIME_WAIT, evitando que tomcat muera en cierta medida.

Conexión de referencia:
https://blog.csdn.net/fd2025/article/details/80592099
https://blog.csdn.net/qq_44721831/article/details/98471707
https://blog.csdn.net/iteye_18297/article / detalles / 82158790
https://blog.csdn.net/qq_36485859/article/details/101056799

Publicado 6 artículos originales · me gusta 0 · visitas 354

Supongo que te gusta

Origin blog.csdn.net/weixin_44863376/article/details/104979003
Recomendado
Clasificación