使用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
詳細步驟http://www.liaoxiansheng.cn/?p=496

了解Python编程的入门级代码示例Python是一种简单易学,功能强大的编程语言。对于初学者来说,了解Python编程的入门级代码示例是非常重要的。本文将为您提供一些具体的代码示例,帮助您快速入门。打印HelloWorldprint("HelloWorld")这是Python中最简单的代码示例。print()函数用于将指定的内容输出

PHP变量存储程序运行期间的值,对于构建动态且交互式的WEB应用程序至关重要。本文将深入探讨php变量,并通过10个真实的示例展示它们的实际应用。1.存储用户输入$username=$_POST["username"];$passWord=$_POST["password"];此示例从表单提交中提取用户名和密码,并将其存储在变量中以供进一步处理。2.设置配置值$database_host="localhost";$database_username="username";$database_pa

标题:从入门到精通:Go语言中常用数据结构的代码实现数据结构在编程中起着至关重要的作用,它是程序设计的基础。在Go语言中,有许多常用的数据结构,掌握这些数据结构的实现方式对于成为一名优秀的程序员至关重要。本文将介绍Go语言中常用的数据结构,并给出相应的代码示例,帮助读者从入门到精通这些数据结构。1.数组(Array)数组是一种基本的数据结构,是一组相同类型

如何使用PHP编写库存管理系统中的库存分仓管理功能代码库存管理是许多企业中不可或缺的一部分。对于拥有多个仓库的企业来说,库存分仓管理功能尤为重要。通过合理管理和跟踪库存,企业可以实现不同仓库之间的库存调拨,优化运营成本,改善协同效率。本文将介绍如何使用PHP编写库存分仓管理功能的代码,并为您提供相关的代码示例。一、建立数据库在开始编写库存分仓管理功能的代码之

Java冒泡排序最简单的代码示例冒泡排序是一种常见的排序算法,它的基本思想是通过相邻元素的比较和交换来将待排序序列逐步调整为有序序列。下面是一个简单的Java代码示例,演示了如何实现冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

《Go语言编程实例:Web开发中的代码示例》随着互联网的快速发展,Web开发已经成为各行业中必不可少的一部分。作为一门功能强大且性能优越的编程语言,Go语言在Web开发中越来越受到开发者们的青睐。本文将通过具体的代码示例,介绍如何利用Go语言进行Web开发,让读者能够更好地理解和运用Go语言来构建自己的Web应用。1.简单的HTTP服务器首先,让我们从一个

华为云边缘计算对接指南:Java代码示例快速实现接口随着物联网技术的快速发展和边缘计算的兴起,越来越多的企业开始关注边缘计算的应用。华为云提供了边缘计算服务,为企业提供了高可靠的计算资源和便捷的开发环境,使得边缘计算应用更加容易实现。本文将介绍如何通过Java代码快速实现华为云边缘计算的接口。首先,我们需要准备好开发环境。确保你已经安装了Java开发工具包(

Java选择排序法代码编写指南及示例选择排序是一种简单直观的排序算法,其思想是每次从未排序的元素中选择最小(或最大)的元素进行交换,直到所有元素排序完成。本文将提供选择排序的代码编写指南,并附上具体的Java示例代码。算法原理选择排序的基本原理是将待排序数组分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素,将其放到已排序部分的末尾。重复上述


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),