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的版本信息;
  • 開啓日誌切割功能;
  • 配置防盜鏈;
相關文章
相關標籤/搜索