中間件監控之Apache


 補 系統架構

nginx接到請求后把請求轉發到tomcat,還有種方式是轉發到apache(php項目),或者其他語言的應用服務器(放置我們的項目)
ngnix:是web服務器,接受和轉發請求用的,不做任何動態處理
瀏覽器直接請求cdn(有錢用cdn,沒錢用文件服務器);

 Cdn   內容分發網絡 全稱是Content Delivery Network

 面試:Cdn 的時間算法,基於什么的算法

mysql:數據庫服務器
redis:
集群:多台機器,放一起,請求的時候如果有一個掛了,不影響正常使用,個數是單數,一個leader,多個follower,半數掛了集群就掛了
消息隊列:發個東西過去,排隊,第一個人發了第二個發,這個順序是按接收到的時間
kafka,ZK(zookeeper):一說這兩個肯定是集群
日志分析:需要用到awk,grep,sed
確定性能指標:分析日志查看了解pv 
PV:page view,頁面瀏覽量或點擊量,刷新一次頁面即被計算一次,簡稱PV,
UV:即Unique Visitor,訪問您網站的一台電腦客戶端為一個訪客。00:00-24:00內相同的客戶端只被計算一次
IP(獨立IP):指獨立IP數。00:00-24:00內相同IP地址之被計算一次
KLE(一套框架,可以滿足日志分析)、 Maven  自己了解
 

面試題:大數據遷移怎么遷移,比如你服務器上有一個10個G的日志文件,你怎么去遷移 (01:42分左右)

傳之前   校驗MD5  傳之后  再校驗MD5 確保傳過去的數據一致

保證完整性 

根據網絡傳輸效率,考慮怎么分片  服務器直接用scp  命令

傳輸完成后校驗MD5  然后再組裝

存儲分片(某個扇區損壞不影響其他扇區)  多線程

速度快,安全系數高

所有的文件都是二進制形式保存,取決於你以什么形式打開

 

利用分片傳輸+多線程傳輸的機制
1.分片,把大內存的數據分成n片
2.md5 算法校驗,在傳輸前傳輸后分別校驗,檢查文件傳輸正確性、完整性后  再組裝
3.多線程傳,使用時間為單線程的n分之一

https://blog.csdn.net/ltx06/article/details/70162107 

 
一、Apache
1、Apache 簡介
Apache HTTP Server  是一個開源的web 服務器,具有簡單、速度快、穩定性高的特點,並且還可以作為代理服務器
 
2、Apache 安裝

 如果需要集成php  用lampp  集成包

 Find  / -name httpd  查找命令   /  根目錄下的所有路徑  -name  通過名字

 Find / |grep httpd  模糊查找

A,使用yum安裝

Yum  安裝

apache  /etc/httpd  配置文件 為 httpd.conf  可執行文件

 /usr/sbin/httpd  啟動apache   service httpd start|restart|stop (yum 安裝會作為一個系統服務)

B,使用安裝包安裝

C,Lampp  自帶的httpd

bin 目錄所有可執行文件  

/opt/lampp/etc   lampp 配置文件

/opt/lampp/etc/extra  擴展的配置文件

查看Apache 版本:

/opt/lampp/bin/httpd -v 查看apache 版本

/usr/sbin/httpd -V  查看你安裝的apache的版本信息等細節

配置文件 :/opt/lampp/etc/httpd.conf
           /etc/httpd/conf/httpd.conf

配置文件常見修改的地方:

ServerRoot "/opt/lampp"

Listen  監聽 直接提供端口  Listen 9090 

3、Apache 主要目錄和配置文件

 命令:

配置文件 :/opt/lampp/etc/httpd.conf
           /etc/httpd/conf/httpd.conf

查看進程  

ps -ef       ps  -aux 

ps -ef  

 

Root  用戶啟動主進程的同時會啟動一些子進程  

所以  部署php項目,將項目代碼放到/opt/lamp/htdocs該目錄下

訪問項目時,http://ip:端口號/項目名 便可訪問

如果無法訪問:1,查看該項目是否放至在apache默認web站點目錄路徑下;2,項目名是否正確 ( bbs 文件名為upload  所以需要先改名為bbs)

 Php  項目都是熱啟動   項目不停止運行

1、拉代碼 
2、修改配置文件 

部署好bbs后有一個初始化用戶名密碼:
其實修改的是下面文件(初始化操作實際就是文件io 讀寫操作)跟數據庫打交道一般是io操作

 數據庫遷移的時候需要手動修改該文件

請求日志 看access_log  

 

 Apache 擴展文件 

 重點:Apache  工作模式

用的系統的apache  /opt/lampp/etc/extra  下的httpd-mpm.conf

web 服務器Apache 目前一共有三種穩定的MPM(Multi -Processing Module,多進程處理模塊)模式。它們分別是prefork ,worker和event 

查看當前工作模式  

/opt/lampp/bin/httpd -v 查看apache 版本

/usr/sbin/httpd -V  查看你安裝的apache的版本信息等細節

中Server  MPM  字段

1、Prefork  模式   單進程單線程,一對一

 

Prefork MPM是一個非常穩定的模式,Apache 在啟動之初,會預派生fork 一些子進程,然后等待請求進來,並且總會保持一些備用的子進程。

同時派生出的每個子進程只有一個線程,在一個時間點內只能處理一個請求。Prefork MPM在效率上要比Worker MPM高,但是在內存使用方面也會大很多。

它並不擅長處理高並發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。

長連接:保持的時間比較長,比如視頻

參數詳解:

 

StartServers  //指定服務器啟動時建立的子進程數,默認為5

MinSpareServers //指定空閑子進程的最小數量,默認為5.如果當前空閑子進程數小於配置的數量則Apache會以最大每秒一個的速度創建新的子進程

MaxSpareServers  //指定空閑子進程的最大數量,默認為10.如果當前有超過設置的最大進程數則會殺死多余的進程,如果設置的比MinSpareServers 小,則Apache會默認修改為MinSpareServers +1

MaxRequestWorkers  //限定服務器同一時間內客戶端最大接入的請求數量,默認是150.任何超過了該限制的請求都要進入等待隊列,

                                   一旦一個個連接被釋放,隊列中的請求才將得到服務。在Apache2.3 前又叫MaxClients

MaxConnectionsPerChild  //每個子進程的在其生命周期內允許最大的請求數量,如果請求總數已經達到這個數值,子進程將會結束;

                                         如果設置為0,子進程將永遠不會結束。若該值設置為非0值,可以防止運行PHP導致的內存泄漏(結束以后會釋放內存)。

一個請求結束后會保留一些“臟數據”,連接的請求越多臟數據越多,到達一定程度后會結束該進程,釋放內存。

ServerLimit 2000          //MaxRequestWorkers(MaxClients)最大是256個線程,如果需要更大就需要加上該參數了。

                            這個參數的最大值是2000,如果需要更大需要編譯apache。生效前提:必須放在其他指令的前面

 

進程數與cpu  有關   不可能全部占滿、

思考:那要是避免排隊的情況 可以直接改 prefork的數值嗎?

 

2、Aache工作模式-Work模式   單進程,多線程   一對多

 

參數詳解:

StartServers  //服務器啟動時創建的子進程數

MaxClients   //

MinSpareThreads   //最小空閑線程數,這個MPM將基於整個服務器監控空閑線程數。假如服務器中的空閑線程數太少,則將會創建新的空閑線程

MaxSpareThreads   //最大空閑線程數。這個MPM將基於整個服務器監控空閑線程數。假如服務器中的總的空閑線程數太多,子進程將殺死多余的空閑線程。最大

                                    空閑線程數的取值范圍是有限制的。Work 需要其大於等於MinSpareThreads  和ThreadsPerChild 的總和

ThreadsPerChild   //每個子進程建立的常駐執行線程數,子進程在啟動時建立這些線程后就不會再建立新線程了

MaxRequestsPerChild   //允許同時伺服的最大接入請求數量。任何超過該限制的請求都將進入等候隊列

                                  每個進程能處理多少個請求,處理完成后則會死掉

思考:現有如下配置

<IfModule worker.c>
StartServers         4  
MaxClients         300
MinSpareThreads     25 
MaxSpareThreads     75
ThreadsPerChild     25    固定為25不可變
MaxRequestsPerChild  0       每個進程能處理多少個請求,處理完成后則會死掉   釋放內存
</IfModule>

4個進程 每個進程允許25個線程   總共100個  不符合maxsparethreads 75

則會殺掉一個進程   則代表一次性殺掉了25個線程  符合maxsparethreads 

在25 ~ 75 之間  不會做任何修改

如果不滿足最小的minsparethreads 25 則會創建一個進程      

 

Work  模式不安全  一個進程死掉后子線程全部被殺掉

 

3、Apache工作模式-Event模式  (具體參考ppt)

Apache  工作模式切換

切換工作模式   修改文件名即可 默認是prefork   

舉例說明:把這個改為httpd名,工作模式變為work

用同一個配置文件,端口一定會被占用

重點:Apache 監控

一、如何獲取apache監控參數

Vi  /etc/httpd/conf/httpd.conf

 

SetHandler  加載某個模塊

order 先執行deny 

重啟apache   項目是實時讀取的,但自身配置不是,所以需要重啟

瀏覽器輸入:http://ip/server-status

 

 Apache  優化

面試:怎么去apache調優?
提高可支持的連接數,能不能處理取決於項目代碼的處理能力
優化手段就是把prefork改為woker,提高支持的線程數
worker有可能崩
根據實際使用情況,評估下壓力情況,使用者,查看工作模式是哪個
Apache 監控重點:
看運行狀態;看是否有排隊
總之,apache是世界上最好的web服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM