自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

分析Linux Apache為何訪問(wèn)過(guò)慢

運(yùn)維 系統(tǒng)運(yùn)維
最經(jīng)我正忙著學(xué)習(xí)Linux,在學(xué)習(xí)中總會(huì)遇到一些問(wèn)題。不過(guò)這些問(wèn)題被我解決之后,我從中學(xué)到了很多知識(shí)。在這期間我就解決了這樣一個(gè)Linux Apache問(wèn)題。

最經(jīng)我正忙著學(xué)習(xí)Linux,在學(xué)習(xí)中總會(huì)遇到一些問(wèn)題。不過(guò)這些問(wèn)題被我解決之后,我從中學(xué)到了很多知識(shí)。在這期間我就解決了這樣一個(gè)Linux Apache問(wèn)題。起因:線上的一臺(tái)服務(wù)器,最近總是出現(xiàn)訪問(wèn)很慢的情況發(fā)生,點(diǎn)擊一個(gè)鏈接要2秒鐘以上才能打開(kāi),按照我們對(duì)于訪問(wèn)人數(shù)的估計(jì),服務(wù)器應(yīng)該不至于響應(yīng)這么慢,從而需要針對(duì)這個(gè)Linux Apache進(jìn)行分析,來(lái)解決網(wǎng)站訪問(wèn)過(guò)慢。

分析:
1、首先,在頁(yè)面訪問(wèn)變慢情況發(fā)生時(shí),使用top命令查看了服務(wù)器的負(fù)載情況,發(fā)現(xiàn)負(fù)載并不高,初步估計(jì)不是程序的問(wèn)題。

2、然后,查看了線程中的httpd的數(shù)量, ps -aux | grep httpd | wc -l 發(fā)現(xiàn),線程數(shù)已經(jīng)達(dá)到了 apache 設(shè)置的最大值。由此斷定是網(wǎng)站訪問(wèn)人數(shù)過(guò)多造成了訪問(wèn)過(guò)慢。

3、為了驗(yàn)證,查看了連接數(shù)和當(dāng)前的連接數(shù),分別是
netstat -ant | grep $ip:80 | wc -l
netstat -ant | grep $ip:80 | grep EST | wc -l
發(fā)現(xiàn)果然,連接數(shù)特別多,遠(yuǎn)遠(yuǎn)超過(guò)我們的估計(jì)值。

4、剛開(kāi)始的時(shí)候,對(duì)于服務(wù)器的 MPM 配置方式不是特別的熟悉,認(rèn)為修改服務(wù)器配置可以解決問(wèn)題。主要的配置部分包括 prefork 模式 或者 work 模式的配置,下面是一些簡(jiǎn)單的介紹。
prefork 模式:
以 prefork 模式工作的 apache 的默認(rèn)配置:
<IfModule mpm_prefork_module>
ServerLimit 2000
StartServers   5#指定服務(wù)器啟動(dòng)時(shí)建立的子進(jìn)程數(shù)量
MinSpareServers5#指定空閑子進(jìn)程的最小數(shù)量
MaxSpareServers   10#指定空閑子進(jìn)程的最大數(shù)量
MaxClients   150#指定同一時(shí)間客戶端最大接入請(qǐng)求的數(shù)量(單個(gè)進(jìn)程并發(fā)線程數(shù)),任何超過(guò)該限制的請(qǐng)求都將進(jìn)入等候隊(duì)列,一旦一個(gè)連接被釋放,隊(duì)列中的請(qǐng)求將得到服務(wù)
MaxRequestsPerChild0#指定每個(gè)子進(jìn)程在其生存周期內(nèi)允許伺服的最大請(qǐng)求數(shù)量,默認(rèn)為10000,0表示子進(jìn)程永遠(yuǎn)不結(jié)束
</IfModule>

prefork 控制進(jìn)程在最初建立“StartServers”個(gè)子進(jìn)程后,為了滿足 MinSpareServers 設(shè)置的需要?jiǎng)?chuàng)建一個(gè)進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個(gè),再等待一秒鐘,繼續(xù)創(chuàng)建四個(gè)……如此按指數(shù)級(jí)增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個(gè),直到滿足MinSpareServers設(shè)置的值為止。這種模式可以不必在請(qǐng)求到來(lái)時(shí)再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開(kāi)銷以增加性能。
MaxSpareServers 設(shè)置了最大的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個(gè)值,Apache會(huì)自動(dòng)kill掉一些多余進(jìn)程。這個(gè)值不要設(shè)得過(guò)大,但如果設(shè)的值比 MinSpareServers小,Apache會(huì)自動(dòng)把其調(diào)整為 MinSpareServers+1。如果站點(diǎn)負(fù)載較大,可考慮同時(shí)加大MinSpareServers和MaxSpareServers。

MaxClients是這些指令中最為重要的一個(gè),設(shè)定的是 Apache可以同時(shí)處理的請(qǐng)求,是對(duì)Apache性能影響最大的參數(shù)。其缺省值150是遠(yuǎn)遠(yuǎn)不夠的,如果請(qǐng)求總數(shù)已達(dá)到這個(gè)值(可通過(guò)ps -ef|grep httpd|wc -l來(lái)確認(rèn)),那么后面的請(qǐng)求就要排隊(duì),直到某個(gè)已處理請(qǐng)求完畢。這就是系統(tǒng)資源還剩下很多而HTTP訪問(wèn)卻很慢的主要原因。雖然理論上這個(gè)值越大,可以處理的請(qǐng)求就越多,但Apache默認(rèn)的限制不能大于256。在 apache2 中通過(guò)ServerLimit指令無(wú)須重編譯Apache就可以加大MaxClients。

雖然通過(guò)設(shè)置ServerLimit,我們可以把MaxClients加得很大,但是往往會(huì)適得其反,系統(tǒng)耗光所有內(nèi)存。以一臺(tái)服務(wù)器為例:內(nèi)存2G,每個(gè)apache進(jìn)程消耗大約0.5%(可通過(guò)ps aux來(lái)確認(rèn))的內(nèi)存,也就是10M,這樣,理論上這臺(tái)服務(wù)器最多跑200個(gè)apache進(jìn)程就會(huì)耗光系統(tǒng)所有內(nèi)存,所以,設(shè)置MaxClients要慎重。
worker 模式:
以 worker 模式工作的 apache 的默認(rèn)配置為:
<IfModule mpm_worker_module>
StartServers   2
MaxClients   150
MinSpareThreads   25
MaxSpareThreads   75
ThreadsPerChild   25
MaxRequestsPerChild0
</IfModule>

Worker 由主控制進(jìn)程生成“StartServers”個(gè)子進(jìn)程,每個(gè)子進(jìn)程中包含固定的ThreadsPerChild線程數(shù),各個(gè)線程獨(dú)立地處理請(qǐng)求。同樣,為了不在請(qǐng)求到來(lái)時(shí)再生成線程,
MinSpareThreads和MaxSpareThreads設(shè)置了最少和最多的空閑線程數(shù);而MaxClients 設(shè)置了同時(shí)連入的clients最大總數(shù)。如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程。
MinSpareThreads和 MaxSpareThreads的最大缺省值分別是75和250。這兩個(gè)參數(shù)對(duì)Apache的性能影響并不大,可以按照實(shí)際情況相應(yīng)調(diào)節(jié)。
ThreadsPerChild是worker MPM中與性能相關(guān)最密切的指令。
ThreadsPerChild的最大缺省值是64,如果負(fù)載較大,64也是不夠的。這時(shí)要顯式使用 ThreadLimit指令,它的最大缺省值是20000。

Worker模式下所能同時(shí)處理的請(qǐng)求總數(shù)是由子進(jìn)程總數(shù)乘以ThreadsPerChild 值決定的,應(yīng)該大于等于MaxClients。如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時(shí),控制進(jìn)程會(huì)派生新的子進(jìn)程。默認(rèn)最大的子進(jìn)程總數(shù)是16,加大時(shí)也需要顯式聲明ServerLimit(最大值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以 ThreadsPerChild的值必須大于等于MaxClients,而且MaxClients必須是ThreadsPerChild的整數(shù)倍,否則 Apache將會(huì)自動(dòng)調(diào)節(jié)到一個(gè)相應(yīng)值。
服務(wù)器的apache采用的是 prefork 的工作模式,對(duì) MaxClients 進(jìn)行了相應(yīng)的調(diào)整,發(fā)現(xiàn)服務(wù)啟動(dòng)后很短時(shí)間,連接數(shù)就能夠達(dá)到最大。

5、后來(lái)想到需要查看用戶都是訪問(wèn)的那些頁(yè)面,將配置中的 access_log 打開(kāi),發(fā)現(xiàn)85%以上的訪問(wèn)都是直接訪問(wèn)的資源文件,由此判定,用戶可能使用了多線程的下載工具,或者這些資源遭受了盜鏈。

6、找到了問(wèn)題所在,進(jìn)行解決也就比較好辦了。想到了兩個(gè)方法:

A、對(duì)單個(gè)IP進(jìn)行連接的線程限制,不允許多線程連接資源。
對(duì)于IP限制,我采用了 mod_limitipconn 這個(gè)模塊。這個(gè)模塊的好處是比較簡(jiǎn)單,缺點(diǎn)是不能夠針對(duì)單獨(dú)的文件夾或者文件進(jìn)行設(shè)置,而且不支持虛擬主機(jī)。
在 apache 中安裝了這個(gè)模塊后,在配置文件中添加如下幾段就可以生效了:
ExtendedStatus On
< IfModule mod_limitipconn.c >
< Location / >   # 所有虛擬主機(jī)的/目錄
MaxConnPerIP 3 # 每IP只允許3個(gè)并發(fā)連接
NoIPLimit image/*  # 對(duì)圖片不做IP限制
< /Location >
< Location /mp3 >  # 所有主機(jī)的/mp3目錄
MaxConnPerIP 1 # 每IP只允許一個(gè)連接請(qǐng)求
OnlyIPLimit audio/mpeg video# 該限制只對(duì)視頻和音頻格式的文件
< /Location >
< /IfModule >

B、添加URL重寫,防止盜鏈。
防止盜鏈,一個(gè)重要的方法就是判斷請(qǐng)求的 refer,但是如果使用一些瀏覽器發(fā)出請(qǐng)求的時(shí)候?qū)?refer 去掉,或者偽裝,這個(gè)辦法就無(wú)能為力了。但是貌似還有更高級(jí)的方法,還是可以實(shí)現(xiàn)這個(gè)功能。
安裝apache的 mod_rewrite 模塊后,在apache配置文件中添加
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://abc.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/about/nolink.png [R,NC]
這樣盜鏈的請(qǐng)求會(huì)被重定向到一個(gè)錯(cuò)誤頁(yè)面,從而減少下載帶給服務(wù)器的壓力。

學(xué)習(xí)中不怕遇到困難,要敢于解決困難,你才能成熟,也能學(xué)到知識(shí)。你從本文學(xué)到了Linux Apache的知識(shí)了么?

【編輯推薦】

  1. 學(xué)習(xí)手冊(cè):SUSE Linux安裝ADSL上網(wǎng)
  2. 詳解Open SUSE安裝OpenFOAM的方法
  3. 怎樣用Open Suse打印機(jī)共享設(shè)置
  4. 操作筆記:SUSE FAQ修改XWindows分辨率
  5. 解決Suse中文編碼問(wèn)題知識(shí)
責(zé)任編輯:小霞 來(lái)源: e897.com
相關(guān)推薦

2018-10-08 09:29:19

網(wǎng)站訪問(wèn)Nginx

2018-04-10 10:32:07

NginxApache服務(wù)器

2009-04-21 09:58:00

2013-01-22 11:15:40

GitHub

2009-10-27 17:28:05

linux系統(tǒng)中配置A

2011-07-22 10:46:38

2009-12-10 16:26:49

GNULinux

2017-02-12 22:29:59

2009-12-18 16:38:14

ADSL上網(wǎng)斷線

2012-05-23 09:46:27

Linux

2009-05-25 13:50:28

Linux桌面走俏

2021-06-11 07:04:02

加密漏洞勒索軟件

2016-03-28 09:39:54

2012-02-13 09:52:00

Linux企業(yè)

2009-12-04 09:46:02

Linux操作系統(tǒng)

2021-09-02 09:48:26

Linux 5.15服務(wù)器內(nèi)核過(guò)慢

2009-11-17 10:39:11

聯(lián)想LenovoLinux桌面

2012-02-13 10:07:52

Linux服務(wù)器

2010-05-28 11:33:44

SVN代碼庫(kù)

2009-11-12 13:22:19

路由器市場(chǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)