阅读183 返回首页    go 搜狐 go 中电云集


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

  上一篇:go 网站CDN获取真实IP解决方案
  下一篇:go crontab精确到以秒为单位