欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:LAMP之a(chǎn)pache調(diào)優(yōu)

柚子快報邀請碼778899分享:LAMP之a(chǎn)pache調(diào)優(yōu)

http://yzkb.51969.com/

先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動等大廠,目前阿里P7

深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年最新軟件測試全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友。

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,涵蓋了95%以上軟件測試知識點,真正體系化!

由于文件比較多,這里只是將部分目錄截圖出來,全套包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、大綱路線、講解視頻,并且后續(xù)會持續(xù)更新

如果你需要這些資料,可以添加V獲?。簐ip1024b (備注軟件測試)

正文

63 ~]# curl -I http://192.168.1.63/ HTTP/1.1 200 OK Date: Sat, 29 Aug 2015 09:55:31 GMT Server: web Last-Modified: Sat, 29 Aug 2015 09:37:36 GMT ETag: “6d086-3a-51e6ff35dba19” Accept-Ranges: bytes Content-Length: 58 Content-Type: text/html

15.1.5 查看運行apache的默認用戶

我們通過更改apache的默認用戶,可以提升apache的安全性。這樣,即使apache服務(wù)被攻破,黑客拿到apache普通用戶也不會對系統(tǒng)和其他應(yīng)用造成破壞。這里創(chuàng)建的apache用戶,將用于對子進程和線程的控制。 注:默認使用daemon用戶是安全的。

63 ~]# ps -axu | grep httpd 63 ~]# id daemon uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp) 63 ~]# grep daemon /etc/passwd daemon?2:2:daemon:/sbin:/sbin/nologin

63 ~]# useradd -M -s /sbin/nologin apache

-M:不要自動建立用戶的登入目錄。 編輯apache配置文件,修改默認的用戶。

64-web /]# vim /etc/httpd/httpd.conf 161 User daemon 162 Group daemon 為: User apache Group apache

63 httpd-2.4.10]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 54066 root 4u IPv6 64673 0t0 TCP *:http (LISTEN) httpd 54083 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN) httpd 54084 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN) httpd 54085 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN)

15.1.6 apache目錄及文件權(quán)限設(shè)置, 不能給777權(quán)限

在生產(chǎn)環(huán)境的網(wǎng)站架構(gòu)中,我們應(yīng)把資源文件的權(quán)限做好配置。 例:用戶上傳的圖片及附件等和程序做好分離。這樣才能更方便我們做好授權(quán),保證apache服務(wù)和整個服務(wù)器安全。

這里我們設(shè)置apache的網(wǎng)站目錄屬主和屬組是daemon:

[root@xuegod63 ~]# ll -sd /usr/local/apache/htdocs/ 0 drwxr-xr-x 2 root root 24 1月 25 15:53 /usr/local/apache/htdocs/ [root@xuegod63 ~]# chown daemon. /usr/local/apache/htdocs/ -R [root@xuegod63 ~]# ll -sd /usr/local/apache/htdocs/ 0 drwxr-xr-x 2 daemon daemon 24 1月 25 15:53 /usr/local/apache/htdocs/

15.1.7 保護apache日志:設(shè)置好apache日志文件權(quán)限

對日志的授權(quán),我們要將屬主和屬組都設(shè)置為root:

[root@xuegod63 ~]# ll -sd /usr/local/apache/logs/ 0 drwxr-xr-x 2 root root 58 1月 25 17:29 /usr/local/apache/logs/ [root@xuegod63 ~]# ll /usr/local/apache/logs/ 總用量 16 -rw-r–r-- 1 root root 912 1月 25 17:29 access_log -rw-r–r-- 1 root root 6648 1月 25 17:29 error_log -rw-r–r-- 1 root root 7 1月 25 17:29 httpd.pid

注:由于apache日志的記錄是由apache的主進程進行操作的,而apache的主進程又是root用戶啟動的,所以這樣不影響日志的輸出。這也是日志記錄的最安全的方法。

15.2 設(shè)置錯誤頁面-開啟壓縮和緩存功能

15.2.1 錯誤頁面優(yōu)雅顯示 為了提升網(wǎng)站的用戶體驗,避免404,403之類的丑陋的默認錯誤提示出現(xiàn)。我們需要對錯誤頁面進行優(yōu)化,讓他們變的漂亮一點。錯誤頁面不僅在于告訴用戶訪問出現(xiàn)了問題,而且需要引導(dǎo)用戶到正確的頁面。 錯誤頁面優(yōu)雅化顯示的實現(xiàn)方式主要有兩種,下面我們主要以404錯誤為例: 方法:

63 ~]# vim /etc/httpd/httpd.conf #在根目錄的標簽中添加以下紅色標記內(nèi)容。 217 。。。 243 ErrorDocument 404 /404.html 244

注:#將404錯誤跳轉(zhuǎn)到/usr/local/apache/htdocs下的404.html頁面上

創(chuàng)建404測試頁:

63 ~]# echo “404 go to home” > /usr/local/apache/htdocs/404.html

重啟:

63 ~]#systemctl restart httpd

總結(jié):ErrorDocument的命令格式如下: ErrorDocument 錯誤代碼 跳轉(zhuǎn)到的頁面或文件 另外這里需要注意,你若設(shè)置跳轉(zhuǎn)到文件,必須要有這個文件才行。另外文件必須在站點目錄內(nèi),不然會報錯。 在跳轉(zhuǎn)到文件的測試中,我用全路徑和別名路徑進行測試,當把404錯誤頁面跳轉(zhuǎn)文件放到其他目錄的時候,不報錯,但是頁面跳轉(zhuǎn)不過去。

15.2.2 啟用壓縮模塊mod_deflate

網(wǎng)站隨著用戶訪問量的增加和內(nèi)容量的增加,網(wǎng)站的帶寬會不斷的增加,隨之就是網(wǎng)站成本的增加。并且當內(nèi)容量增大的時候,客戶端如果帶寬小,就會影響用戶的體驗。因此從這兩方面考慮,網(wǎng)站的某些內(nèi)容必須經(jīng)過壓縮之后再傳給用戶,然后在用戶客戶端進行解壓,來實現(xiàn)雙方共贏的效果。

apache的壓縮要用到mod_deflate模塊,該模塊提供了DEFLATE輸出過濾器,允許服務(wù)器在將輸出內(nèi)容發(fā)送到客戶端以前進行壓縮,以節(jié)約帶寬。它的核心思想就是把文件先在服務(wù)器進行壓縮,然后再進行傳輸,這樣可以顯著減少文件傳輸?shù)拇笮?。當傳輸完畢后,客戶端瀏覽器會重新對壓縮過的內(nèi)容進行解壓縮。如果沒特殊情況的話,所有的文本內(nèi)容都應(yīng)該能被gzip壓縮,例如:html(php),js,css,xml,txt等。

1、mod_deflate模塊檢查及安裝 檢查:

63 httpd-2.4.10]# /usr/local/apache/bin/apachectl -M | grep deflate Syntax OK #出現(xiàn)這個說明沒有安裝?;驔]任何輸出,也是說明沒有安裝 如果安裝了,將彈出以下內(nèi)容: 63 src]# /usr/local/apache/bin/apachectl -M | grep deflate deflate_module (static) #彈出此種結(jié)果,則為編譯安裝時裝的

63 src]# /usr/local/apache/bin/apachectl -M | grep deflate deflate_module (shared) #彈出此種結(jié)果,則為DSO方式安裝的

安裝了的話,就可以直接進行壓縮配置了,如果沒有安裝,下面為安裝方法 a)編譯時安裝方法 編譯的時候跟上–enable-deflate即可實現(xiàn)安裝 b)DSO方式安裝。 擴展:DSO: Dynamic shared object動態(tài)共享對象 。DSO模塊可以在編譯服務(wù)器之后編譯,也可以用Apache擴展工具(apxs)編譯并增加 使用DSO方式安裝,/usr/local/apache/bin/apxs后跟的參數(shù)詳解 -c 此選項表明需要執(zhí)行編譯操作。 -i 此選項表示需要執(zhí)行安裝操作,以安裝一個或多個動態(tài)共享對象到服務(wù)器的modules目錄。 -a 此選項自動增加一個LoadModule行到httpd.conf文件中,以激活此模塊,或者,如果此行已經(jīng)存在,則啟用之。

63 filters]#cd /usr/src/httpd-2.4.10/modules/filters #切到apache源碼包mod_deflate所在的目錄下

63 filters]# /usr/local/apache/bin/apxs -c -i -a /usr/src/httpd-2.4.10/modules/filters/mod_deflate.c #以dso的方式編譯安裝到apache中 63 filters]# ll /usr/local/apache/modules/mod_deflate.so -rwxr-xr-x 1 root root 61912 Aug 31 09:05 /usr/local/apache2.2-xuegod/modules/mod_deflate.so #檢查mod_deflate是否安裝,成功安裝這里會顯示出該文件

15.2.4 壓縮模塊配置

1、配置壓縮參數(shù)

63 ~]# vim /etc/httpd/httpd.conf #確認下面這一行是打開的。默認是打開的。 103 LoadModule deflate_module modules/mod_deflate.so #此行解鎖后再進行下面操作,不然下面的操作會報錯。

63 ~]# vim /etc/httpd/httpd.conf #在以下內(nèi)容后,插入: 57 58

注釋:

注:一般壓縮等級使用6或8

SetOutputFilter DEFLATE #啟用壓縮 DeflateFilterNote Input instream #聲明輸入流的byte數(shù)量 DeflateFilterNote Output outstream #聲明輸出流的byte數(shù)量 DeflateFilterNote Ratio ratio #聲明壓縮的百分比 AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript #僅壓縮,限制特定的MIME類型文件

注: 1、如果是虛擬主機,需要在中添加配置即可實現(xiàn)壓縮 2、圖片和視頻本身就是壓縮格式,一般不需要壓縮的。有些小圖片和視頻壓縮后還會變大。

總結(jié):我們在企業(yè)生產(chǎn)環(huán)境中時,在啟用mod_deflate時,一定要注意,對于太小的文件和某些格式的圖片不要對它們進行壓縮,有可能越壓越大。 擴展:AddOutputFilterByTypeDEFLATE后跟的所有的壓縮文件類型,后期可以參照選擇。 text/plain text/html text/php text/xml text/css text/javascript application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php image/svg+xml image/gif image/png image/jpe image/swf image/jpeg image/bmp

15.2.5 mod_expires: 設(shè)置網(wǎng)頁緩存時間

雖然我們上面通過mod_deflate模塊啟用了壓縮,從很大程度上節(jié)約了企業(yè)帶寬,降低了企業(yè)成本??墒怯捎诂F(xiàn)在越來越多的圖片、腳本、css和flash被嵌入到頁面中,當客戶訪問站點勢必會做很多次的http請求,因此我們還可以通過mod_expires緩存模塊來設(shè)置ExpiresHeader來緩存這些文件。 Expires是通過header報文來指定特定類型的文件在游覽器中的緩存時間的。平時,我們大多數(shù)的圖片,flash在發(fā)布之后都是不需要經(jīng)常修改的,因此做了緩存之后,游覽器第一次從服務(wù)器下載之后,就不需要再從服務(wù)器下載這些文件而是直接從游覽器緩存中讀取了。這樣客戶訪問頁面的速度就會大大加快,企業(yè)的帶寬壓力也得到了緩解。 15.2.6 mod_expires模塊檢查及安裝 檢查mod_expires模塊是否安裝的方法如下:

63 ~]# /usr/local/apache/bin/apachectl -M |grep expires expires_module (static) #此種結(jié)果為編譯安裝時裝的 63 ~]# /usr/local/apache/bin/apachectl -M |grep expires expires_module (shared) #此種結(jié)果為DSO方式安裝的

安裝了的話,就可以直接進行緩存配置了,如果沒有安裝,下面為安裝方法 a)編譯方式安裝 編譯的時候跟上–enable-expires即可實現(xiàn)安裝 b)DSO方式安裝

63 ~]# cd /usr/src/httpd-2.4.10/modules/metadata/ #切到apache源碼包mod_expires所在的目錄下 63 metadata]# ls mod_expires.c mod_expires.c

以dso的方式編譯安裝到apache中

63 metadata]# /usr/local/apache/bin/apxs -c -i -a /usr/src/httpd-2.4.10/modules/metadata/mod_expires.c

注意如果我們是編譯安裝時已經(jīng)編譯進去的,要先解鎖以下行,再進行下面操作,不然會報錯。

63 ~]# vim /etc/httpd/conf/httpd.conf #確認這一行是開啟的。 118 LoadModule expires_module modules/mod_expires.so

存的用法有3種,分別問對全局,對目錄,對虛擬主機。 1、對全局 對全局的配置就是在apache主配置文件httpd.conf的末尾加入如下參數(shù)即可

63 ~]# vim /etc/httpd/httpd.conf #在最后添加以下內(nèi)容:

重啟服務(wù):

63 ~]# systemctl restart httpd

2、對目錄 對目錄的配置就是在apache主配置文件中標簽內(nèi),最后加入如下參數(shù)即可

63 ~]# vim /usr/local/apache2.2-xuegod/conf/httpd.conf 133

c)對虛擬主機 對虛擬主機的配置就是在apache的虛擬主機配置文件httpd-vhost.conf中添加如下參數(shù)即可

63 ~]# vim /etc/httpd/httpd.conf 修改: 216 DocumentRoot “/usr/local/apache/htdocs” 改為:

DocumentRoot “/usr/local/apache/htdocs”

修改: 467 # Include /etc/httpd/extra/httpd-vhosts.conf 改為: Include /etc/httpd/extra/httpd-vhosts.conf

63 ~]# vim /etc/httpd/extra/httpd-vhosts.conf ServerAdmin 888@qq.com DocumentRoot “/www/html” ServerName www.xuegod.cn ServerAlias xuegod.cn ErrorLog “l(fā)ogs/dummy-host.example.com-error_log” CustomLog “l(fā)ogs/dummy-host.example.com-access_log” common Options None Require all granted

63 ~]# mkdir -pv /www/html 63 ~]# echo “xuegod.cn”> /www/html/index.html

以上三種配置任何一種配置之后,對apache服務(wù)器進行優(yōu)化重啟,然后用火狐或者google游覽器的 測試: 在瀏覽器中訪問192.168.1.63,按下f12,點擊network,再次刷新站點 由以上測試可見,緩存為1年

15.2.7 擴展:expires模塊的語法

expires模塊用到了ExpiresDefault和EXpiresByType兩個指令,下面是這兩個指令的語法。 ExpiresDefault “ [plus] {}*” EXpiresByType type/encoding " [plus] {}" 其中的參數(shù)有3個:access,now(等價于‘a(chǎn)ccess’),modification modification [?m?d?f??ke??n] 改性,修正 plus關(guān)鍵字是可選的。 plus [pl?s] 加上 必須是整數(shù),確??梢詀toi()所接收。(atoi可以把字符串轉(zhuǎn)換成長整型數(shù)) 參數(shù)類型:years,months,weeks,days,hours,minutes,seconds

例如:下面3個指令都表示文檔默認的有效期是一個月

ExpiresDefault “access plus 1 month” ExpiresDefault “access plus 4 weeks” ExpiresDefault “access plus 30 days”

有效期可以通過增加“”子句進一步調(diào)整

ExpiresByType text/html “access plus 1 month 15 days 2 hours” ExpiresByType image/gif “modification plus 5 hours 3 minutes”

緩存優(yōu)化對企業(yè)來說是至關(guān)重要了的,不同的業(yè)務(wù)類型,對于緩存的類型和時間又各不相同,大家具體可以用YSlow對淘寶,京東,新浪,谷歌等站點進行測試,看看他們的緩存時間是多少,并思考下為什么那樣設(shè)置。

查看天貓緩存時間: 注:天貓解決被緩存文件及時更新的方法:對緩存的對象改名 雖然緩存的設(shè)置有如下優(yōu)點 1.縮短服務(wù)的響應(yīng)時間 2.減輕服務(wù)器負擔 3.減少網(wǎng)絡(luò)帶寬使用量,降低企業(yè)成本 但是他的缺點也是顯而易見的,由于使用了緩存設(shè)置,導(dǎo)致被緩存的內(nèi)容更新了,但是客戶看到的卻還是舊的。 如何解決被緩存文件及時更新這個問題呢? 第一種:縮短緩存時間例如:1天,不徹底犧牲性能 第二種:對緩存的對象改名。

15.3 開啟長連接功能

15.3.1 apache的keepalive和keepalivetimeout 。打開長鏈接 KeepAlive Off/On 保持連接,會減少三次握手,但是會消耗內(nèi)存,是否打開,取決于單位時間內(nèi)是否進行多次連接(三次握手),一個連接有多次請求的,建議打開,并適當調(diào)整KeepAliveTimeout時間

在APACHE的httpd.conf中,KeepAlive指的是保持連接活躍,如果將KeepAlive設(shè)置為On,那么來自同一客戶端的請求就不需要再一次連接,避免每次請求都要新建一個連接而加重服務(wù)器的負擔。

KeepAlive的連接活躍時間當然是受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接就會中斷,再新建第二個連接。 所以,一般情況下,圖片較多的網(wǎng)站應(yīng)該把KeepAlive設(shè)為On。但是KeepAliveTimeOut應(yīng)該設(shè)置為多少秒就是一個值得討論的問題了。 如果KeepAliveTimeOut設(shè)置的時間過短,例如設(shè)置為1秒,那么APACHE就會頻繁的建立新連接,當然會耗費不少的資源;反過來,如果KeepAliveTimeOut設(shè)置的時間過長,例如設(shè)置為300秒,那么APACHE中肯定有很多無用的連接會占用服務(wù)器的資源,也不是一件好事。 所以,到底要把KeepAliveTimeOut設(shè)置為多少,要看網(wǎng)站的流量、服務(wù)器的配置而定。

以下是我的配置:

63 ~]# vim /etc/httpd/httpd.conf 改: #Include /etc/httpd/extra/httpd-default.conf 為:Include /etc/httpd/extra/httpd-default.conf

vim /etc/httpd/extra/httpd-default.conf

修改: KeepAlive On KeepAliveTimeout 5

注:如果配置文件中這兩項,就自己修改一下。源碼編譯的有時沒有這兩個參數(shù)。 考慮到我的網(wǎng)站上有不少的圖片,所以將KeepAlive設(shè)為On,一般的頁面兩次請求間隔不會超過30秒,所以這樣設(shè)置,至盡運行狀況良好。如果是藝術(shù)品網(wǎng)站, 需要看的時間長,那么就設(shè)置長一些。

MaxKeepAliveRequests 默認:100 一個建立好的Keep-Alive連接,允許發(fā)送的請求的個數(shù)。一旦建立連接,要么就是個數(shù)達到了斷開,要么就是等KeepAliveTimeout時間到了斷開連接。

MaxKeepAliveRequests指令限制了當啟用KeepAlive時,每個連接允許的請求數(shù)量。如果將此值設(shè)為"0",將不限制請求的數(shù)目。我們建議最好將此值設(shè)為一個比較大的值,以確保最優(yōu)的服務(wù)器性能。"

這個數(shù)字的設(shè)置,必須考慮在一個時間段內(nèi),同一個用戶訪問你的服務(wù)會發(fā)多少請求。要結(jié)合KeepAliveTimeout參數(shù)來考慮。

舉個例子,用戶需要間隔時間不大于KeepAliveTimeout的時間內(nèi),連續(xù)請求10個文件,那么這個參數(shù)就應(yīng)該設(shè)置成10,如果用戶在連續(xù)時間里不斷請求訪問,則這個數(shù)值得設(shè)置得更多。否則就重新建立連接下載。一旦用戶連續(xù)進行了10個請求后,并且這個用戶肯定在完成這些請求后的5秒內(nèi)不會再請求,甚至要在之后的很長時間后請求,那么這個KeepAliveTimeout時間就可以設(shè)置得很短,以便盡早斷開這種用戶,把資源讓個其他用戶。

TimeOut 默認:60 秒

"TimeOut指令用于設(shè)置Apache等待以下三種事件的時間長度:

接受一個GET請求耗費的總時間。POST或PUT請求時,接受兩個TCP包之間的時間。應(yīng)答時TCP包傳輸中兩個ACK包之間的時間。 比如:apache需要把jsp文件傳給后端tomcat服務(wù)器,而tomcat服務(wù)器關(guān)了,這時這個鏈接需要等待的超時時間,由TimeOut控制。

注:計時器在1.2版本之前的默認值為1200,而現(xiàn)在已經(jīng)設(shè)置為300了,但對于絕大多數(shù)情況來說仍是足夠的。

5.3.2 案例分析:

假設(shè) KeepAlive 的超時時間為 10 秒鐘,服務(wù)器每秒處理 50 個獨立用戶訪問,那么系統(tǒng)中Apache的總進程數(shù)就是 10 * 50 = 500 個,如果一個進程占用 4M 內(nèi)存,那么總共會消耗2G內(nèi)存,所以可以看出,在這種配置中,相當消耗內(nèi)存,但好處是系統(tǒng)只處理了 50次 TCP 的握手和關(guān)閉操作。 如果關(guān)閉 KeepAlive,如果還是每秒50個用戶訪問,如果用戶每秒的并發(fā)請求數(shù)為3個,那么 Apache 的總進程數(shù)就是 50 * 3 = 150 個,如果還是每個進程占用 4M 內(nèi)存,那么總的內(nèi)存消耗為600M,這種配置能節(jié)省大量內(nèi)存,但是,系統(tǒng)處理了 150 次 TCP 的握手和關(guān)閉的操作,因此又會多消耗一些 CPU 資源。

總結(jié): 1、如果內(nèi)存和CPU都足夠,開啟和關(guān)閉KeepAlive對性能影響不大。 2、如果考慮服務(wù)器壓力,如果同一個客戶端對服務(wù)器會經(jīng)常訪問,建議開啟KeepAlive。

參考數(shù)值:

KeepAlive On KeepAliveTimeout 30 MaxKeepAliveRequests 100 #這個值一般不需要配置。

15.4 apache運行模式-prefork-worker運行模式介紹

15.4.1 apache不同運行模式調(diào)優(yōu)。 Web服務(wù)器Apache目前一共有三種穩(wěn)定的MPM(Multi-Processing Module,多進程處理模塊)模式。 Prefork:進程模式 worker:線程模式 Event : 事件模式(2.4版本后開始穩(wěn)定)

15.6 prefork運行模式詳解

1、Prefork MPM : Prefork MPM實現(xiàn)了一個非線程的、預(yù)派生的web服務(wù)器。它在Apache啟動之初,就先預(yù)派生一些子進程,然后等待連接;可以減少頻繁創(chuàng)建和銷毀進程的開銷,每個子進程只有一個線程,在一個時間點內(nèi),只能處理一個請求。這是一個成熟穩(wěn)定,可以兼容新老模塊,也不需要擔心線程安全問題,但是一個進程相對占用資源,消耗大量內(nèi)存,不擅長處理高并發(fā)的場景。 最重要的是將MaxRequestWorkers設(shè)置為一個足夠大的數(shù)值以處理潛在的請求高峰,同時又不能太大,以致需要使用的內(nèi)存超出物理內(nèi)存的大小。 注: Prefork 是基于多進程的模式。 優(yōu)點:因為每個進程使用獨立的內(nèi)存空間,所以比較安全。一個進程壞了,不會影響其他進程。 缺點:占用的內(nèi)存比較大。 2、Worker MPM : 和prefork模式相比,worker使用了多進程和多線程的混合模式,worker模式也同樣會先預(yù)派生一些子進程,然后每個子進程創(chuàng)建一些線程,同時包括一個監(jiān)聽線程,每個請求過來會被分配到一個線程來服務(wù)。線程比起進程會更輕量,因為線程是通過共享父進程的內(nèi)存空間,因此,內(nèi)存的占用會減少一些,在高并發(fā)的場景下會比prefork有更多可用的線程,表現(xiàn)會更優(yōu)秀一些;另外,如果一個線程出現(xiàn)了問題也會導(dǎo)致同一進程下的線程出現(xiàn)問題,如果是多個線程出現(xiàn)問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全了,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)。 注: Worker MPM 優(yōu)點:可以處理海量請求,而系統(tǒng)資源的開銷小。原因:一個進程中包括多個線程。多個線程之間可以共享內(nèi)存,所以占用的內(nèi)存資源比較少。如圖: 缺點:不太安全。如果一個線程壞了。 整個進程都要壞了。另外存在keep-alive長連接占用資源時間過長

如何避免進程中某個線程壞了? 一個進程中所有線程完成一定數(shù)量的請求后,自動關(guān)閉,再重打開。就可以避免內(nèi)存溢出等問題。 就像一個電腦開機時間長了,會卡,需要重啟一下。 進程包括線程的。 一個進程可以有一個或多個線程。

總結(jié): 不管是Worker模式或是Prefork 模式,Apache總是試圖保持一些備用的(spare)或者是空閑的子進程(空閑的服務(wù)線程池)用于迎接即將到來的請求。這樣客戶端就不需要在得到服務(wù)前等候子進程的產(chǎn)生。 這就是:預(yù)先派生進程或線程。

3、Event MPM:event模式是在2.4版本中才穩(wěn)定發(fā)布的模式。這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。這增強了在高并發(fā)場景下的請求處理。 當某個連接沒有請求時,會主動關(guān)閉連接,在work模式下,必須等keep-alive超時,才可以釋放。 在configure配置編譯參數(shù)的時候,可以使用 --with-mpm=prefork|worker|event 來指定編譯為那一種MPM,當然也可以用編譯為三種都支持:–enable-mpms-shared=all,這樣在編譯的時候會在modules目錄下自動編譯出三個MPM文件的so,然后通過修改httpd.conf配置文件更改MPM

15.4.2 實戰(zhàn)2: Apache prefork調(diào)優(yōu)

案例場景: 當用戶訪問網(wǎng)站時,在客戶端瀏覽器輸入網(wǎng)址后長時間無響應(yīng),而一旦連接上之后,頁面很快就打開了(因為配置了持久連接)。 排查: 登錄上linux服務(wù)器后,使用netstat觀察最大連接數(shù)穩(wěn)定在257,查看apache配置文件中,prefork模式中,MaxRequestWorkers為 257, 這因為apache連接數(shù)明顯不夠用。

先查看apache的運行模式 查看命令:

63 ~]# /usr/local/apache/bin/httpd -M | grep event mpm_event_module (shared) #看到這個,說明是prefork多進程模式

注:查看模塊: httpd -l //查看MPM模塊 httpd -M //查看DSO模塊,由于mod_mpm_event.so,mod_mpm_prefork.so,mod_mpm_worker.so,此三個模塊被做成DSO模塊,所以使用httpd -M查看

或:

63 src]# /usr/local/apache/bin/httpd -V Server version: web/8.1.2-dev (Unix) Server built: Feb 8 2018 21:29:56 Server’s Module Magic Number: 20120211:36 Server loaded: APR 1.5.2, APR-UTIL 1.5.2 Compiled using: APR 1.5.2, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: event

注:如果使用rpm安裝的httpd,直接執(zhí)行: [root@xuegod63 ~]# httpd -M |grep prefork mpm_prefork_module (shared) [root@xuegod63 ~]# rpm -qf which httpd #httpd命令是apache服務(wù)器軟件包安裝的 httpd-2.4.10-15.el7.x86_64

總結(jié): RHEL6/7系統(tǒng)自帶的apache默認采用的是prefork進程模型;在編譯apache源碼時,如果不用–with-mpm顯式指定某種MPM,prefork就是缺省的MPM;

httpd2.4 新特性

1)MPM支持在運行時裝載 指定啟用: –enable-mpms-shared=all --with-mpm=event //把所有支持的MPM都編譯進來,但啟用默認的是event 2) 支持event 3)異步讀寫 4) 在每模塊及每目錄上指定日志級別 5)每請求配置: 6) 增強版的表達式分析器 7) 毫秒級的keepalive timeout ,使用ms指定為毫秒 8)支持主機名的虛擬主機不在需要NameVirtualHost指令 9) 支持使用自定義變量 新增一些模塊:mod_proxy_fcgi(基于fcgi方式調(diào)用執(zhí)行環(huán)境) mod_ratelimit(用于做速率限定) mod_request(對請求方法做限定) mod_remoteip(對遠端IP做限定) 對于基于IP的訪問做了修改,不在使用order,allow,deny這些機制;而是統(tǒng)一使用require進行

調(diào)整MPM模塊則直接修改主配置文件中的LoadModule指定即可

#LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #LoadModule mpm_worker_module modules/mod_mpm_worker.so

2,對prefork模式進行優(yōu)化。 修改apache 的httpd-mpm.conf 配置.

[root@xuegod63 ~]# vim /etc/httpd/httpd.conf 改:449 #Include conf/extra/httpd-mpm.conf 為:Include conf/extra/httpd-mpm.conf [root@xuegod63 ~]# vim /etc/httpd/extra/httpd-mpm.conf #第一次打開的時候默認配置是這樣的。 改: 28 29 StartServers 5 30 MinSpareServers 5 31 MaxSpareServers 10 32 MaxRequestWorkers 250 33 MaxRequestsPerChild 0 34

注:spare[英][spe??] 備用 為: ServerLimit 3000 StartServers 50 MinSpareServers 50 MaxSpareServers 100 MaxRequestWorkers 3000 MaxRequestsPerChild 1000 63 ~]#systemctl restart httpd #重啟服務(wù)

剛才配置文件中參數(shù)詳解:

首先來看看在prefork模式下,apache各個參數(shù)的意義:

ServerLimit 是最大的進程數(shù) MaxRequestWorkers 是最大的請求并發(fā)。

注:所以他們的關(guān)系是MaxRequestWorkers=ServerLimit*進程的線程數(shù)。因為,在prefork模式下一個進程只有一個線程,并且一個進程對應(yīng)一個連接。 所以這里配置成:MaxRequestWorkers=ServerLimit,MaxRequestWorkers不得大于ServerLimit參數(shù)。

如果做5000并發(fā)的web,需要多少內(nèi)存? 5000*2M/0.8/1024(轉(zhuǎn)G)=12.2G 。 服務(wù)器大概需要14G -16G 內(nèi)存。

ServerLimit的大小,取決于你系統(tǒng)的資源,每個apache進程默認大約占用2M內(nèi)存,基本可以按照這個公式來計算:最大內(nèi)存*80%/2M=ServerLimit。 注:一個apache進程實際使用內(nèi)存大小和處理的請求數(shù)有關(guān)。即和MaxRequestsPerChild 這個值有關(guān)。(MaxRequestsPerChild,每個子進程在其生存期內(nèi)允許處理的最大請求數(shù)量)。

15.4.3 StartServers 50 啟動時默認啟動的 進程數(shù)

這個參數(shù)默認是5,因為apache會通過自動啟動新進程來增加響應(yīng)服務(wù)的進程數(shù),這個值不做調(diào)整的也是可以的,會由默認的5增加到滿足服務(wù)的進程數(shù),但是會出現(xiàn)開始啟動后,突然后有大并發(fā)訪問時,因為進程數(shù)太小,出現(xiàn)卡住的現(xiàn)象。 例:查看進程數(shù):

63 ~]# ps -axu | grep httpd | wc -l Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.8/FAQ 52

注:所以不要一次啟動太多的apache進程,只啟動足夠用的進程即可。其他增加的流量,apache會自動調(diào)整進程數(shù),直到MaxRequestWorkers參數(shù)限定的范圍。

15.4.4 MinSpareServers 55 最小空閑進程

Spare :[spe??] 備用 MinSpareServers指令設(shè)置空閑子進程的最小數(shù)量。 MinSpareServers指令設(shè)置空閑子進程的最小數(shù)量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前空閑子進程數(shù)少于MinSpareServers ,那么Apache將以第一秒一個,第二秒兩個,第三秒四個,按指數(shù)遞增個數(shù)的速度產(chǎn)生新的子進程。如此按指數(shù)級增加創(chuàng)建的進程數(shù),最多達到每秒32個,直到滿足 MinSpareServers設(shè)置的值為止;這就是預(yù)派生(prefork)的由來;這種模式可以不必在請求到來時再產(chǎn)生新的進程,從而減小了系統(tǒng)開銷以增加性能;

15.4.5 MaxSpareServers 100 最大空閑進程

MaxSpareServers指令設(shè)置空閑子進程的最大數(shù)量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前有超過MaxSpareServers數(shù)量的空閑子進程,那么父進程將殺死多余的子進程。 可以調(diào)整MinSpareServers 和MaxSpareServers這兩個參數(shù),但是這兩個參數(shù)的值不能設(shè)得太大,否則apache進程太多,會導(dǎo)致內(nèi)存占用太多。

注:在一臺壓力大(并發(fā)訪問2000)的服務(wù)器上,MaxSpareServers這個值設(shè)置的是200。保留最大并發(fā)數(shù)的10分之一。

設(shè)置了這個值的好處是不會有太多的空閑的進程在消耗資源,關(guān)閉空閑apache進程的同時,會釋放內(nèi)存,從而減少系統(tǒng)資源消耗。

15.4.6 MaxRequestsPerChild 1000

“MaxRequestsPerChild指令設(shè)置每個子進程在其生存期內(nèi)允許處理的最大請求數(shù)量。到達MaxRequestsPerChild的限制后,子進程將會結(jié)束。如果MaxRequestsPerChild為"0”,子進程將永遠不會結(jié)束。

將MaxRequestsPerChild設(shè)置成非零值有兩個好處:

可以防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存。給進程一個有限壽命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量。 注:當KeepAlive 為On, 開啟長鏈接時,發(fā)送的請求,在MaxRequestsPerChild里面只算一個,不管這個連接發(fā)送了多少個請求。 注意:對于KeepAlive鏈接,只有第一個請求會被計數(shù)。事實上,它改變了每個子進程限制最大鏈接數(shù)量的行為。 也就是說實際上這個時候子進程最大連接數(shù)

=MaxRequestsPerChildMaxKeepAliveRequests 例: MaxRequestsPerChild 1000 MaxKeepAliveRequests 200 #一個長連接可以處理請求數(shù)為200 每子進程最大連接數(shù)=1000200=20萬次請求。 注:這個進程處理的數(shù)量太大了。 改為: MaxRequestsPerChild 100 MaxKeepAliveRequests 20 #一個長連接可以處理請求數(shù)為20 每子進程最大連接數(shù)=100*20=2千次請求。

注:所以在開啟KeepAlive后,需要同時設(shè)置MaxRequestsPerChild和MaxKeepAliveRequests,確保每個apache進程在服務(wù)一定請求數(shù)后會關(guān)閉,重新開啟新的子進程,避免apache進程異常導(dǎo)致的內(nèi)存泄露和資源占用。

15.4.7 實戰(zhàn):如何跟據(jù)硬件來配置連接數(shù)?

連接數(shù)理論上是越大越好,但是得根據(jù)硬件,服務(wù)器的CPU,內(nèi)存,帶寬等因素,查看當前的apache連接數(shù)。

63 ~]# ps -aux | grep httpd | wc -l 52 注:總進程數(shù)為52-2

查看httpd 占用內(nèi)存的平均數(shù): 使用ps查看RSS列,每個進程占用的內(nèi)存。

63 ~]# ps -axu | grep http | awk ‘{print $6}’ #單位是K,現(xiàn)在一個使用1.6M左右 1636 1636 1636 1636 1636 1636 1636 1636 1636 或: 63 ~]# ps aux | grep http |awk ‘{sum += $6;n++};END{print sum/n}’ 1638.92

注:一個進程使用1.6M左右內(nèi)存。

15.4.8 如何設(shè)置最大鏈接數(shù):

計算后要減去服務(wù)器系統(tǒng)本身所需要的資源。比如內(nèi)存2G,減去500M留給服務(wù)器,還有1.5G,那么可得到最大連接數(shù):1500/1.6=930左右。 根據(jù)情況修改后的http-mpm.conf的prefork的配置后為: StartServers 50 MinSpareServers 50 MaxSpareServers 100 ServerLimit 1000 MaxRequestWorkers 1000 MaxRequestsPerChild 100

注:這里重點介紹下ServerLimit,必須放到MaxRequestWorkers前,值要等于MaxRequestWorkers。 重啟apache,再打開網(wǎng)站看看是否還會有慢的問題了。

63 ~]# systemctl restart httpd

測試: 動態(tài)觀察apache的最大連接數(shù):

63 ~]# watch -n 1 “pgrep httpd|wc -l” Every 1.0s: pgrep httpd|wc -l Wed Sep 2 15:24:08 2015 51 #有51個進程

15.4.9 生產(chǎn)環(huán)境配置實例1:物理是內(nèi)存4G StartServers 20 MinSpareServers 20 MaxSpareServers 30 ServerLimit 2000 MaxRequestWorkers 2000 MaxRequestsPerChild 5000 #沒有開keepalive是5000,如果開啟keepalive就配置成500

15.4.10 實戰(zhàn)2: apache worker模擬性能優(yōu)化

Apache2.0的性能方面的改進最明顯的變化就在于worker; 優(yōu)點:內(nèi)存占用比prefork模式低,適合高并發(fā)高流量HTTP服務(wù)。 缺點:假如一個線程崩潰,整個進程就會連同其他任何線程一起“死掉”。由于線程共享內(nèi)存空間,所以一個程序在運行時必須被系統(tǒng)識別為“每個線程都是安全的”。服務(wù)穩(wěn)定性不如prefork模式。

63 ~]# /usr/local/apache/bin/httpd -M |grep worker //查看是否使用worker模塊,沒有輸出,則說明沒有使用

63 ~]# ls /usr/local/apache/modules/* |grep worker //查模塊目錄,模塊已存在 /usr/local/apache/modules/mod_mpm_worker.so

63 ~]# vim /etc/httpd/httpd.conf //修改apache配置文件 #LoadModule mpm_event_module modules/mod_mpm_event.so #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule mpm_worker_module modules/mod_mpm_worker.so //只開啟worker項,如此項沒有,則手動添加即可

63 ~]# systemctl restart httpd //重啟apache

63 ~]# vim /etc/httpd/extra/httpd-mpm.conf 63 ~]# vim /etc/httpd/extra/httpd-mpm.conf

改:

StartServers 2 MaxRequestWorkers 150000 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 63 ~]# systemctl restart httpd //重啟apache

配置參數(shù)說明: StartServers 2 #最初建立的子進程 MaxRequestWorkers 150000 # MaxRequestWorkers,apache同時最多能支持150000個并發(fā)訪問,超過的要進入隊列等待,其大小由ServerLimit和ThreadsPerChild的乘積決定。這個150000指的是所有子進程中的線程總數(shù)。一般要把這個值配置的大一些

MinSpareThreads 25 #基于整個服務(wù)器監(jiān)視的最小空閑線程數(shù),如果空閑的線程小于設(shè)定值,apache會自動建立線程,如果服務(wù)器負載大的話,可以考慮加大此參考值。 MaxSpareThreads 75 #基于整個服務(wù)器監(jiān)視的最大空閑線程數(shù),如果空閑的線程大于設(shè)定值,apache會自動kill掉多余的線程,如果服務(wù)器負載大的話,可以考慮加大此參考值。

ThreadsPerChild 25 #每個子進程包含固定的線程數(shù),此參數(shù)在worker模式中,是影響最大的參數(shù),ThreadsPerChild的最大缺省值是64,如果負載較大,64是不夠的. MaxRequestsPerChild 0 #每個子進程可以支持的請求數(shù),這要設(shè)置為0,因為一個進程關(guān)閉,所有的線程也都關(guān)了。 注:child 子進程

ServerLimit服務(wù)器允許配置進程數(shù)的上限。 ThreadLimit每個子進程可以配置的線程上限

常用配置參考:

生產(chǎn)環(huán)境配置實例: StartServers 5 MaxRequestWorkers 9600 ServerLimit 64 MinSpareThreads 25 MaxSpareThreads 500 ThreadLimit 200 ThreadsPerChild 150 MaxRequestsPerChild 0

此服務(wù)器配置: 最多進程數(shù):64個; 最多線程數(shù)(最大并發(fā)數(shù)) 64150=9600 ;不可能超過64200=12800

案例: 如果MaxRequestsPerChild 30000 這樣配置會有什么結(jié)果? 結(jié)果:一但到30000次請求 , 那150個線程都關(guān)了,會出大量閃斷情況。

event模式:了解一下 StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 1000

總結(jié): Apache httpd 能更好的為有特殊要求的站點定制。例如,要求 更高伸縮性的站點可以選擇使用線程的 MPM,即 worker 或 event; 需要可靠性或者與舊軟件兼容的站點可以使用 prefork。

15.7 rewrite-禁止網(wǎng)站下某個目錄執(zhí)行PHP文件-apache調(diào)優(yōu)總結(jié)

15.7.1 Rewrite規(guī)則簡介: Rewirte主要的功能就是實現(xiàn)URL的跳轉(zhuǎn),它的正則表達式是基于Perl語言。可基于服務(wù)器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。 安裝Rewirte模塊兩種方式: 方法一:是編譯apache的時候就直接 安裝rewrite模塊。 方法二:編譯apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。

15.7.2 基于服務(wù)器級的(httpd.conf)有兩種方法: 方法1:在httpd.conf的全局下 直接利用RewriteEngine on來打開rewrite功能; 方法2:在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規(guī)則也不會生效。

基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。

15.7.3 Apache mod_rewrite規(guī)則重寫的標志一覽:

網(wǎng)上學(xué)習(xí)資料一大堆,但如果學(xué)到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那么很難做到真正的技術(shù)提升。

需要這份系統(tǒng)化的資料的朋友,可以添加V獲?。簐ip1024b (備注軟件測試)

一個人可以走的很快,但一群人才能走的更遠!不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!

總結(jié): Apache httpd 能更好的為有特殊要求的站點定制。例如,要求 更高伸縮性的站點可以選擇使用線程的 MPM,即 worker 或 event; 需要可靠性或者與舊軟件兼容的站點可以使用 prefork。

15.7 rewrite-禁止網(wǎng)站下某個目錄執(zhí)行PHP文件-apache調(diào)優(yōu)總結(jié)

15.7.1 Rewrite規(guī)則簡介: Rewirte主要的功能就是實現(xiàn)URL的跳轉(zhuǎn),它的正則表達式是基于Perl語言??苫诜?wù)器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。 安裝Rewirte模塊兩種方式: 方法一:是編譯apache的時候就直接 安裝rewrite模塊。 方法二:編譯apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。

15.7.2 基于服務(wù)器級的(httpd.conf)有兩種方法: 方法1:在httpd.conf的全局下 直接利用RewriteEngine on來打開rewrite功能; 方法2:在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規(guī)則也不會生效。

基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。

15.7.3 Apache mod_rewrite規(guī)則重寫的標志一覽:

網(wǎng)上學(xué)習(xí)資料一大堆,但如果學(xué)到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那么很難做到真正的技術(shù)提升。

需要這份系統(tǒng)化的資料的朋友,可以添加V獲取:vip1024b (備注軟件測試) [外鏈圖片轉(zhuǎn)存中…(img-x2t1t1ER-1713329828429)]

一個人可以走的很快,但一群人才能走的更遠!不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!

柚子快報邀請碼778899分享:LAMP之a(chǎn)pache調(diào)優(yōu)

http://yzkb.51969.com/

相關(guān)閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18945564.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄