183
中電雲集
squid故障匯總
1、COSS will not function without large file support (off_t is 4 bytes long. Please reconsider recompiling squid with –with-large-files
Bungled squid_webcache.conf 。。。。。。。
檢查是否在編譯squid的時候未加入 –with-large-files 選項,如果是,重新加入此選項再編譯一次squid
2、使用coss緩存格式的時候,squid不斷重建cache
可能原因為maxfullbufs值過低,去掉maxfullbufs限製,讓其值為無限
3、日誌中有類似如下的內容:
2007/03/05 14:46:56| Ready to serve requests.
2007/03/05 14:46:59| clientReadRequest: FD 11 (192.168.1.5:34061) Invalid Request
Illegal character in hostname; underscores are not allowed
注釋: 無效的字符串,訪問地址中不允許下劃線。
解決辦法 :
squid 2.5 中,編譯的時候加入如下參數
–enable-underscore
允許解析的URL中出現下劃線,因為默認squid會認為帶下劃線的URL地址是非法的,並拒絕訪問該地址。
對於 2.6 版本,編譯時沒有這個參數,這個參數出現在 squid.conf 的配置文檔裏,說明是這樣的:
allow_underscore New option to allow _ in hostnames, replacing the similar build time configure option in 2.5 and earlier.
具體的在 squid.conf 中的參數,可以在配置文檔裏搜索一下 allow_underscore,看一下配置文檔的具體注釋。
4、squid的cache.log日誌中又類似如下的警告:
WARNING: 100 swapin MD5 mismatches
這個錯誤是說squid讀入一個緩存文件的時候,存儲在接口對應的位置的URL不是
squid認為應該存儲在那裏的數據。這可能是swap.state有錯誤或文件指到了磁盤
上錯誤的塊(文件係統有錯誤)。
停止squid應用,刪除swap.state然後啟動squid,讓它通過讀取緩存文件來重建緩存
記錄,如果重建後仍然出現上麵的情況,那應該就是文件係統或磁盤有問題了。
5、日誌中出現下麵警告:
Jun 28 11:14:38 localhost squid[27178]: squidaio_queue_request: Syncing pending I/O operations.. (blocking)
Jun 28 11:14:59 localhost squid[27178]: squidaio_queue_request: Synced
Jun 28 11:14:59 localhost squid[27178]: storeAufsOpenDone: (2) No such file or directory
Jun 28 11:14:59 localhost squid[27178]: /data/squid/cache_webcache1/00/6B/00006B29
Jun 28 11:14:59 localhost squid[27178]: storeAufsOpenDone: (2) No such file or directory
Jun 28 11:14:59 localhost squid[27178]: /data/squid/cache_webcache1/00/DC/0000DC36
Jun 28 11:14:59 localhost squid[27178]: WARNING: 1 swapin MD5 mismatches
Jun 28 11:14:59 localhost squid[27178]: WARNING: Disk space over limit: 18925740 KB > 16777216 KB
Jun 28 11:14:59 localhost squid[27178]: storeAufsOpenDone: (2) No such file or directory
Jun 28 11:14:59 localhost squid[27178]: /data/squid/cache_webcache2/00/92/0000924F
Jun 28 11:14:59 localhost squid[27178]: storeAufsOpenDone: (2) No such file or directory
Jun 28 11:14:59 localhost squid[27178]: /data/squid/cache_webcache1/03/6F/00036FB6
Jun 28 11:14:59 localhost squid[27178]: squidaio_queue_request: Async request queue growing uncontrollably!
解決方法:
檢查配置文件,cache設置為aufs文件係統格式,將此設置改為ufs,重建cache緩存目錄
6、運行reconfigure的時候出現squid: ERROR: no running copy
原因是找不到pid文件,如果不是使用默認的squid.conf作為squid的設置文件,在用squid目錄下sbin/squid進行重新啟動等動作的時候要加上-f的參數製定配置文件,同時檢查pid文件是否存在,有時候可能錯誤地配置了pid文件到不存在的目錄,或者將pid文件配置到了應用沒有權限寫入的目錄,導致沒有創建pid文件,如果pid文件不存在,可以手工創建該pid,然後獲取squid的pid並寫人pid文件。
7、squid在壓力大的情況下響應非常慢
檢查是否文件描述符太小,如果是,調整文件描述符限製,重啟squid,檢查squid運行的文件描述符,如果為調整後的,則在啟動腳本處啟動squid的地方加入調整文件描述符的命令,否則除此外還需先調整文件描述符限製然後重新編譯安裝一次squid
8、緩存效率下降,查看日誌無報錯,netstat -na查看連接有比較多的連接為SYN_RE,且多為同一IP過來的連接
優化TCP網絡
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_synack_retries
echo 1 > /proc/sys/net/ipv4/tcp_syn_retries
9、緩存效率低,網卡輸入輸出流量差距很小。
首先查看係統日誌有無squid的報錯,如果沒有再查看dmesg,看看有無丟包,是否網卡問題,如果沒有再查看網關
使用squid的時候網關問題關係重大,如果網關沒有配置正確,將可能導致用戶訪問不了。
10、日誌報如下錯誤:squid: Could not determine fully qualified hostname. Please set ‘visible_hostname’
檢查/etc/hosts文件、/etc/sysconfig/network文件、和hostname命令結果,看看三者是否對應,如果不對應,需要修改為對應,並且/etc/hosts文件中對應的配置還需要有合法域名格式
/etc/sysconfig/network中的hostname是係統啟動時候加載的hostname值,如果此值與/etc/hosts文件中的值不對應並且squid中沒有設置visible_hostname選項的話,會導致係統重啟後squid不能正常啟動。
11、日誌大量報如下錯誤:
Apr 29 08:28:56 localhost squid[13851]: httpReadReply: Excess data from “HEAD https://192.168.230.1/”
Apr 29 08:28:56 localhost squid[13851]: httpReadReply: Excess data from “HEAD https://192.168.230.1/”
這表明服務器返回一個超過squid聲明的響應對象最大值的返回值。
它違反了HTTP協議並導致服務器返回被截斷。
12.runcache發現頻繁重啟後停止服務:
:./bin/RunCache Running: squid -sY >> /usr/local/squid//var/squid.out 2>&1
./bin/RunCache: line 35: 20000 File size limit exceededsquid -NsY $conf >>$logdir/squid.out 2>&1
./bin/RunCache: line 35: 20177 File size limit exceededsquid -NsY $conf >>$logdir/squid.out 2>&1
RunCache: EXITING DUE TO REPEATED, FREQUENT FAILURES
故障原因: log超過了ext3文件係統最大支持容量2G導致,解決辦法:
1)每天輪循一次日誌0 0 * * * /usr/local/squid/sbin/squid -k rotate
轉自:https://hi.baidu.com/ncache/blog/item/661914102839c176cb80c444.html
以下為個人總結
一:報錯信息:
FATAL: Failed to verify one of the swap directories, Check cache.log
for details. Run ’squid -z’ to create swap directories
if needed, or if running Squid for the first time.
Squid Cache (Version 2.6.STABLE18): Terminated abnormally.
未執行squid -z命令需要執行該命令初始化cache目錄,假如想觀察這個過程 squid -zX
Creating Swap Directories
FATAL: Failed to make swap directory /usr/local/squid/var/cache/00:
(13) Permission denied
確認/usr/local/squid/var/cache目錄的所有組成都可被squid.conf給定的用戶ID訪問
二:
WARNING:squidaio_queue_request: WARNING - Queue congestion
IO的隊列滿了, ,重諞一下源代碼,加大IO的隊列或換一種IO方式。
編譯時:–enable-async-io=40 (我的是40,少了)
三:
helperOpenServers: Starting 5 ‘dnsserver’ processes
ipcCreate: fork: (12) Cannot allocate memory
WARNING: Cannot run ‘/opt/squid/libexec/dnsserver’ process.
係統內存被耗光,沒有內存分配給squid的dns進程
四:
FATAL: xcalloc: Unable to allocate 1 blocks of 4108 bytes!
Squid 開啟大內存導致進程內存溢出
五:
cache.log
2009/08/27 20:49:55| HTCP Disabled.
2009/08/27 20:49:55| sendto FD 17: (1) Operation not permitted
2009/08/27 20:49:55| ipcCreate: CHILD: hello write test failed
????
cu的朋友總結是configure時編譯了–enable-icmp參數,去掉即可。
六:文件係統的問題導致squid異常down機?
我有兩台squid做負載,IP分別為1.1,1.2.但最近發現1.2這台squid總異常死掉,並且看日誌也看不出什麼情況,是assertion failed: diskd/store_io_diskd.c:384: “!diskdstate->flags.close_request”
很是鬱悶。。。今天執行ps fax操作時突然發現:
1.2上顯示:
21248 ? Sl 6:06 /opt/squid/sbin/squid -N
21369 ? Ss 0:00 \_ (unlinkd)
21410 ? Ss 0:02 \_ diskd 21757956 21757957 21757958
21653 ? Ss 0:00 \_ (dnsserver)
21654 ? Ss 0:00 \_ (dnsserver)
21655 ? Ss 0:00 \_ (dnsserver)
21410這個進程是什麼東西?
查看另一台1.1:
3067 ? Sl 152:49 /opt/squid/sbin/squid -N
3858 ? Ss 0:00 \_ (unlinkd)
6435 ? Ss 0:06 \_ (dnsserver)
6436 ? Ss 0:04 \_ (dnsserver)
6437 ? Ss 0:03 \_ (dnsserver)
沒有diskd這個東西,所以它沒有頻繁down機。
難道真是這個原因??
在網上查了一些資料,發現這個問題,以下摘自 網絡民工的blog:https://hi.baidu.com/chgel/blog/item/6f22552f3a28fa3d1f3089e0.html
diskd
diskd(disk 守護進程的短稱)類似於aufs,磁盤I/O 被外部進程來執行。不同於aufs 的是,diskd 不使用線程。代替的,它通過消息隊列和共享內存來實現內部進程間通信。
Squid 對每個cache_dir 創建一個diskd 進程。這不同於aufs,aufs 對所有的cache_dir 使用一個大的線程池。對每個I/O 操作, squid 發送消息到相應的diskd 進程。當該操作完成後,diskd 進程返回一個狀態消息給squid。squid和diskd 進程維護隊列裏的消息 的順序。這樣,不必擔心I/O 會無序執行。對讀和寫操作,squid 和diskd 進程使用共享內存區域。兩個進程能對同一內存區域進行讀和寫。例如,當squid 產生讀請求時,它告訴diskd 進程在內存中何處放置數據。diskd 將內存位置傳遞給read()係統調用,並且通過發送隊列消息,通知squid 該過程完成了。然後squid 從共享內存區域訪問最近的可讀數據。diskd 與aufs 本質上都支持squid 的無阻塞磁盤I/O。當diskd 進程在I/O 操作上阻塞時,squid 有空去處理其他任務。在diskd 進程能跟上負載情況下,這點確實工作良好。因為 squid 主進程現在能夠去做更多工作,當然它有可能會加大diskd 的負載。diskd 有兩個功能來幫助解決這個問題。
首先,squid 等待diskd 進程捕獲是否隊列超出了某種極限。默認值是64 個排隊消息。假如diskd 進程獲取的數值遠大於此,squid 會休眠片刻,並等待 diskd完成一些未決操作。這本質上讓squid 進入阻塞I/O 模式。它也讓更多的CPU時間對diskd 進程可用。通過指定cache_dir 行的 Q2 參數的值,你可以配置這個極限值:
cache_dir diskd /var/spool/squid 10240 16 256 Q2=50
第二,假如排隊操作的數量抵達了另一個極限,squid 會停止要求diskd 進程打開文件。這裏的默認值是72 個消息。假如squid 想打開一個磁盤文件讀 或寫,但選中的cache_dir 有太多的未完成操作,那麼打開請求會失敗。當打開文件讀時,會導致cache 丟失。當打開文件寫時,會阻礙squid 存 儲cache 響應。這兩種情況下用戶仍能接受到有效響應。唯一實際的影響是squid 的命中率下降。這個極限用Q1 參數來配置:
cache_dir diskd /var/spool/squid 10240 16 256 Q1=60 Q2=50
注意在某些版本的squid 中,Q1 和Q2 參數混雜在默認的配置文件裏。最佳選擇是,Q1 應該大於Q2。
查看兩台配置的cache_dir,果然發現了這個區別。這樣基本就明白了,應該是文件係統不同的原因,由於diskd進程獲取的數值遠大於64,導致squid休眠。
現在懷疑到是這裏,更改過來之後再觀察情況。
重新查到一些資料,如果要使用diskd文件係統的話,應該做一些內核的調整:
在Linux上配置消息隊列,增加下列行到/etc/sysctl.conf:
kernel.msgmnb=8192
kernel.msgmni=40
kernel.msgmax=8192
kernel.shmall=2097152
kernel.shmmni=32
kernel.shmmax=16777216
以下是對上麵參數的一些解釋:
diskd看起來是可移植的,既然共享內存和消息隊列在現代Unix係統上被廣泛支持。然而,你可能需要調整與這兩者相關的內核限製。內核典型的有如下可用參數:
MSGMNB
每個消息隊列的最大字節限製。對diskd的實際限製是每個隊列大約100個排隊消息。squid傳送的消息是32-40字節,依賴於你的CPU體係。這樣,MSGMNB應該是4000或更多。為安全起見,我推薦設置到8192。
MSGMNI
整個係統的最大數量的消息隊列。squid對每個cache_dir使用兩個隊列。假如你有10個磁盤,那就有20個隊列。你也許該增加更多,因為其他應用程序也要使用消息隊列。我推薦的值是40。
MSGGSZ
消息片斷的大小(字節)。大於該值的消息被分割成多個片斷。我通常將這個值設為64,以使diskd消息不被分割成多個片斷。
MSGSEG
在單個隊列裏能存在的最大數量的消息片斷。squid正常情況下,限製隊列的長度為100個排隊消息。記住,在64位係統中,假如你沒有增加MSGSSZ的值到64,那麼每個消息就會被分割成不止1個片斷。為了安全起見,我推薦設置該值到512。
MSGTQL
整個係統的最大數量的消息。至少是cache_dir數量的100倍。在10個cache目錄情況下,我推薦設置到2048。
MSGMAX
單個消息的最大size。對Squid來說,64字節足夠了。然而,你係統中的其他應用程序可能要用到更大的消息。在某些操作係統例如BSD中,你不必設置這個。BSD自動設置它為MSGSSZ * MSGSEG。其他操作係統中,你也許需要改變這個參數的默認值,你可以設置它與MSGMNB相同。
SHMSEG
每個進程的最大數量的共享內存片斷。squid對每個cache_dir使用1個共享內存標簽。我推薦設置到16或更高。
SHMMNI
共享內存片斷數量的係統級的限製。大多數情況下,值為40足夠了。
SHMMAX
單個共享內存片斷的最大size。默認的,squid對每個片斷使用大約409600字節。
為安全起見,我推薦設置到2MB,或2097152。
SHMALL
可分配的共享內存數量的係統級限製。在某些係統上,SHMALL可能表示成頁數量,而不是字節數量。在10個cache_dir的係統上,設置該值到16MB(4096頁)足夠了,並有足夠的保留給其他應用程序
文章出處:https://www.diybl.com/course/6_system/linux/Linuxjs/2007921/72568_3.html
這樣看來我的squid應該就是因為使用了diskd文件係統且沒有做任何調整導致的了..
日誌中出現下麵警告:
2009/08/03 16:29:44| storeAufsOpenDone: (2) No such file or directory
2009/08/03 16:29:44| /opt/squid/cache/08/0B/0002E176
2009/08/03 16:29:44| storeAufsOpenDone: (2) No such file or directory
2009/08/03 16:29:44| /opt/squid/cache/08/0D/0002E1BB
2009/08/03 16:29:44| storeAufsOpenDone: (2) No such file or directory
2009/08/03 16:29:44| /opt/squid/cache/0F/0D/00083DB7
2009/08/03 16:29:44| storeAufsOpenDone: (2) No such file or directory
2009/08/03 16:29:44| /opt/squid/cache/05/15/000A56AD
解決方法:
檢查配置文件,cache設置為aufs文件係統格式,將此設置改為ufs,重建cache緩存目錄,這時我的是diskd,所以更改為afus,解決
最後更新:2017-01-04 22:34:32