squid中文权威指南_第1页
squid中文权威指南_第2页
squid中文权威指南_第3页
squid中文权威指南_第4页
squid中文权威指南_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Squid中文指(16章本人在工作中着数台Squid服务器,多次参阅DuaneWessels(他也是Squid的创始人)的这本书,原书名是"Squid:TheDefinitiveGuide",由O'Reilly。我在业余时间把Squid用户有所帮助。对普通的单位上网用户,Squid可充当代理服务器;而对Sina,NetEase这样的大型站点,Squid又充当WEB。这两个角色它对本译版有任何问题,请跟我的是 第16章调试和故障处 "Failedtomakeswap "Addressalreadyin "Couldnotdeterminefullyqualified "DNSnamelookuptests "Illegalcharacterin "Runningoutof "icmpRecv:Connection 在运行一段时间后,Squid变慢 调试控 译后 16试和故障处一些通用问"FailedtomakeswapFailedtomakeswapdirectory/var/spool/cache:(13)Permission这点发生在你运行squidzsquidD没有对/var/pool的写权限的时候。记住假如以root来启动squidache_effectve_usersquid默认以nobody#chownnobody:nobody"AddressalreadyincommBind:CannotbindsocketFD10to*:3128:Addressalreadyinsquid2squid实例,就会发生这种情况。假如你见到这个错误消息,请使用pssquid已经在运行。SquidSO_REUSEADDRsocketbind()调用总能成功,即使仍有一些残余的socket位于TIME_WAIT状态。若该消息出现,尽管squid没有在运行,但你的操作系统可能在处理这个问题上有bug。重启操作系统是解决问题的一个方法。另一个可能性是端口(3128)当前已被其他应用程序使用。假如你怀疑这点,就可使用lsof程序来发现哪个应用正在该端口上侦听。FreeBSD用户能使用sockstat代替。"CouldnotdeterminefullyqualifiedFATAL:Couldnotdeterminefullyqualified Pleaseset假如squid不能识别它自己的完整可验证,就会报这个错。如下是squid使用的squidHTTP端口绑定在指定的接口地址上,squid试图对该地址执行反向DNS查询。假如成功,查询答案就被用上。假如成功,squid使用后者函数返回的主机名串。2项技术都不能工作,squid以前面提到的致命错误消息退出。在该情形下,必须使用visible_hostname指令来告诉squid它的主机名。例如:visible_hostname"DNSnamelookuptests默认情况下,squidDNSDNS服务器可到达,并且运行正确。假如测试失败,可在cache.log或syslog里见到如下消息:FATAL:ipcache_init:DNSnamelookuptests假如你在内网里使用squid,squid可能不能查询到它的标准主机名列表。可使用假如你想完全跳过DNS测试,简单的在启动squid时,使用-D命令行选项:%squid-D"IllegalcharacterinurlParse:Illegalcharacterinhostname 会抱怨。参考RFC1034和1035,名字必须由字母A-Z,数字0-9,以及短横线(-)组成。下划 验证主机名是因为,在某些情形下 对畸形字符的解析会很。例如%host hasaddress%:cannotresolve :Unknownserver一的例外,那么使用—enable-underscores选项。"RunningoutofWARNING!Yourcacheisrunningoutof有必要增加内核的文件描述符限制,并且重新编译squid。请见3.3.1章。假如squid成为了服务的目标,那也会见到这条消息。某些人可能有意或无意的,同时对squid发送成百上千条请求。在这种情形下,可以增加一条滤规则,来自地址的TCP进入连接。假如是分布式的,或使用源地址,就很难它们。转发循环(见10.2章)也可能耗尽squid的所有文件描述符,但仅仅发生在squid不能HTTP请求里过滤掉了,squid就不能检测到循环。在该情形下,所有文件描述符被循环遍历squid的同一请求迅速耗完。"icmpRecv:ConnectionicmpRecv:recv:(61)Connection不过看起来更象是因为没有打开ICMPsocket的权限,er立刻退出了。因为该进程录以root运行:#makeinstall--rws--x-- 1 在运行一段时间后 变慢squidsquid进程的内存不再充足时,操作系统被迫从交换空间进行内存读写。这对squid的性能有强烈影响。为了证实这个想法topps等工具squid的进程大小。squid自己4章的描述。一旦你已确认内存耗费是问题所在,请执行下列步骤来减少squid的内存使用:memory_pools 调试控假如控制不能正确工作,如下是一些有用帮助。编辑squid.conf文件,设debug_options行如下:然后,重配置squid:%squid-k现在,对每个客户端请求以及每个响应,squid都写一条消息到cache.log。该消息包含2003/09/2920:22:05|TheGETisbecauseitmatched2003/09/2920:22:05|ThereplyGETisbecauseitmatched知道ACL的名字,并非总能知道相应的http_access行,但也相当接近了。假如必要,可以acl行,并给予它们唯一的名字,以便给定的ACL名字仅仅出现在一个http_access通过cache.log进行调13.1章已了解到,cache.log包含了不同的操作消息,squid认为这些消息足够重要,从而告诉了你。也将这些作为debug消息考虑。可以使用debug_options指令来控制出cache.logdebug等级,可以见到更详细的消息,有助于debug_optionsALL,111,3squiddebug2个数字特征:110到100,等级范围从0到10。通常来说,节号对应着源代码的组成成分。换句话说,在单一*DEBUG:section FileTransferProtocolTable16-1.Debuggingsectionnumbersforthedebug_optionsSource0Client1StartupandMain2Unlink3ConfigurationFile4Err5Socket5Socket6DiskI/O78SwapFile9FileTransferProtocolHypertextTransferProtocolInternetCacheInternetCacheHighLevelMemoryPoolTable16-1.Debuggingsectionnumbersforthedebug_optionsSourceIPNeighborCacheManagerRequestCacheManagerStoreMemoryStorageStorageManagerClient-SideStorageManagerHeap-BasedStorageManagerLoggingStorageManagerMD5CacheStorageManagerSwapfileStorageManagerSwapinStorageManagerSwapoutStoreRebuildMiscRefreshURLWAISMIMESecureSocketsLayerCachesend-AccessTable16-1.Debuggingsectionnumbersforthedebug_optionsSourceNTLMIdent(RFCHypertextCachingAsynchronousDiskClient-SideDnsserverFQDNICMPNetworkMeasurementRefererUser-AgentEventICMPerPeerSelectionCallbackDatacbCallbackDataAccessStoreCOSSDirectoryStoreDirectoryStoreDirectoryStoreDirectoryTable16-1.Debuggingsectionnumbersforthedebug_optionsSourceStoreDirectoryStoreDirectoryPersistentSNMPSNMPLogFileFileDescriptorURNASNumberInterprocessHTTPHTTPMessageHTTPStatus-HTTPReplyAuto-GrowingMemoryBufferwithprintfPacker:AUniformInterfacetoStoreLikeModulesGenericLowLevelMemoryPoolHTTPRangeHTTPCacheControlHTTPHeaderHTTPContent-RangeHTTPHeader:ExtensionCacheTable16-1.Debuggingsectionnumbersforthedebug_optionsSourceStoreDigestPeerDigestHTTPHTTPWHOISInternalSquidObjectDelayDNSLookups;interactswithSquid-SideDISKDI/OStorageManagerCOSSStorageManagerUFSWExternalSSLAcceleratorHelperProcessdebug等级这样分配:重要消息有较低值,非重要消息有较高值。0等级是非常重要的消息,10等级是相对不紧要的消息。另外,关于等级其实并没有严格的向导或要求。开发者通常适应的debug等级。debug_optionssection,levelsection,level...默认设置是ALL,1,这意味着squid会将所有等级是01debug消息打印出来。假cache.log里出现更少的debug消息,可设置debug_optionsALL,0。假如想观察某个组件的其他debug信息,简单的将相应的节号和等级增加到debug_options列表的末端。例如,如下行对FTP服务端代码增加了等级5debug_optionsALL,1%squid-k注意debug_options参数是按顺序处理的,后来的值会覆盖先前的值。假如使用ALL关debug_options9,520,94,2ALL,1debug等级为1。选择合适的debug节号和等级有时非常,尤其是对squid新手而言。许多更详细的debugsquidsquid用户会发现许多debugsquid相对忙的话,你可能对某个特殊请求或事件进行独立debug有。假如你能一次用一个请求来测试squid,那么高的debugdebugsquidsquid繁忙,cache.logdebug消息,squidCPU资源来格式化和打印字符串。将所有debug消息写往cache.log,也浪费了大量的磁盘带宽。Coredumpcore文件,以便开发者能分析形势。{assert(idx<100);}会遇到错误。假如不知何故,idx的值不小于100,程序运行时会打印如下消息:assertionfailed:filename.c:123:"idx<squidcache.log里见到"assertionfailed"消息。另外,操作系64位处理器系统上可能更容易见到总线错误,例如Alpha和某SPARU。幸运的是,它们容易修复。存区域时(可能是个NULL指针,或超出进程空间之外的内存地址。当bug原因和SEGVSquid默认捕获总线错误和异常分片它们发生squid试图执行一个cleanFATAL:ReceivedBus2003/09/2923:18:01|storeDirWriteCleanLogs:使用-C命令行选项,可以告诉squid不去捕获总线错误和异常分片:%squid-C注意某些操作系统使用文件名core,而另外一些优先考虑进程名(例如squid.core。一旦找到core文件,请使用调试器来进行堆栈。gdb是GNU调试器--GNUC编译器的配套工具。假如没有gdb,可试着运dbxadb代替。如下显示如何使用gdb来进行堆栈跟%gdb/usr/local/squid/sbin/squidCorewasgeneratedbyProgramterminatedwithsignal6,Abort然后,敲入where来打印堆栈轨迹(gdb) 0x28168b54inkill()from/usr/lib/libc.so.4 0x281aa0ceinabort()from/usr/lib/libc.so.4 0x80a2316indeath(sig=10)attools.c:301 0xbfbfffacin??() 0x80abe0ainstoreDiskdSend(mtype=4,sd=0x82101e0,id=1214000,sio=0x9e90a10,size=4096,offset=-1,shm_offset=0)at 0x80ab726instoreDiskdWrite(SD=0x82101e0,sio=0x9e90a10,buf=0x13e94000"...",size=4096,offset=-1,free_func=0)at 0x809d2fbinstoreWrite(sio=0x9e90a10,buf=0x13e94000"...",size=4096,offset=-1,free_func=0)atstore_io.c:89 0x80a1c2dinstoreSwapOut(e=0xc5a7800)at 0x809b667instoreAppend(e=0xc5a7800,buf=0x810f9a0"...",len=57344)atstore.c:533 0x807873binhttpReadReply(fd=134,data=0xc343590)athttp.c:642#100x806492fincomm_poll(msec=10)atcomm_select.c:445#110x8084404inmain(argc=2,argv=0xbfbffa8c)atmain.c:742#120x804a465in_start() 0x80abe0ainstoreDiskdSend(mtype=4,sd=0x82101e0,id=1214000,sio=0x9e90a10,size=4096,offset=-1,shm_offset=0)at x=msgsnd(diskdinfo->smsgid,&M,msg_snd_rcv_sz,IPC_NOWAIT);(gdb)setprintpretty(gdb)printM$2=mtype=id=seq_no=7203103,size=4096,offset=-status=-shm_offset=}不能找core文件core文件写在进程的当前 。squid在启动时默认不改变其当前 。这样你的core文件(如果有的话会写在启动squid的 。假如文件系统没有足够的空间,或进 的写权限,就无法产生core文件可以使用coredump_dir指令来让squid使用指定的 进程资源限制也会产生core文件。进程限制参数之一是coredump文件的大小。大部分操作系统默认设置这个值为"无限"。在当前s里使用limits或ulimit命令,可以检查当前限制。然而请注意,你的s的限制可能不同于squid的进程限制,特别是当squid随系统启动而自动启动时。假如怀疑进程限制了core文件的产生,试试这样:csh%limitcoredumpsizeunlimitedcsh%squid-NCd1FreeBSD上sysctl参数控制了操作系统对调用了setuid()setgid()函数的进程,须告诉内核创建core文件,用这个命令:#sysctl重现问squidHTTP捕获HTTP请求意味着获取除了URL外的信息,包括请求方式,HTTP版本号,squiddebugsquid主%squid-主机,并发布同样令%squid-2003/09/2910:37:40|parseHttpRequest:Methodis2003/09/2910:37:40|parseHttpRequest:URIis''2003/09/2910:37:40|parseHttpRequest:ClientHTTPversion1.1.2003/09/2910:37:40|parseHttpRequest:req_hdr{User-Agent:Mozilla/5.0(compatible;Konqueror/3)Pragma:no-cacheCache-control:no-Accept:text/*,image/jpeg,image/png,image/*,*/*Accept-Encoding:x-gzip,gzip,identityAccept-Charset:iso-8859-1,utf-8;q=0.5,*;q=0.5Accept-Language:enHost:GET捕获完整请求的另一个方法是使用工具例如netcat或socket()。启动socket程序侦听在某个端口,然后配置浏览器使用该端口作为地址。当再次发起请求时,socket打印出HTTP请求%socket-sGETUser-Agent:Mozilla/5.0(compatible;Konqueror/3)Pragma:no-cacheCache-control:no-Accept:text/*,image/jpeg,image/png,image/*,*/*Accept-Encoding:x-gzip,gzip,identityAccept-Charset:iso-8859-1,utf-8;q=0.5,*;q=0.5Accept-Language:enHost:包后,可以使用tcpshow来查看它们:#tcpdump-wtcpdump.log-c10-s1500port#tcpshow-noHostNames-noPortNames<tcpdump.log|Packet 08:39:29.593051 00:90:27:16:AA:75->00:00:24:C0:0D:25 1->hlen=20TOS=00dgramlen=304MF/DF=0/1fra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论