1. 程式人生 > >【優化】--Squid優化彙總

【優化】--Squid優化彙總

###############################################################################

優化針對實際業務,並不針對硬體環境或者簡單的配置檔案!

優化的目標是增強效能、增強安全性、增強魯棒性、充分利用硬體資源、降低成本。

優化的目的是在提高業務處理能力的基礎上充分發揮硬體的效能,兩者相輔相成。

優化的意義在於節省運營成本。

優化成功與否的關鍵是運營成本是否得到降低。

###############################################################################

./configure 指令碼有大量的不同選項,它們以-開始。當你敲入./configure --help 時,能看到選項的完整列表。一些選項對所有configure指令碼是通用的,還有一些是squid 專有的。下面是你可能用得到的標準選項:

--perfix=PREFIX

如前面描述的一樣,這裡設定安裝目錄。安裝目錄是所有可執行檔案,日誌,和配置檔案的預設目錄。在整本書中,$prefix 指你選擇的安裝目錄。

--localstatedir=DIR

該選項允許你改變var 目錄的安裝位置。預設是$prefix/var,但也許你想改變它,以使squid 的磁碟快取和日誌檔案被儲存在別的地方。

--sysconfdir=DIR

該選項允許你改變etc 目錄的位置。預設的是$prefix/etc。假如你想使用/usr 作為安裝位置,你也許該配置--sysconfdir為/etc.

以下是squid 的專有./configure選項:

--enable-dlmalloc[=LIB]

在一些系統上,內建的記憶體分配機制(malloc)在使用squid 時表現不盡人意。使用--enable-dlmalloc 選項將squid 原始碼包中的dlmalloc包編譯和連結進來。假如你的系統中已安裝dlmalloc,你能使用=LIB 引數指定庫的路徑。請見http://g.oswego.edu/dl/html/malloc.html更多關於dlmalloc 的資訊。

--enable-gnuregex

在訪問控制列表和其他配置指令裡,squid 使用正則表示式作為匹配機制。GNU 的正則表示式庫包含在squid 的原始碼包裡;它可以在沒有內建正則表示式的作業系統中使用。./configure指令碼偵察你係統中的正則表示式庫,假如必要,它可以啟用使用GNU正則表示式。如果因為某些理由,你想強制使用GNU正則表示式,你可以將這個選項加到./configure命令後。

--enable-carp

Cache陣列路由協議(CARP)用來轉發丟失的cache到父cache的陣列或cluster。在10.9章有更多關於CARP的細節。

--enable-async-io[=N_THREADS]

同步I/O 是squid 技術之一,用以提升儲存效能。aufs 模組使用大量的執行緒來執行磁碟I/O 操作。該程式碼僅僅工作在linux 和solaris 系統中。=N_THREADS 引數改變squid 使用的執行緒數量。aufs 和同步I/O 在8.4 章中被討論。

請注意--enable-async-io 是開啟其他三個./configure 選項的快捷方式,它等同於:

--with-aufs-threads=N_THREADS

--with-pthreads

--enable-storeio=ufs,aufs

--with-pthreads

該選項導致編譯過程連結到你係統中的P 執行緒庫。aufs 儲存模組是squid 中唯一需要使用執行緒的部分。通常來說,如果你使用--enable-saync-io 選項,那麼不必再單獨指定該選項,因為它被自動激活了。

--enable-storeio=LIST

Squid 支援大量的不同儲存模組。通過使用該選項,你告訴squid 編譯時使用哪個模組。在squid-2.5 中,支援ufs,aufs,diskd,和null 模組。通過查詢src/fs 中的目錄,你能得到一個模

塊列表。

LIST 是一個以逗號分隔的模組列表,例如:

%./configure --enable-storeio=afus,diskd,ufs

ufs 模組是預設的,看起來問題最少。不幸的是,它效能有限。其他模組可能在某些作業系統中不必編譯。關於squid 儲存模組的完整描述,請見第8章。

--with-aufs-threads=N_THREADS

指定aufs 儲存機制使用的執行緒數量(見8.4章)。squid 預設根據快取目錄的數量,自動計算需要使用多少執行緒。

--enable-heap-replacement

該選項不再使用,但被保留用於向後相容性。你該使用--enable-removal-policies 來代替。

--enable-removal-policies=LIST

排除策略是squid 需要騰出空間給新的cache目標時,用以排除舊目標的機制。squid-2.5支援3個排除策略:最少近期使用(LRU),貪婪對偶大小(GDS),最少經常使用(LFU)。

然而,因為一些理由,./configure 選項使指定的替代策略和需要執行它們的基本資料結構之間的差別模糊化。LRU是預設的,它以雙鏈表資料結構執行。GDS和LFU使用堆疊的資料結構。

為了使用GDS 或LFU 策略,你指定:

%./configure --enable-removal-policies=heap

然後你在squid 的配置檔案裡選擇使用GDS或LFU。假如你想重新使用LRU,那麼指定:

%./configure --enable-removal-policies=heap,lru

--enable-icmp

squid 能利用ICMP訊息來確定迴環時間尺寸,非常象ping程式。你能使用該選項來啟用這些功能。

--enable-delay-pools

延時池是squid 用於傳輸形狀或頻寬限制的技術。該池由大量的客戶端IP 地址組成。當來自這些客戶端的請求處於cache 丟失狀態,他們的響應可能被人工延遲。關於延時池的更多細節請見附錄C。

--enable-useragent-log

該選項啟用來自客戶請求的HTTP 使用者代理頭的日誌。

--enable-referer-log

該選項啟用來自客戶請求的HTTP referer 日誌。

--disable-wccp

Web cache 協調協議(WCCP)是CISCO 的專有協議,用於阻止或分發HTTP請求到一個或多個caches。WCCP預設被啟用,假如你願意,可以使用該選項來禁止該功能。

--enable-snmp

簡單網路管理協議(SNMP)是監視網路裝置和伺服器的流行方法。該選項導致編譯過程去編譯所有的SNMP相關的程式碼,包括一個裁切版本的CMU SNMP庫。

--enable-cachemgr-hostname[=hostname]

cachemgr 是一個CGI程式,你能使用它來管理查詢squid。預設cachemgr的hostname值是空的,但你能使用該選項來指定一個預設值。例如:

% ./configure--enable-cachemgr-hostname=mycache.myorg.net

--enable-arp-acl

squid 在一些作業系統中支援ARP,或者以太地址訪問控制列表。該程式碼使用非標準的函式介面,來執行ARP訪問控制列表,所以它預設被禁止。假如你在linux或solaris上使用squid,你可能用的上這個功能。

--enable-htcp

HTCP 是超文字快取協議--類似於ICP的內部快取協議。

--enable-ssl

使用該選項賦予squid 終止SSL/TLS 連線的能力。注意這僅僅工作在web加速器中用以加速請求。

--with-openssl[=DIR]

假如必要,你使用該選項來告訴squid到哪裡找到OpenSSL庫或標頭檔案。假如它們不在預設位置,在該選項後指定它們的父路徑。例如:

%./configure --enable-ssl --with-ssl=/opt/foo/openssl

在這個例子中,你的編譯器將在/opt/foo/openssl/include目錄中找標頭檔案, 在/opt/foo/openssl/lib 中找庫檔案。

--enable-cache-digests

Cache 消化是ICP 的另一個替代,但有著截然不同的特性。

--enable-err-languages="lang1lang2 ..."

squid支援定製錯誤訊息,錯誤訊息可以用多種語言報告。該選項指定複製到安裝目錄($prefix/share/errors)的語言。假如你不使用該選項,所有可用語言被安裝。想知道何種語言可用,請見原始碼包裡errors目錄下的目錄列表。如下顯示如何啟用多種語言:

%./configure --enable-err-languages="Dutch German French" ...

--enable-default-err-language=lang

該選項設定error_directory 指令的預設值。例如,假如你想使用荷蘭語,你能這樣指定:

%./configure --enable-default-err-language=Dutch

你也能在squid.conf 裡指定error_directory 指令,在附錄A 中有描述。假如你忽略該選項,英語是預設錯誤語言。

--with-coss-membuf-size=N

迴圈目錄儲存系統(coss)是squid 的試驗性儲存機制。該選項設定coss 快取目錄的記憶體緩衝大小。注意為了使用coss,你必須在--enable-storeio 選項裡指定儲存型別。

該引數以位元組形式賦值,預設是1048576 位元組或1M。你能指定2M 緩衝如下:

%./configure --with-coss-membuf-size=2097152

--enable-poll

unix 提供兩個相似的函式用以在I/O事件裡掃描開放檔案描述符:select() 和poll()。./configure 指令碼通常能非常好的計算出何時使用poll()來代替select().假如你想強制使用poll(),那麼指定該選項。

--desable-poll

類似的,如果不使用poll(),那麼指定該選項。

--disable-http-violations

squid 預設可以被配置成違背HTTP協議規範。你能使用該選項來刪除違背HTTP協議的程式碼。

--enable-ipf-transparent

在第9章中,我將描述如何配置squid來攔截快取。一些作業系統使用IP Filter包來協助攔截快取。在這些環境下你應該使用該./configure 選項。如果你使用了該選項,但是編譯器提示src/client_side.c檔案出錯,那是因為IP Filter包沒有或沒有正確的安裝在你的系統中。

--enable-pf-transparent

你可能需要指定該選項,使用PF包過濾器在作業系統中攔截HTTP。PF是OpenBSD的標準包過濾器,也可能被髮布到其他系統中。假如你使用該選項,但是編譯器提示src/client_side.c 檔案出錯,那是因為PF 沒有實際安裝到你的系統中。

--enable-linux-netfilter

Netfilter 是linux 2.4 系列核心的包過濾器名字。假如你想在linux2.4或以後的版本中使用HTTP攔截功能,那麼啟用該選項。

--disable-ident-lookups

ident是一個簡單的協議,允許伺服器利用客戶端的特殊TCP連線來發現使用者名稱。假如你使用該選項,編譯器將把執行這些查詢的程式碼排除出去。即使你在編譯時保留了這些程式碼,除非你在squid.conf檔案裡指定,squid不會執行ident查詢。

--disable-internal-dns

squid 原始碼包含兩個不同的DNS解決方案,叫做“內部的”和“外部的”。內部查詢是預設的,但某些人可能要使用外部技術。該選項禁止內部功能,轉向使用舊的方式。

內部查詢使用squid自己的DNS協議執行工具。也就是說,squid產生未完成的DNS查詢並且將它們傳送到一個解析器。假如超時,它重新發送請求,你能指定任意數量的解析器。該工具的有利處之一是,squid獲得準確無誤的DNS響應的TTLs。

外部查詢利用C庫的gethostbyname()和gethostbyaddr()函式。squid使用一個外部程序池來製造並行查詢。使用外部DNS 解析的主要弊端是你需要更多的輔助程序,增加squid的負載。另一個麻煩是C 庫函式不在響應裡傳輸TTLs,這樣squid使用postive_dns_ttl 指令提供的一個常量值。

--enable-truncate

truncate()系統呼叫是unlink()的替代品。unlink()完全刪除cache 檔案,truncate()將檔案大小設為零。這樣做釋放了分配給該檔案的磁碟空間,但留下適當的目錄介面。該選項存在的理由是,某些人相信(或希望)truncate()比unlink()效能表現更好。然而,壓力測試顯示兩者有很少的或根本沒有區別。

--disable-hostname-checks

預設的,squid要求URL主機名在一定程度上遵守古老的RFC 1034 規範:

標籤必須遵循下列ARPANET 主機名規則。它們必須以字母開始,以字母或數字結尾,僅僅包含字母,數字和下劃線。

這裡字母意味著ASCII字元,從A到Z。既然國際域名日益流行,你可能希望使用該選項來移除限制。

--enable-underscores

該選項控制squid針對主機名裡下劃線的行為。通用的標準是主機名裡不包含下劃線字元,儘管有些人不贊成這點。squid預設會對URL主機名裡帶下劃線的請求產生一條錯誤訊息。你能使用該選項,讓squid信任它們,把它們當作合法的。然而,你的DNS解析器也許強迫使用非下劃線請求,並且對帶下劃線的主機名解析失敗。

--enable-auth[=LIST]

該選項控制在squid的二進位制檔案裡支援哪種驗證機制。你能選擇下列機制的任意組合:

basic,digest,ntlm。假如你忽略該選項,squid僅僅支援basic 驗證。假如你使用不帶引數的--enable-auth選項,編譯程序將增加對所有驗證機制的支援。你可以使用以逗號分隔的驗證機制列表:

% ./configure--enable-auth=digest,ntlm

--enable-auth-helpers=LIST

這個舊選項現在已捨棄了,但為了保持向後相容性仍保留著。你可以使用--enable-basic-auth-helperes=LIST 來代替。

--enable-basic-auth-helpers=LIST

使用該選項,你能將helpers/basic_auth 目錄的一個或多個HTTP Basic驗證輔助程式編譯進來。請見12.2章找到它們的名字和描述。

--enable-ntlm-auth-helpers=LIST

使用該選項,你能將helpers/ntlm_auth 目錄的一個或多個HTTP NTLM驗證輔助程式編譯進來。請見12.4章找到它們的名字和描述。

--enable-digest-auth-modules=LIST

使用該選項,你能將helpers/digest_auth 目錄的一個或多個HTTP Digest驗證輔助程式編譯進來。請見12.3章找到它們的名字和描述。

--enable-external-acl-helpers=LIST

使用該選項,你能編譯一個或多個擴充套件ACL輔助程式,這些在12.5章中討論。例如:

%./configure --enable-external-acl-helpers=ip_user,ldap_group

--disable-unlinkd

unlinkd 是另一個squid的外部輔助程序。它的基本工作是對cache檔案執行unlink()或truncate()系統呼叫。通過在外部程序裡執行檔案刪除工作,能給squid帶來明顯的效能提升。使用該選項來禁止外部unlink程序功能。

--enable-stacktrace

某些系統支援在程式崩潰時,自動產生資料追蹤。當你啟用該功能後,如果squid崩潰,資料追蹤資訊被寫到cache.log檔案。這些資訊對開發和程式bug除錯有用。

--enable-x-accelerator-vary

該高階功能可能在squid被配置成加速器時使用。它建議squid在響應請求時,從後臺原始伺服器中尋找X-Accelerator-Vary頭。

配置優化

1.     修改描述符引數值

檔案描述符用來限制一個程式能同時開啟的檔案數目,預設是1024。也就是說,如果不修改檔案描述符,那麼一個程式只能同時開啟1024個檔案,而Squid會同時開啟成千上萬個檔案,所以遠遠是不夠的,為了保證最高的效率和響應速度,要更改檔案描述符的大小.

兩種情況:

a.使用者每次訪問squid,squid會按照需要開啟檔案,然後讀取檔案內容再返回給使用者。

b.squid預先開啟訪問頻率高的檔案,使用者訪問squid,squid直接把內容返回給使用者。相對來說,後面的方法可以對使用者的請求進行更加快的反應。

首先修改以下兩個檔案。

/usr/include/bits/typesizes.h

/usr/include/linux/posix_types.h

vi開啟上面的檔案查詢

#define __FD_SETSIZE 1024

1024改為65536,然後儲存,這是Linux能接受的最大數值。

剛才編輯的這兩個檔案是C/C++程式裡面的標頭檔案,編譯squid的時候會被自動引用。除了這兩個檔案以外,我們還需要對當前環境進行設定。也就是你用ssh登入到系統時的一些設定。每個登入程序都可以進行單獨的設定,當關閉目前登入回話,環境變數的設定就失效了.

ULIMIT

ulimit用來設定當前環境的一些資源限制。這個命令是對環境進行設定,所以退出當前登入程序後命令將會失效。

我們輸入下面的命令

[[email protected] soft]#ulimit -Hs 65536

[[email protected] soft]#ulimit -n 65536

也可以永久修改這些限制,開機自動生效,配置如下:

vi /etc/security/limits.conf,新增以下內容

*                soft   nofile          65536

*                hard   nofile          65536

H引數是硬性限制,s是堆疊上限,n是檔案描述符上限。

註釋:

ulimit 引數介紹:

-H 設定硬體資源限制.

-S 設定軟體資源限制.

-a 顯示當前所有的資源限制.

-c size:設定core檔案的最大值.單位:blocks

-d size:設定資料段的最大值.單位:kbytes

-f size:設定建立檔案的最大值.單位:blocks

-l size:設定在記憶體中鎖定程序的最大值.單位:kbytes

-m size:設定可以使用的常駐記憶體的最大值.單位:kbytes

-n size:設定核心可以同時開啟的檔案描述符的最大值.單位:n

-p size:設定管道緩衝區的最大值.單位:kbytes

-s size:設定堆疊的最大值.單位:kbytes

-t size:設定CPU使用時間的最大上限.單位:seconds

-v size:設定虛擬記憶體的最大值.單位:kbytes

2. squid配置優化

配置/etc/squid/squid.conf

配置acl訪問控制列表

對代理客戶端進行限制,並給予相關的許可權。

例如以下關於一個對於域名的訪問控制,拒絕以下域名訪問,acl的訪問控制裡邊如下:

acl denysite dstdomain.google.com

acl denysite dstdomain.google.cn

acl denysite dstdomain.google.hk

acl denysite dstdomain.baidu.com

acl denysite dstdomain.5566.org

acl denysite dstdomain.hao123.com

acl denysite dstdomain.265.com

acl denysite dstdomain.2345.com

acl denysite dstdomain.1188.com

拒絕除了上面的域名的訪問squid:(這樣就可以控制一個公司內部的員工的訪問一些特殊的網站)

http_access allow !denysite

重啟服務:

service squid restart

配置客戶端:

firefox中設定相關的代理上網配置(詳見相關內容,這裡使用的埠為預設埠3128)

squid快取方面的設定

        step 1:磁碟分割槽,為squid準備相關的儲存。

        配置squid.conf檔案,為squid配置快取:

        cache_dir aufs /usr/squid/cache1 1000016 256

        cache_dir aufs /usr/squid/cache2 1000016 256

        cache_dir aufs /usr/squid/cache3 1000016 256

        cache_dir aufs /usr/squid/cache4 1000016 256

squid的cache_mem的配置

# 與記憶體有關的設定有關∶記憶體為2G,這裡我給它為600M,效能方面的話還是需要自己在應用的過程當中不斷地調整。

cache_mem                       600 MB

# 與設定快取容量有關(注∶下列的 90 與 95 是百分比 )

# 如果您的cache_dir 容量很大時,可以考慮將 4096 改成 32768 KB

# 這裡如果使用代理的客戶端下載相對比較頻繁的時候需要調整快取容量的百分比(為了防止下載突然把整個squid塞滿)

cache_swap_low                  70

cache_swap_high                 85

maximum_object_size             32768 KB

# 與記憶體儲存資料有關的設定

maximum_object_size_in_memory   8 KB

# 我們經由 dns 正反解以及 IP 的結果,記錄在暫存區啊!

ipcache_size                    1024

ipcache_low                     90

ipcache_high                    95

fqdncache_size                  1024

設定透明代理,使使用者不用設定代理服務來進行上網:

http_port 3128 transparent

優化指南

瞭解Squid加速原理

一般說來,網站用 squid 加速,目的有二

1: squid 本身具有快取功能,可以將webserver輸出的內容快取起來,在快取沒有過期之前來的訪問,都直接用快取裡面的內容,這樣可以有效減少

webserver 機器上面的請求數量。這是squid 的主要功用。

2: 網路慢的使用者會長時間佔用webserver 的 TCP 連線,webserver

對每個連線佔用的資源比較大,如果長時間不能釋放出來服務其他請求,效能會有比較大的影響。前面放一個 squid, webserver就可以迅速處理完邏輯以後,把資料快速傳送給squid, 然後去處理別的邏輯,而 squid 每個 TCP連線佔用的資源很少,不用擔心佔用太多資源。這個用途也叫做連線管理,有一些網路裝置也可以做這個事情,價格都很貴。

優化策略

A: 使用 Expires header 來控制快取

squid在快取webserver內容的時候,需要後端webserver輸出一些控制資訊告訴他頁面是不是可以被快取,以及可以快取多久。否則squid 是不會自作主張給你快取內容的。一個頁面到底能不能快取,只有開發網站的人才知道,因此開發人員有責任在動態頁面裡面輸出Expires 和 Cache-Control header。

簡單舉一個 php 的例子以說明這兩個header的值是什麼含義,其中$expiretime 的單位是秒。

header("Expires: " . gmt_date_format(time()+$expiretime));

header("Cache-Control: max-age=" ."$expiretime");

對於靜態檔案,有兩種方式來讓 squid 自動給靜態檔案快取,一種是使用 apache 的 mod_expires,可以針對路徑或者針對檔案型別/副檔名來自動輸出 cache 頭。詳細的請參考 mod_expires 的說明。另一種是用 squid 的refresh_pattern 來指定。

詳細的還是請參考squid的配置檔案。

一般來說,如果後端不是配置很麻煩,建議還是在後端做,前端的配置修改大多數都是違背http協議的,如果出現問題,也比較難排查。

B 根據 squid 訪問的模式,進行業務拆分

進行了 Expires Header 的處理以後,squid就真正可以起到加速的作用了,你可能也能感覺到,網站的訪問速度明顯加快。

但是不要滿足於這點成績,檢視 squid 的 snmp 統計圖,通常hit ratio 並不會太高,有 50% 就了不起了。這就是我們需要進一步優化的,我們的目標是讓大部分 squid 都達到 9X%的命中率。

為什麼 squid 命中這麼低呢,這大概有兩種原因。大多數的網站都是有一些頁面不能夠被快取的,例如登入頁面。這些頁面請求也從squid 走,成為分母的一部分,直接就降低了命中率,我們首先可以做的事情是,把這些不能夠快取的頁面請求,拆分到單獨一個 squid上面,或者訪問量不大的話,乾脆把 apache 暴露出來。這樣能夠快取的那個 squid 命中率馬上上升一截。

有人可能會說,把不能快取的頁面分拆開去,就光為了讓能快取的那個數字好看,這不是掩耳盜鈴麼?其實這麼做是有意義的,首先就是去掉了不能快取頁面的干擾,使得我們進一步優化squid 的依據更加準確。其次是不可快取請求和可快取請求之間的重要性通常是有差距的,分拆了以後,它們之間不容易互相搶佔資源,不會因為下載圖片的連線太多把squid 佔滿,影響更重要的登入請求。第三就是可快取內容通常是圖片等頁面元素,瀏覽器在 load它們的時候,對每個站點的併發連線會有控制,如果分開成不同的IP,可以多一些請求同時執行。提高少許顯示速度。

其實觀察 sohu,sina 之類的頁面,你會發現它們的頁面也是分拆的,可以看到頁面裡面的圖片都是指向images.sohu.com 之類的地址,雖然它們可能和其他頁面一樣後臺都指向同一個 apache。

這樣做完,快取命中率大概能上升到 70%-80% 了,運氣好的時候完全可以上 90%。

另一種導致 squid命中低的原因和這個比較類似,同樣都是可快取的內容,有的可能是軟體下載站上面的大檔案,有的是新聞站點上面的小圖片,如果同一個 squid

對這樣差別巨大的檔案加速的話,會嚴重干擾 squid 的快取策略,兩者不能兼顧,要不就是大檔案佔據了 cache ,把小檔案都擠出了cache, 要不就是小檔案特別多,大檔案無法進入 cache, 導致大檔案經常 miss。這個比不能快取的頁面還要噁心,因此即使在伺服器資源有限的情況下,也要優先拆分這兩型別訪問。一般來說,檔案大小分界線定在 1M左右就可以了,如果是有軟體下載這樣特別大的檔案,可以在 4M - 10M 左右再拆分一次。對於不同訪問型別的 squid,其系統優化引數也會有所不同,這個我們後面還會講到。

只要悉心按照訪問模式來拆分業務,大部分起快取作用的 squid 都可以達到很高的命中率,至少都可以到達 9X%。

C 根據不同的需求,調整引數優化快取

完成 A 和 B 兩步優化以後, squid 的命中率經常可以達到 9x%, 可以說我們已經給 squid創造了非常優秀的外部環境,下面我們就要從 squid 本身入手,通過調整它的快取引數和快取策略,甚至系統的引數,來讓 squid發揮出更好的效能。

在 B 步驟中,我們把 squid 劃分成了三種用途,快取大檔案,快取小檔案,不快取檔案,這其中最後一種用途情況下面 squid

不起到快取效果,只用來做連線管理,因此我們把它放到後面的連線管理裡面敘述,這裡只討論和快取相關的 squid 引數。

squid 有記憶體快取和磁碟快取兩級快取, 通常來說, 只要是專門給 squid 用的機器, 記憶體快取都建議開得比較大,大記憶體快取總是有好處的嘛, 但是注意不要使得系統開始吃 swap ,像Linux這樣一開始吃 swap 效能就下降比較嚴重的系統尤其要注意.這個程度需要自己試驗確定.通常 1G 記憶體的Linux機器用來跑 squid ,記憶體快取可以開到 512M.有些libc比較差的平臺, 例如比較老的 freebsd 系統, 其 malloc 函式的質量不高,可能會造成比較多的記憶體碎片,導致squid 執行一段時間以後分配不出來記憶體掛掉. 這時候推薦在編譯時候使用 dlmalloc package. 即使如此, 仍然要再縮小

squid 的記憶體快取,以防不幸發生.

磁碟快取的情況比較複雜, squid 有 ufs, aufs, coss, diskd, null 五種儲存後端, 其中 ufs,aufs,diskd 都是在檔案系統上面儲存很多小檔案, coss 是 squid自己實現了一個簡單的檔案系統,可以使用一個大檔案或者一個磁碟裝置來儲存. null 則是給不想要磁碟快取的情況準備的. coss看起來好像比較拽, 但是以前試驗並不足夠穩定,因此並不推薦使用. 剩下的三種儲存方式,具體選擇哪種需要根據作業系統的特性來進行.ufs 是最傳統的儲存方式, 我們知道, squid 是一個單程序的程式, 它使用 ufs 儲存後端時, 直接在程序裡面讀寫檔案.這是一種很簡單的方式, 缺點是當讀寫磁碟被阻塞的時候, squid 不能夠處理請求, 會造成服務質量波動比較大. 因此出現了 aufs 和diskd 兩種儲存後端, 原理都是 squid 主服務迴圈不負責讀寫檔案,而是通過訊息佇列或者tcp/pipe連線將資料傳送給其他的執行緒(aufs)/程序(diskd), 然後其他執行緒/程序進行讀寫.

很顯然,這兩種儲存方式有一定的通訊開銷, 因此不一定就比 ufs 好, 需要具體問題具體分析前面說到, ufs/aufs/diskd都是在檔案系統上面儲存很多小檔案,因此檔案系統本身的特性嚴重影響了squid快取的效能,對於Linux ,強烈推薦用 reiserfs 等適合處理小檔案的檔案系統, bsd 則至少要開啟 softupdate, 以及 dirhash等一切對很多小檔案有好處的選項. 在比較新的系統上面, reiserfs 等檔案系統的效能已經足夠優越, 通常 ufs 就已經可以應付需要.對於一些老系統,使用 aufs 或者 diskd 是比較好的選擇,如果系統的執行緒庫比較好(如Linux,Solaris),那麼使用aufs, 否則 diskd.也有一些例外情況, 比如多 cpu 的 Linux 2.6 系統, 執行緒庫很優秀, 雖然 ufs 本身已經比較快了,但是 squid單程序無法利用另外的 cpu , 不如使用 aufs , 讓另外的 cpu 也可以起到一些作用, aufs在編譯的時候可以選擇使用幾個讀寫執行緒. 這個個人覺得稍微超過 cpu 個數就可以了.但是並沒有實際測試過.磁碟快取開多大? 這個問題沒有固定答案. 需要經過試驗來確定, 一般來說開大一些沒有太大問題. 只要你的硬碟足夠


參考列表


相關推薦

優化--Squid優化彙總

############################################################################### 優化針對實際業務,並不針對硬體環境或者簡單的配置檔案! 優化的目標是增強效能、增強安全性、增強魯棒性、充分利

斜率優化DP和四邊形不等式優化DP整理

dex add ive mat 整理 off code 斜率dp 好的 當dp的狀態轉移方程dp[i]的狀態i需要從前面(0~i-1)個狀態找出最優子決策做轉移時 我們常常需要雙重循環 (一重循環跑狀態 i,一重循環跑 i 的所有子狀態)這樣的時間復雜度是O(N^2)而 斜

mysql優化語句優化

src inf lai 是否 color clas plain sel 連接 1.int型子查詢陷阱 題: 在ecshop商城表中,查詢6號欄目的商品, (註,6號是一個大欄目)   最直觀的: mysql> select goods_id,

20180329MySQL優化SQL一則以及思考

SQL優化 執行計劃 分區 線網環境 MySQL 5.6.21-log MySQL Community Server innodb_buffer_pool_size 1G 關閉QC 表存在分區 表結構和待優化的SQL mysql> show create table articles

Appium 優化

Appium 開源分享優化版 之前分享過PageObject+Python+Appium 本版本是對上次版本較大改版,主要解決了: 失敗重連一次(預設一次)可配置多次 基於appium1.7.1 uiautomator2 解決uiautomator2

Hibernate持久層框架使用效能優化與快取

一級快取: 在hibernate中一級快取是預設開啟的,它與session相關,例如當你對資料庫中的資料進行查詢後,它會將查詢到的物件儲存到記憶體中,再次查詢時便直接從記憶體中讀取,從記憶體中讀取的速度顯然比從資料庫中讀取資料要快得多。 為了證明,可以寫一個測試類對快取進行測試 publ

TensorFlow原始碼系列優化演算法:constant folding和CSE

TensorFlow中使用的圖優化演算法有:constant folding 和CSE(common-subexpression elimination) 【演算法一】constant folding 該演算法,是將graph中常量的計算合併起來。例如: C = A+B,其中A和B都是con

Android效能優化:電量消耗統計

電量的消耗和使用對於移動裝置非常重要,一項調查問卷顯示,電池的容量和壽命是手機最重要的營銷點:所謂“the one thing that you can't do without”。 硬體 從硬體的角度看,Android電量的消耗主要來自螢幕,CPU,網路裝置和各樣的感測器:指紋,亮度

mysqlsql優化問題

Mysql sql優化 一 定位慢查詢 1.1 查詢mysql的基本狀態 查詢資料庫的狀態 SHOW STATUS 啟動時間 SHOW STATUS LIKE 'uptime' 基本的資料庫操作次數 SHOW STATUS LIKE 'C

原始碼優化問題的不精確逼近梯度演算法的收斂速度分析

凸優化問題的不精確逼近梯度演算法的收斂速度分析 我們考慮利用逼近梯度法優化光滑凸函式和非光滑凸函式之和的問題,其中在光滑項的梯度或非光滑項的逼近運算元的計算中存在誤差。 We consider the problem of optimizing thesum

筆記斜率優化dp

BZOJ 1096 倉庫建設 /* LittleFall : Hello! */ #include <bits/stdc++.h> typedef long long ll; using n

MySQL優化MySQL 優化筆記整理-持續更新

1.order by 查詢效率低下,導致查詢語句十分緩慢。 a.order by 儘量+索引欄位 b.order by 索引失效,一般是由於select 的欄位中存在非索引欄位。 c.複雜的聚合查詢語句,儘量拆分成簡單的單查詢語句。   2.limit 用在in或者其他

MySqlSql優化(二)——影響效能的因素

一、前言 在上一篇部落格中,小編向大家簡單介紹了一下Mysql執行的流程:客戶端傳送一條查詢給資料庫伺服器,伺服器先進行許可權檢測,然後在快取中查詢,如果命中了快取,就立即返回儲存在快取中的結果,如果沒有,就再經過解析器解析,前處理器進行預處理,優化器優化,得到

資料庫索引優化策略

                                             索引優化策略 關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一、為什麼要建立索引? 一句話,為了加快查詢效率。注意這裡的“查詢”,而不是增

mysql知識盤點_SQL優化

簡單一點,上來就說說資料庫優化。本文都是基於mysql資料庫的優化建議。分為四個方面:索引優化、sql優化、建表優化和引數優化。 索引優化 首先介紹下索引。索引是資料庫中一個排序的資料結構,用於

docker效能優化-redis之主從複製全量複製和部分複製

概念: 全量複製:用於初次複製或其它無法進行部分複製的情況,將主節點中的所有資料都發送給從節點,是一個非常重型的操作,當資料量較大時,會對主從節點和網路造成很大的開銷 部分複製:用於處理在主從複製中因網路閃斷等原因造成的資料丟失場景,當從節點再次連上主節點後,如果條件允許,主節點會補發丟

docker效能優化-redis之主從複製,第一次準備

主從複製說明  面臨問題 在實際的場景當中單一節點的redis容易面臨風險。 比如: 1、機器故障。我們部署到一臺 Redis 伺服器,當發生機器故障時,需要遷移到另外一臺伺服器並且要保證資料是同步的。而資料是最重要的,如果你不在乎,基本上也就不會使用 Redis 了。

MySQL效能優化之 覆蓋索引

mysql中的一種十分高效有用的索引---覆蓋索引。 覆蓋索引用通俗的話講就是在select的時候只用去讀取索引而取得資料,無需進行二次select相關表。這樣的索引的葉子節點上面也包含了他們索引的資料。 select * from table_name; select id,name from table_

Android開發優化之——調優工具:TrackView,Method Profiling

TraceView介面資訊介紹 TraceView介面包括時間面板和方法面板 (1) 時間面板(Timeline Panel) 時間面板展示了每個執行緒的執行情況,其中的[1]main即為ui主執行緒。 移動到某個位置可以檢視該點對應的方法的執行資訊,點選方法面板則會選中相應的方法。 可以左鍵按住不放選中區域

UnityUnity優化總結

優化概括的說可以分為:CPU,GPU,記憶體; 開發上的細節可以分為:資源,引擎,程式碼,著色器; 1.資源方面;         》動態物體;遊戲主角、怪物、NPC等;                    控制面片數量 300 - 2000面片;