精华内容
下载资源
问答
  • Tomcat面试题

    2020-12-19 10:20:04
    Tomcat是什么? Tomcat的缺省端口是多少,怎么修改 Tomcat 有哪几种Connector 运行模式(优化)? Tomcat有几种部署方式? tomcat容器是如何创建servlet类实例?用到了什么原理? Tomcat工作模式 进入Tomcat的...

    目录

    Tomcat是什么?

    Tomcat的缺省端口是多少,怎么修改

    Tomcat 有哪几种Connector 运行模式(优化)?

    Tomcat有几种部署方式?

    tomcat容器是如何创建servlet类实例?用到了什么原理?

    Tomcat工作模式

    进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类

    Tomcat顶层架构

    Connector和Container的微妙关系

    Connector架构分析

     Container架构分析

    Container如何处理请求的


    Tomcat是什么?

    Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

    Tomcat的缺省端口是多少,怎么修改

    1. 找到Tomcat目录下的conf文件夹

    2. 进入conf文件夹里面找到server.xml文件

    3. 打开server.xml文件

    4. 在server.xml文件里面找到下列信息

    5. 把Connector标签的8080端口改成你想要的端口

    
    <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" />

    Tomcat 有哪几种Connector 运行模式(优化)?

    BIO:同步并阻塞

    • 一个线程处理一个请求。
    • 缺点:并发量高时,线程数较多,浪费资源。
    • Tomcat7或以下,在Linux系统中默认使用这种方式。

    NIO:同步非阻塞IO

    •  利用Java的异步IO处理,可以通过少量的线程处理大量的请求,可以复用同一个线程处理多个connection(多路复用)。
    • Tomcat8在Linux系统中默认使用这种方式。
    • Tomcat7必须修改Connector配置来启动。:配制项:protocol=”org.apache.coyote.http11.Http11NioProtocol”

    Tomcat有几种部署方式?

    (1) 利用Tomcat的自动部署

    • 把web应用拷贝到webapps目录。Tomcat在启动时会加载目录下的应用,并将编译后的结果放入work目录下。

    (2) 使用Manager App控制台部署

    • 在tomcat主页点击“Manager App” 进入应用管理控制台,可以指定一个web应用的路径或war文件。

    (3) 修改conf/server.xml文件部署

    • 修改conf/server.xml文件,增加Context节点可以部署应用。

      (4) 增加自定义的Web部署文件

    • 在conf/Catalina/localhost/ 路径下增加 xyz.xml文件,内容是Context节点,可以部署应用。

    tomcat容器是如何创建servlet类实例?用到了什么原理?

    1. 当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化。(有时候也是在第一次请求时实例化)

    2. 在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

    Tomcat工作模式

    (1) 独立的Servlet容器, servlet容器是web服务器的一部分

     (2)进程内的servlet容器, servlet容器是作为web服务器的插件java容器的实现,web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。反应速度快但伸缩性不足

    (3) 进程外的servlet容器,servlet容器运行于web服务器之外的地址空间,并作为web服务器的插件和java容器实现的结合。反应时间不如进程内但伸缩性和稳定性比进程内优;

    进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类

    • Tomcat作为应用程序服务器:请求来自前端的web服务器,这可能是Apace, IIS, Nginx等等
    • Tomcat作为独立服务器: 请求来自web浏览器

    Tomcat顶层架构

     

    • Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;

    • Server掌管着整个Tomcat的生死大权;

    • Service 是对外提供服务的;

    • Connector用于接受请求并将请求封装成Request和Response来具体处理;

    • Container用于封装和管理Servlet,以及具体处理request请求;

    Connector和Container的微妙关系

    一个请求发送到Tomcat之后,首先经过Service然后会交给我们的Connector,Connector用于接收请求并将接收的请求封装为Request和Response来具体处理,Request和Response封装完之后再交由Container进行处理,Container处理完请求之后再返回给Connector,最后在由Connector通过Socket将处理的结果返回给客户端,这样整个请求的就处理完了!

    Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议!

    Connector架构分析

    Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。

    可以把Connector分为四个方面进行理解:

    • 1. Connector如何接受请求的?
    • 2.如何将请求封装成Request和Response的?
    • 3.封装完之后的Request和Response如何交给Container进行处理的?
    • 4.Container处理完之后如何交给Connector并返回给客户端的?

     Container架构分析

    Container用于封装和管理Servlet,以及具体处理Request请求,在Container内部包含了4个子容器

    Tomcat的文件目录对照一下

     Context和Host的区别是Context表示一个应用,我们的Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context,其中ROOT目录中存放着主应用其他目录存放着子应用,而整个webapps就是一个Host站点。

    我们访问应用Context的时候,如果是ROOT下的则直接使用域名就可以访问,例如:www.baidu.com,如果是Host(webapps)下的其他应用,则可以使用www.baidu.com/docs进行访问,当然默认指定的根应用(ROOT)是可以进行设定的,只不过Host站点下默认的主应用是ROOT目录下的。

    Container如何处理请求的

    Container处理请求是使用Pipeline-Valve管道来处理的!(Valve是阀门之意)

    Pipeline-Valve是责任链模式,责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理,每个处理者负责做自己相应的处理,处理完之后将处理后的结果返回,再让下一个处理者继续处理。

    但是!Pipeline-Valve使用的责任链模式普通的责任链模式有些不同!区别主要有以下两点:

    • 每个Pipeline都有特定的Valve,而且是在管道的最后一个执行,这个Valve叫做BaseValve,BaseValve是不可删除的;
    • 在上层容器的管道的BaseValve中会调用下层容器的管道。

    我们知道Container包含四个子容器,而这四个子容器对应的BaseValve分别在:StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。

    Pipeline的处理流程图如下

    • Connector在接收到请求后会首先调用最顶层容器的Pipeline来处理,这里的最顶层容器的Pipeline就是EnginePipeline(Engine的管道);

    • 在Engine的管道中依次会执行EngineValve1、EngineValve2等等,最后会执行StandardEngineValve,在StandardEngineValve中会调用Host管道,然后再依次执行Host的HostValve1、HostValve2等,最后在执行StandardHostValve,然后再依次调用Context的管道和Wrapper的管道,最后执行到StandardWrapperValve。

    • 当执行到StandardWrapperValve的时候,会在StandardWrapperValve中创建FilterChain,并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理!

    • 当所有的Pipeline-Valve都执行完之后,并且处理完了具体的请求,这个时候就可以将返回的结果交给Connector了,Connector在通过Socket的方式将结果返回给客户端。

     

    展开全文
  • tomcat面试题

    2020-04-21 13:37:29
    一、Tomcat的缺省是多少,怎么修改 Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml文件里面...

    一、Tomcat的缺省是多少,怎么修改

    Tomcat的缺省端口号是8080.

    修改Tomcat端口号:

    1.找到Tomcat目录下的conf文件夹

    2.进入conf文件夹里面找到server.xml文件

    3.打开server.xml文件

    4.在server.xml文件里面找到下列信息

    maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″

    enableLookups=”false” redirectPort=”8443″ acceptCount=”100″

    connectionTimeout=”20000″ disableUploadTimeout=”true” />

    5.把port=”8080″改成port=”8888″,并且保存

    6.启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/

    7、tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。

    NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成 org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是HTTP/1.1。

    <Connector port=”8080″

    protocol=”org.apache.coyote.http11.Http11NioProtocol”

    connectionTimeout=”20000″

    redirectPort=”8443″

    maxThreads=”500″

    minSpareThreads=”20″

    acceptCount=”100″

    disableUploadTimeout=”true”

    enableLookups=”false”

    URIEncoding=”UTF-8″ />

    二、tomcat 如何优化?

    1、优化连接配置.这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。

    参数解释:

    URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

    maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

    minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。

    enableLookups : 这个功效和Apache中的HostnameLookups一样,设为关闭。

    connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。

    maxThreads : maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。

    acceptCount : acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection

    maxProcessors与minProcessors : 在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

    通常Windows是1000个左右,Linux是2000个左右。

    useURIValidationHack:

    我们来看一下tomcat中的一段源码:

    【security】

    if (connector.getUseURIValidationHack()) {

    String uri = validate(request.getRequestURI());

    if (uri == null) {

    res.setStatus(400);

    res.setMessage(“Invalid URI”);

    throw new IOException(“Invalid URI”);

    } else {

    req.requestURI().setString(uri);

    // Redoing the URI decoding

    req.decodedURI().duplicate(req.requestURI());

    req.getURLDecoder().convert(req.decodedURI(), true);

    可以看到如果把useURIValidationHack设成”false”,可以减少它对一些url的不必要的检查从而减省开销。

    enableLookups=”false” : 为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。

    disableUploadTimeout :类似于Apache中的keeyalive一样

    给Tomcat配置gzip压缩(HTTP压缩)功能

    compression=”on” compressionMinSize=”2048″

    compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

    HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。

    1)compression=”on” 打开压缩功能

    2)compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB

    3)noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩

    4)compressableMimeType=”text/html,text/xml” 压缩类型

    最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?

    <!–enable tomcat ssl–>

    <Connector port=”8443″ protocol=”HTTP/1.1″

    URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″

    enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″

    acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″

    useURIValidationHack=”false”

    compression=”on” compressionMinSize=”2048″

    compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

    SSLEnabled=”true”

    scheme=”https” secure=”true”

    clientAuth=”false” sslProtocol=”TLS”

    keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”

    />

    好了,所有的Tomcat优化的地方都加上了。

    2、优化JDK

    Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:

    JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存]

    设置环境变量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存]”

    一般说来,你应该使用物理内存的 80% 作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。建议设置为70%;建议设置[[初始化内存大小]等于[可以使用的最大内存],这样可以减少平凡分配堆而降低性能。

    本例使用加入环境变量的方式:

    # vi /etc/profile

    加入:export JAVA_OPTS=””$JAVA_OPTS” -Xms700 —Xmx700

    # source /etc/profile

    【参数说明】

    -Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的 快一点,但是也可能会导致机器暂时间变慢。

    -Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占 用更多的内存,超出了这个设置值,就会抛出OutOfMemory 异常。

    -Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。

    -XX:PermSize设置非堆内存初始值,默认是物理内存的1/64 。

    -XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

    三、tomcat 有那几种Connector 运行模式?

    tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

    1)bio

    默认的模式,性能非常低下,没有经过任何优化处理和支持.

    2)nio

    利用java的异步io护理技术,no blocking IO技术.

    想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

    <Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol”

    connectionTimeout=”20000″

    URIEncoding=”UTF-8″

    useBodyEncodingForURI=”true”

    enableLookups=”false”

    redirectPort=”8443″ />

    启动后,就可以生效。

    3)apr

    安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

    必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native

    如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol

    少说话 多做事

    展开全文
  • 【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】tomcat面试题【BAT必备】...
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    千次阅读 多人点赞 2019-12-12 15:04:43
    Tomcat面试题 1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种...

    Tomcat面试题

    1、Tomcat的缺省端口是多少?怎么修改?
    答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。
    2、Tomcat有哪几种connector运行模式(服务的请求方式)?
    答:三种。修改它的运行模式需要在主配置文件中找到connector字段中的protocol进行修改

    这三种不同运行模式的性能相差很大,具体如下:
    
    BIO:阻塞型I/O操作,一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,默认使用这种方式。
    NIO:基于缓冲区,能提供非阻塞I/O操作,和传统的BIO相比,具备更好的抗并发性能;
    APR(Apache portable run-time libraries):简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和相应性能,也是Tomcat运行高并发的首选模式,在Linux中需要安装APR动态库才可以使用这种模式。
    

    3、如何避免用户在访问一个不存在的页面时,Tomcat将其详细版本信息返回给用户。
    答:解决办法就是将404状态码进行重定向,以便我们自定义返回的页面信息。
    4、优化tomcat可以从哪些方面着手?

    答:
    1、内存优化;
    2、线程池的优化
    3、禁用DNS查询;
    4、开启日志切割功能;
    5、关闭404错误返回的版本信息;
    

    ————————————————————————————————————————————————————————————————————————————————————————————————————————

    httpd服务面试题

    1、请说一下你对httpd服务的了解?
    答:Apache是一个模块化服务,支持的模块比较多,采用servlet处理模型,同步阻塞模型,工作模式多变,对于高并发的场景处理速度会比较慢,运行稳定。支持异步读写,可以通过正则表达式做动静分离。

    2、httpd服务的三种工作模式你了解多少?
    答:httpd有三种工作模式。

    prefork:预派生子进程
    prefork模式可以算是很古老但是很稳定的模式。httpd服务在刚启动时,就会fork出一些子进程(默认为5个),一个子进程对应一个线程,然后等待request进来,并且总是试图保持一些空闲的子进程,之所以这样做,是为了减少频繁创建和销毁进程的开销。在同一个时间点内,一个线程只能处理一个进程。

    worker工作模式
    worker模式和prefork模式比起来,是使用了多进程+多线程的模式,它也是预先fork了几个子进程,每个子进程能够生成一些服务线程和一个监听线程,该监听线程及接入请求并传递给服务线程处理和应答。worker工作模式占用的内存较少,在高并发下表现还算优异。不过必须要考虑线程安全的问题,因为多个子进程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这是就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,就这样被占据,也会导致在高并发场景下的无服务线程可用。(该问题同样会发生在prefork模式)。

    event工作模式
    这是Apache最新的工作模式,它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,线程被长期被占用的的资源浪费问题。

    event工作模式中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候偶,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理多个请求了,实现异步非阻塞。

    event工作模式在遇到某些不兼容的模块时,它会失效,并退回到worker模式,一个工作线程处理一个请求。官方自带的模块,全部都是支持event工作模式的。

    3、可以从哪几个方面着手优化httpd?
    合理配置其进程及线程数;
    开启httpd的deflate压缩功能;
    开启expires缓存功能;
    禁止httpd进行目录遍历;
    隐藏httpd的版本信息;
    开启日志切割功能;
    配置防盗链;
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————

    Nginx面试题

    1、缺省安装的Nginx+php-fpm环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途中关闭了浏览器,那么请问服务端的PHP脚本是继续执行还是退出执行?
    答:正常情况下,如果client异常退出了,Server端的程序还是会继续执行,直到与IO进行了两次交互操作。Server端发现client端已经断开连接,这个时候会出发一个User_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。

    2、nginx是如何实现高并发的?
    答:nginx之所以可以实现高并发,与它采用的epoll模型有很大的关系。epoll模型采用异步非阻塞的事件处理机制。这种机制可让nginx进程同时监控多个事件。

    简单来说,就是异步非阻塞,使用了epoll模型和大量的底层代码优化。如果深入一点的话,就是nginx的特殊进程模型和事件模型的设计,才使其可以实现高并发。

    进程模型

    它是采用一个master进程和多个worker进程的工作模式。
    1、master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。;
    2、master进程也要负责监控worker的状态,保证高可靠性;
    3、worker进程议案设置为和CPU核心数一致或者其二倍。nginx的worker进程和Apache的不一样。apache的进程在同一时间只能处理一个请求,所以它会开启很多个进程,几百甚至几千个。而nginx的worker进程在同一时间可以处理的请求数只受内存限制,因此可以处理更多请求。
    

    事件模型
    nginx是异步非阻塞的。

    一个master进程,多个worker进程,每个worker进程可以处理多个请求。每进来一个request,都会有worker进程去处理。但不是全程的处理,那么处理到的程度就是可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,在等待期间,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是它就去休息了,此时,如果再有request进来,它就可以很快再按这种方式处理。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。
    由于nginx的的这个工作性质决定了每个请求大部分的生命都是在网络传输中,所以实际上花费在nginx 服务器上的时间并不多,这就是它几进程就能解决高并发的秘密所在。

    3、已知nginx和php-fpm安装在同一台服务器上,nginx连接php-fpm有两种方式:一种是类似127.0.0.1:9000的TCP socket,另一种是类似/tmp/php-fpm.sock的Unix domain socket,请问如何选择?需要注意什么?
    Unix domain socket的流程不会走到TCP那层,直接以文件的形式,以stream socket通信。如果是TCP Socket,则需要走到IP层。说的通俗一点,追求可靠性就是选择TCP(需要占用一个端口,更稳定,如:127.0.0.1:9000),追求高性能就是Unix Socket(不需要占用端口,更快,但可靠性不如TCP的方式)。

    4、nginx和Apache的区别?
    两者最核心的区别在于apache是同步多进程模型,一个request对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。

    一般来说,需要性能的web服务,用nginx,如果不需要性能只求稳定,更考虑Apache,后者的各种模块实现的比前者好很多,epoll网络IO模型是nginx处理性能高的根本,但并不是所有情况下epoll大获全胜的,如果本身提供静态服务的只有几个文件,apache的select模型或许比epoll更高性能。当然,这只是一个假设,真正还需要实测了再说。

    更通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。

    5、nginx的调度算法有哪些?

    sticky:通过nginx-sticky模块,来实现cookie黏贴的方式将来自同一个客户端的请求发送到同一个后端服务器上处理,这样一定程度上可以解决多个后端服务器的session会话同步的问题;
    round-robin(RR):轮询,每个请求按时间顺序依次分配到不同的后端服务器,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响;
    weight:轮询权重,weight的值越大分配到的访问概率就越高,主要用于后端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权重,达到合理有效的利用主机资源。
    least_conn:请求被发送到当前活跃连接最少的realserver上,会考虑到weight的值;
    ip_hash:每个请求按照IP的哈希结果分配,使来自同一个IP的访客固定访问后端服务器,可以有效的解决动态网页存在的session共享问题。
    fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面的大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配。nginx本身不支持fair,如果需要使用这种调度算法,则必须安装upstream_fair模块。
    url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到后端服务器,可以进一步提高后端缓存服务器的效率。同样,nginx本身不支持url_hash,如果需要这种调度算法,则必须安装nginx的hash软件包。
    

    6、nginx负载均衡调度状态
    在nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态。

    常用的状态有:
    
    down:表示当前的server暂时不参与负载均衡;
    backup:预留的备份机器。当其他所有的非backup机器出现故障或者繁忙的时候,才会请求backup机器,因此这台机器的访问压力最低;
    max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstraem模块定义的错误;
    fail_timeout:请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。
    

    7、如何查看nginx已添加的模块?如果需要添加某个模块,应该如何实现?
    查看已添加的模块:nginx -V;
    如果需要添加某个模块,需要将工作目录切换至nginx的源码包中,执行“nginx -V”命令查看之前配置时的选项进行复制,然后增加需要添加的模块配置项,进行配置并编译,将新生成的nginx命令覆盖掉原有的nginx命令,然后重载nginx服务,即可实现在线添加模块。

    8、可以从哪些方面来优化nginx服务?

    配置nginx的proxy缓存;
    对静态页面开启压缩功能,如br压缩或者gzip压缩;
    调整nginx运行工作进程个数,最多开启8个,8个以上话性能就不会再提升了,而且稳定性变得更低,所以8个足够用了;
    调整nginx运行CPU的亲和力;
    修改nginx最多可打开的文件数,若超过系统限制的最多打开文件数(ulimit -n命令查看系统的最多打开文件数),还需要修改系统默认的文件数;
    修改单个worker的最大连接数;
    开启高效传输;
    设置连接超时时间,以便保护服务器资源,因为建立连接也是需要消耗资源的;
    优化fastCGI的一个超时时间,也可以根据实际情况对其配置缓存动态页面;
    expires缓存调优,主要针对图片、css、js等元素更改较少的情况下使用。
    配置防盗链;
    优化内核参数,如进程可以同时打开的最大句柄数;开启tcp重用机制,以便允许TIME_WAIT sockets重新用于新的TCP连接....还有好多,记不住。
    

    ————————————————————————————————————————————————————————————————————————————————————————————————

    Linux运维常见面试题

    1、什么是运维?什么是游戏运维?
    1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
    在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
    运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等
    2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
    开发运维:是给应用运维开发运维工具和运维平台的
    应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
    系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等
    总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
    开发运维、应用运维和系统运维他们的工作是环环相扣的
    ——————————————————————————————————————————————————————————————————————————————————
    2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
    游戏运营要做的一个事情除了协调工作以外
    还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划
    ————————————————————————————————————————————————————————————————————————————————————————
    3、现在给你三百台服务器,你怎么对他们进行管理?
    管理3百台服务器的方式:
    1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
    2)使用saltstark、ansiable、puppet进行系统的统一调度与配置的统一管理。
    3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————
    4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
    RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
    还有一个大功能,多块盘放在一起可以有冗余(备份)
    RAID整合方式有很多,常用的:0 1 5 10
    RAID 0,可以是一块盘和N个盘组合
    其优点读写快,是RAID中最好的
    缺点:没有冗余,一块坏了数据就全没有了
    RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
    10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
    RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘
    特点,读写性能一般,读还好一点,写不好
    冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
    性能从好到坏:RAID0 RAID10 RAID5 RAID1
    成本从低到高:RAID0 RAID5 RAID1 RAID10
    单台服务器:很重要盘不多,系统盘,RAID1
    数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
    WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
    有多台,监控、应用服务器,RAID0 RAID5
    我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
    —————————————————————————————————————————————————————————————————————————————————————————————————————————
    5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
    LVS: 是基于四层的转发
    HAproxy: 是基于四层和七层的转发,是专业的代理服务器
    Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
    区别: LVS由于是基于四层的转发所以只能做端口的转发
    而基于URL的、基于目录的这种转发LVS就做不了
    工作选择:
    HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
    在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
    选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
    配置简单,所以中小型企业推荐使用HAproxy
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
    Squid、Varinsh和Nginx都是代理服务器
    什么是代理服务器:
    能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
    源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
    收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
    如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
    区别:
    1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业
    但是本身不支持特性挺多,只能缓存静态文件
    2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
    3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术
    在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
    还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
    它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
    4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境
    工作中选择:
    要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    7、Tomcat和Resin有什么区别,工作中你怎么选择?
    区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
    最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
    但稳定性和java程序的兼容性,应该是比resin的要好
    工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    8、什么是中间件?什么是jdk?
    中间件介绍:
    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
    中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
    是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口
    但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
    通过中间件,应用程序可以工作于多平台或OS环境。
    jdk:jdk是Java的开发工具包
    它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    9、讲述一下Tomcat8005、8009、8080三个端口的含义?
    8005==》 关闭时使用
    8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
    8080==》 一般应用使用
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    10、什么叫CDN?
    即内容分发网络
    其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
    最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    11、什么叫网站灰度发布?
    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
    AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
    如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    12、简述DNS进行域名解析的过程?
    用户要访问 www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端

    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    13、RabbitMQ是什么东西?
    RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
    消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
    队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
    消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地
    ————————————————————————————————————————————————————————————————————————————————————————
    14、讲一下Keepalived的工作原理?
    在一个虚拟路由器中,只有作为MASTER的VRRP(虚拟路由冗余协议)路由器会一直发送VRRP通告信息,
    BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
    多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
    由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    15、讲述一下LVS三种模式的工作过程?
    LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
    一、NAT模式(VS-NAT)
    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址
    并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP
    将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈
    因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时
    大量的数据包都交汇在负载均衡器那,速度就会变慢!
    二、IP隧道模式(VS-TUN)
    原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大
    那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS
    RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过
    负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持
    IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
    优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户
    所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量
    这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
    缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”
    (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上
    三、直接路由模式(VS-DR)
    原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应
    所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR
    而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)
    并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户
    则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端
    由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域
    也可以简单的理解为在同一台交换机上
    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端
    与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
    缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
    mysql的innodb如何定位锁问题:
    在使用 show engine innodb status检查引擎状态时,发现了死锁问题
    在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
    innodb_trx ## 当前运行的所有事务
    innodb_locks ## 当前出现的锁
    innodb_lock_waits ## 锁等待的对应关系
    mysql如何减少主从复制延迟:
    如果延迟比较大,就先确认以下几个因素:
    从库硬件比主库差,导致复制延迟

    主从复制单线程,如果主库写并发太大,来不及传送到从库

    就会导致延迟。更高版本的mysql可以支持多线程复制
    慢SQL语句过多

    网络延迟

    master负载
    主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
    slave负载
    一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器
    只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:
    –slave-net-timeout=seconds 单位为秒 默认设置为 3600秒
    #参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据
    –master-connect-retry=seconds 单位为秒 默认设置为 60秒
    #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试
    通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟
    MySQL数据库主从同步延迟解决方案
    最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行
    还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
    = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog
    innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    17、如何重置mysql root密码?
    一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
    1、 在SHELL环境下,使用mysqladmin命令设置:
    mysqladmin –u root –p password “新密码” 回车后要求输入旧密码
    2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:
    Update mysql.user set password=password(‘新密码’) where user=’root’;
    flush privileges;
    注意:mysql语句要以分号”;”结束
    3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。
    grant all on . to root@’localhost’ identified by ‘新密码’;
    二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
    1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)
    2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务
    /usr/local/mysql/bin/mysqld_safe --skip-grant-table &
    3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码
    #mysql -u root
    Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’;
    Mysql> flush privileges;
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    18、lvs/nginx/haproxy优缺点
    Nginx的优点是:
    1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构
    它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一
    Nginx单凭这点可利用的场合就远多于LVS了。
    2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一
    相反LVS对网络稳定性依赖比较大,这点本人深有体会;
    3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来
    LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
    4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
    5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了
    如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
    6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器
    LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
    7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器
    8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了
    不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃
    9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多
    Nginx的缺点是:
    1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点
    2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
    不支持Session的直接保持,但能通过ip_hash来解决
    LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器
    它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
    LVS的优点是:
    1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生
    这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低
    2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西
    所以并不需要太多接触,大大减少了人为出错的几率
    3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案
    如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived
    4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
    5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等
    LVS的缺点是:
    1、软件本身不支持正则表达式处理,不能做动静分离
    而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在
    2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了
    特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了
    相对而言,Nginx/HAProxy+Keepalived就简单多了。
    HAProxy的特点是:
    1、HAProxy也是支持虚拟主机的。
    2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导
    同时支持通过获取指定的url来检测后端服务器的状态
    3、HAProxy跟LVS类似,本身就只是一款负载均衡软件
    单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
    4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡
    对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡
    5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
    ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
    ② static-rr,表示根据权重,建议关注;
    ③leastconn,表示最少连接者先处理,建议关注;
    ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似
    我们用其作为解决session问题的一种方法,建议关注;
    ⑤ri,表示根据请求的URI;
    ⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
    ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
    ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    19、mysql数据备份工具
    mysqldump工具
    mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump
    支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景
    Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
    基于LVM快照备份
    在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录
    进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别
    而innodb不开启独立表空间的话只能备份整个数据库。
    tar包备份
    percona提供的xtrabackup工具
    支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同
    数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展
    可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    20、keepalive的工作原理和如何做到健康检查
    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组
    这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内
    其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了
    这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了
    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护
    及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的
    Keepalived健康检查方式配置
    HTTP_GET|SSL_GET
    HTTP_GET | SSL_GET
    {
    url {
    path /# HTTP/SSL 检查的url可以是多个
    digest # HTTP/SSL 检查后的摘要信息用工具genhash生成
    status_code 200# HTTP/SSL 检查返回的状态码
    }
    connect_port 80 # 连接端口
    bindto
    connect_timeout 3 # 连接超时时间
    nb_get_retry 3 # 重连次数
    delay_before_retry 2 #连接间隔时间
    }
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
    cat access.log | awk ‘{print $1}’ | uniq -c | sort -rn | head -10
    ————————————————————————————————————————————————————————————————————————————————————————————————————————
    22、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log
    tcpdump ‘host 192.168.1.1 and port 80’ > tcpdump.log
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————
    23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1
    iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
    RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率
    但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证
    而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合
    RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
    不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能
    RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性
    当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
    RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上
    任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)
    所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————
    25、你对现在运维工程师的理解和以及对其工作的认识
    运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务
    运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失
    因此运维工程师的工作需要严谨及富有创新精神
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令
    tcpdump -nn tcp port 80

    ————————————————————————————————————————————————————————————————————————————————————
    27、如何优化 Linux系统(可以不说太具体)?
    不用root,添加普通用户,通过sudo授权管理
    更改默认的远程连接SSH服务端口及禁止root用户远程连接
    定时自动更新服务器时间
    配置国内yum源
    关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
    调整文件描述符的数量
    精简开机启动服务(crond rsyslog network sshd)
    内核参数优化(/etc/sysctl.conf)
    更改字符集,支持中文,但建议还是用英文字符集,防止乱码
    锁定关键系统文件
    清空/etc/issue,去除系统及内核版本登录前的屏幕显示

    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    28、Linux系统中病毒怎么解决
    1)最简单有效的方法就是重装系统
    2)要查的话就是找到病毒文件然后删除
    中毒之后一般机器cpu、内存使用率会比较高
    机器向外发包等异常情况,排查方法简单介绍下
    top 命令找到cpu使用率最高的进程
    一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置
    rm -f 命令删除病毒文件
    检查计划任务、开机启动项和病毒文件目录有无其他可以文件等
    3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————
    29、发现一个病毒文件你删了他又自动创建怎么解决
    公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况
    针对这种情况一般重点查看netstat连接的外网ip和端口。
    用lsof -p pid可以查看到具体是那些进程,哪些文件
    经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了
    由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首
    查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问
    断了内网,病毒就失去外联的能力,杀掉它就容易的多
    怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查
    方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑
    看不到图片就是/usr/bin/.sshd
    于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件
    然后才删掉了文章开头提到的自动复活的文件
    总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统
    一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜
    一般都能找到元凶。但是如果遇到诸如此类的问题
    /boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了
    ————————————————————————————————————————————————————————————————————————————————————————————————————————
    30、说说TCP/IP的七层模型
    应用层 (Application):
    网络服务与最终用户的一个接口。
    协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
    表示层(Presentation Layer):
    数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
    格式有,JPEG、ASCll、DECOIC、加密格式等
    会话层(Session Layer):
    建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
    对应主机进程,指本地主机与远程主机正在进行的会话
    传输层 (Transport):
    定义传输数据的协议端口号,以及流控和差错校验。
    协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
    网络层 (Network):
    进行逻辑地址寻址,实现不同网络之间的路径选择。
    协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
    数据链路层 (Link):
    建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
    将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正
    物理层(Physical Layer):
    是计算机网络OSI模型中最低的一层
    物理层规定:为传输数据所需要的物理链路创建、维持、拆除
    而提供具有机械的,电子的,功能的和规范的特性
    简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层
    物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础
    物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境
    如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————
    31、你常用的Nginx模块,用来做什么
    rewrite模块,实现重写功能
    access模块:来源控制
    ssl模块:安全加密
    ngx_http_gzip_module:网络传输压缩模块
    ngx_http_proxy_module 模块实现代理
    ngx_http_upstream_module模块实现定义后端服务器列表
    ngx_cache_purge实现缓存清除功能
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————
    32、请列出你了解的web服务器负载架构
    Nginx
    Haproxy
    Keepalived
    LVS
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    33、查看http的并发请求数与其TCP连接状态
    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
    还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024
    不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:
    修改/etc/security/limits.conf
    soft nofile 10240
    hard nofile 10240
    重启后生效
    ————————————————————————————————————————————————————————————————————————————————————————————————————————
    34、用tcpdump嗅探80端口的访问看看谁最高
    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲'| sort | uniq …ip > /dev/null 2>&1
    if [ ?eq0];thenecho192.168.1.? -eq 0 ]; then echo 192.168.1.ip UP
    else
    echo 192.168.1.KaTeX parse error: Expected 'EOF', got '}' at position 12: ip DOWN fi }̲& done wait ———…(Shift+4)
    光标下插入一行:o
    复制5行:5yy
    删除10行:10dd
    替换::%s/jingfeng/jfedu.net/g
    ——————————————————————————————————————————————————————————————————————————————————————————————————
    4.查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。
    答:
    find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/ ;
    ————————————————————————————————————————————————————————————————————————————————————————————————————————
    5.当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。
    答:
    chown abc:root test.txt
    ——————————————————————————————————————————————————————————————————————————————————————————————————
    6.如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。
    答:
    更改字符模式:修改/etc/inittab一行为id:3:initdefault:
    临时关闭selinnuxsetenforce0
    临时关闭防火墙iptables-F
    永久关闭selinux修改/etc/selinux/config一行为SELINUX=permissive
    永久关闭防火墙 iptables -F; /etc/init.d/iptablessave
    ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    7.每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:date+%Y%m%d)
    答:
    echo “mkdir/tmp/ date+%Y%m%d” >> /etc/rc.d/rc.local
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    8.如何查看文件内容,命令有哪些?查看文件第1行到3行,查看文件最后一行。
    答:
    查看文件内容:vim、cat、head、tail
    查看第1到行:head -3 file
    查看最后一行:tail -1 file
    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    9.查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来。
    答:
    以eth0为例
    只打印所在的行:ifconfig eth0 | grep “inetaddr:”
    只打印ip:ifconfig eth0 | grep “inetaddr:” | awk -F: ‘{print$2}’ | awk -F ’ ’ ‘{print$1}’
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    10.将普通用户test加入root组的命令是?
    答:
    usermod -G root test

    展开全文
  • servlet+tomcat面试题及答案解析
  • servlet+tomcat面试题及答案解析
  • Tomcat面试题汇总

    2019-07-02 08:55:00
    详见:Tomcat 面试题汇总:https://blog.csdn.net/qq_25934401/article/details/81536958 1、Tomcat的缺省端口是多少,怎么修改? tomcat默认的端口是8080,还会占用8005,8009和8443端口。 进入tomcat安装目录,...

    详见:Tomcat 面试题汇总:https://blog.csdn.net/qq_25934401/article/details/81536958

    1、Tomcat的缺省端口是多少,怎么修改?

    tomcat默认的端口是8080,还会占用8005,8009和8443端口。

    进入tomcat安装目录,编辑文件“安装目录\apache-tomcat-7.0.6\conf\server.xml”(可以用记事本打开) 

    2、tomcat容器是如何创建servlet类实例?用到了什么原理?

    当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,
    
    并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。
    
    (有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,
    
    如果不写或为负数,则第一次请求实例化。

    3.内存调优

    内存方式的设置是在catalina.sh,在catalina.bat中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。
    具体设置如下: JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
    其各项参数如下:
    -Xmx3550m:设置JVM最大可用内存为3550M。

    -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

    -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。
    此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

    -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。
    在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

    -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
    -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
    -XX:MaxPermSize=16m:设置持久代大小为16m。
    -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。
    对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,
    增加在年轻代即被回收的概论。

    11.监视Tomcat的内存使用情况

    使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等;
    
    JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进行内存抽样等,检查每个类的使用情况
    在java/bin目录下

     

    转载于:https://www.cnblogs.com/lukelook/p/11118344.html

    展开全文
  • Tomcat 面试题汇总

    万次阅读 多人点赞 2018-08-09 15:11:05
    1、Tomcat的缺省端口是多少,怎么修改? 1)找到Tomcat目录下的conf文件夹 2)进入conf文件夹里面找到server.xml文件 3)打开server.xml文件 4)在server.xml文件里面找到下列信息 &amp;amp;lt;Connector...
  • Tomcat面试题(2020最新版) 文章目录Tomcat是什么?Tomcat的缺省端口是多少,怎么修改tomcat 有哪几种Connector 运行模式(优化)
  • Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、...
  • 【Tomcat】Tomcat面试题

    2019-07-26 11:20:46
    Tomcat 的缺省端口是多少,怎么修改? 找到 Tomcat 目录下的 conf 文件夹 进入 conf 文件夹里面找到 server.xml 文件 打开 server.xml 文件 在 server.xml 文件里面找到下列信息 <Connector connection...
  • Tomcat面试题

    2020-06-03 09:17:11
    1 、Tomcat 的缺省端口是多少,怎么修改? 1)找到 Tomcat 目录下的 conf 文件夹 2)进入 conf 文件夹里面找到 server.xml 文件 3)打开 server.xml 文件 4)在 server.xml 文件里面找到下列信息 port="8080"改成你...
  • Tomcat面试题

    2020-06-03 09:20:32
    对于部署在局域网内其它机器上的 Tomcat,可以打开 JMX 监控端口,局域网 其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不 支持),同样是在 JVM 启动参数中配置即可,配置如下: -Dcom.sun....
  • Tomcat面试题笔记

    2021-03-27 13:40:38
    1、Tomcat 的缺省端口是多少,怎么修改? 1)找到 Tomcat 目录下的 conf 文件夹 2)进入 conf 文件夹里面找到 server.xml 文件 3)打开 server.xml 文件 4)在 server.xml 文件里面找到下列信息 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,139
精华内容 455
关键字:

tomcat面试题