httpd服务面试题

一、请说一下你对httpd服务的了解?

答:Apache是一个模块化服务,支持的模块比较多,采用servlet处理模型,同步阻塞模型,工做模式多变,对于高并发的场景处理速度会比较慢,运行稳定。支持异步读写,能够经过正则表达式作动静分离。正则表达式

二、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工做模式的。ide

三、能够从哪几个方面着手优化httpd?

  • 合理配置其进程及线程数;
  • 开启httpd的deflate压缩功能;
  • 开启expires缓存功能;
  • 禁止httpd进行目录遍历;
  • 隐藏httpd的版本信息;
  • 开启日志切割功能;
  • 配置防盗链;
相关文章
相关标签/搜索