Apache如何提高併發連線請求數量

2021-08-13 01:59:23 字數 2118 閱讀 2331

使用apache作為http伺服器的站點,不可避免的會遇到這個問題:apache負載很低,但是訪問web伺服器非常慢。排除指令碼程式的原因後,基本上就是apache設定問題。

以下內容或許能夠幫助解決這個問題。

1. 首先要了解apache採用的mpm(multi -processing modules,多道處理模組)

mpm是apache的核心,它的作用是管理網路連線、排程請求。

apache2.0 中mpm分為3種(perfork、worker、event)。perfork從apache1.3中繼承下來的,它採用的是程序管 理方式,所以它可以提供更可靠的效能和更好的相容性;worker是apache2.0中新增加的方式,它採用了執行緒控制方法,可以比perfork更節 約系統開銷、處理更多的資料量,但同時相容性並不是很好,很多舊的程式無法工作在worker下;event仍處於試驗階段,它為每個任務分配不同的程序 池,目前不應該採用。

通過命令httpd -l可以獲取目前apache採用的是哪種mpm

本文僅針對perfork方式進行討論

2. 了解perfork的工作方式

檢視apache2.0的配置檔案httpd.conf,可以看到perfork的配置段,大致如下:

serverlimit       256

startservers 5

minspareservers 10

maxspareservers 15

maxclients 256

maxrequestsperchild 4000

當apache被啟動時,apache會自動建立startservers個程序,並且盡力將空閒程序數保持在minspareservers和maxspareservers之間。

如果空閒程序小於minspareservers,apache將會以大約每秒1個的速度新建程序。

如果空閒程序小於maxspareservers,apache將會刪除多餘的空閒程序,釋放伺服器資源。

程序數的最大值由maxclients控制,在apache1.3中最大只能設定為256,但在apache2.0中,可以通過在配置開頭增加serverlimit專案來突破256的限制,此時必須maxclients ≤ serverlimit ≤ 20000

maxrequestsperchild用來控制每個程序在處理了多少次請求之後自動銷毀,這個引數可以設定為0表示無限(即不銷毀程序)。

3. 優化perfork

首先,對於乙個負載相對較高的**來說,256的程序限制是不夠的,如果伺服器已經達到256的極限,那麼接下去的訪問就需要排隊,這也就是為什麼某些伺服器負載不高,但是訪問卻很慢的原因之一。所以首先應該了解伺服器在繁忙時的程序數量。

通過命令ps -ef|grep httpd|wc -l可以了解到當前系統中apache程序數,通過設定serverlimit和maxclients來達到為伺服器軟擴容的目的。

然後,在訪問量高峰期,經常會出現的情況是突然之間發生非常多的併發連線,然後突然之間減少了很多訪問。如果apache沒有準備足夠數量的預備進 程,那訪問只能等待apache每秒1個的新增程序,隨後又要將多餘的程序刪除,那apache只能一直忙於新建和銷毀程序,大大地降低了訪問速度。可以 適當增加startservers、minspareservers、maxspareservers來使得apache不需要一直忙於作無用功。

最後,強烈推薦maxrequestsperchild不要設定為0,設定為非0,可以保護apache程序免遭記憶體洩漏的影響,因為你不知道執行在apache上的應用程式在什麼時候會出錯導致記憶體洩漏。

設定完之後大致是這樣的:

serverlimit       1000

startservers 30

minspareservers 30

maxspareservers 45

maxclients 1000

maxrequestsperchild 4000

Apache2如何提高併發連線請求數量

使用apache作為http伺服器的站點,不可避免的會遇到這個問題 apache負載很低,但是訪問web伺服器非常慢。排除指令碼程式的原因後,基本上就是apache設定問題。檢視使用的何種mpm multi processing modules,多道處理模組 sudo apachectl v gre...

高併發,如何提高併發量

一 什麼是高併發 高併發 high concurrency 是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。高併發相關常用的一些指標有響應時間 response time 吞吐量 throughput 每秒查詢率qps query per se...

檢視Apache併發連線數及其TCP連線狀態

這兩天搭建了一組apache 伺服器,每台伺服器4g記憶體,採用的是prefork模式,一開始設定的連線數太少了,需要較長的時間去響應使用者的請 求,後來修改了一下apache 2.0.59的配置檔案httpd.conf prefork mpm startservers number of serv...