记录安装php与apache不兼容的过程
1.在ubuntu中安裝php之后,重啟apache2,出現以下的問題:
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe?在插敘資料后,發現是apache的工作模式的問題。故將apache模式改成了mpm_prefork模式,關于模式之間的介紹見鏈接:
?https://www.cnblogs.com/qiujun/p/6861773.html
2.鏈接內容摘抄
? ?Apache 2.X支持插入式并行處理模塊,稱為多進程處理模塊(MPM)。在編譯apache時必須選擇也只能選擇一個MPM,對類UNIX系統,有幾個不同的MPM可供選擇,它們會影響到apache的速度和可伸縮性。
? ?2.1 prefork模式
? ? ? ? prefork是一個非線性的、預派生的MPM,使用多個進程,每個進程在某個確定的時間只單獨處理一個連接,效率高,但內存使用比較大。
? ? ? ? 優點:適合于沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。
? ? ? ? 缺點:一個進程相對占用更多的系統資源,消耗更多的內存。而且,它并不擅長處理高并發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。
? ? ? ? ?
? ? ?2.2 worker模式
? ? ? ? ? ?worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。
? ? ? ? ? ? 優點:線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發,高流量的場景下會比prefork有更多可用的線程,表現會更優秀一些;
? ? ? ? ? ? ?缺點:如果一個線程出現了問題也會導致同一進程下的線程出現問題,如果是多個線程出現問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全了,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)
? ? ? ? ? ?
? ? ? ? ? ? Worker模式下所能同時處理的請求總數是由子進程總數乘以ThreadsPerChild值決定的,應該大于等于MaxRequestWorkers。如果負載很大,現有的子進程數不能滿足時,控制進程會派生新的子進程。默認最大的子進程總數是16,加大時也需要顯示聲明ServerLimit(最大值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是THreadsPerChild的整數倍,否則Apache將會自動調節到一個相應值。
? ? ? ? ?2.3 Event模式
? ? ? ? ? ?Apache最新的工作模式,它和worker模式很像
? ? ? ? ? ?優點:不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題(HTTP的Keepalive方式能減少TCP連接數量和網絡負載),在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。
? ? ? ? ? ??
? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的记录安装php与apache不兼容的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读“CodeIgniter中国》文档首
- 下一篇: 使用PHP得到所有的HTTP请求头