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