中間件監控之Apache

 補 系統架構php

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

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

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

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分左右)web

傳以前   校驗MD5  傳以後  再校驗MD5 確保傳過去的數據一致面試

保證完整性 redis

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

傳輸完成後校驗MD5  而後再組裝sql

存儲分片(某個扇區損壞不影響其餘扇區)  多線程數據庫

速度快,安全係數高apache

全部的文件都是二進制形式保存,取決於你以什麼形式打開

 

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

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

 
1、Apache
一、Apache 簡介
Apache HTTP Server  是一個開源的web 服務器,具備簡單、速度快、穩定性高的特色,而且還能夠做爲代理服務器
 
二、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 

三、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  項目都是熱啓動   項目不中止運行

一、拉代碼 
二、修改配置文件 

部署好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  字段

一、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的數值嗎?

 

二、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  模式不安全  一個進程死掉後子線程所有被殺掉

 

三、Apache工做模式-Event模式  (具體參考ppt)

Apache  工做模式切換

切換工做模式   修改文件名便可 默認是prefork   

舉例說明:把這個改成httpd名,工做模式變爲work

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

重點:Apache 監控

1、如何獲取apache監控參數

Vi  /etc/httpd/conf/httpd.conf

 

SetHandler  加載某個模塊

order 先執行deny 

重啓apache   項目是實時讀取的,但自身配置不是,因此須要重啓

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

 

 Apache  優化

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