如何找出为什么Squid代理因状态为0的信号9而退出

时间:2020-01-09 10:39:13  来源:igfitidea点击:

我收到一条错误消息,该错误显示为代理服务器拒绝连接。

如何确定Squid代理服务器意外死机的原因?

Squid是Web的缓存和开源代理,支持HTTP,HTTPS,FTP等。
通过缓存和重用,它减少了带宽并缩短了响应时间。
Squid可以死的原因有很多。
让我们看一些基本步骤,找出导致Ubuntu Linux服务器上此类错误的原因。

基本症状

您或用户可能会在浏览器屏幕上看到如下错误:
第一个错误消息表明我们的Squid代理服务器出了点问题

Squid代理服务器连接到网络并提供了代理服务器。
因此,让我们开始研究问题。

检查列表1:客户端或服务器问题

转到另一个客户端浏览器或计算机,然后尝试通过Squid代理访问Internet。
如果这台计算机也无法访问Squid服务器,那么您知道问题很可能出在Squid服务器本身上。
接下来,您需要将故障排除集中在squid服务器本身上。
使用ssh登录:

$ ssh [email protected]

检查列表2:服务器端口是否打开?

在Ubuntu Linux服务器上执行以下命令,以验证TCP端口3128(默认)已打开:

$ netstat -tulpn
$ ss -tulpn
$ netstat -tulpn | grep 3128

如果没有输出,则表示Squid未运行。
尝试启动它,运行:

$ sudo systemctl start squid

检查列表3:squid代理服务器是否正在运行?

如下使用ps命令和grep命令:

$ ps aux | grep -i squid

或使用pgrep命令:

$ pgrep squid

如果Squid仍然没有启动或运行,请检查其他错误。

检查列表4:检查squid日志文件或squid服务器的状态

执行以下命令:

$ sudo systemctl status squid

宾果游戏,我发现了错误:

Feb 04 04:09:01 theitroad-squid-do-0001 squid[1658]: Squid Parent: (squid-1) process 1661 exited due to signal 9 with status 0

随机杀死该进程表示内存不足(OOM)情况。
这是计算机操作的一种通常不希望的状态,无法分配额外的内存供程序或操作系统使用。

信号9是什么意思?

数字9表示终止信号,即终止运行进程。
自然,有人杀死了这个过程。
但是,为什么呢?
要找到我们问题的答案,请运行:

$ dmesg | grep -i mem

或者

$ dmesg | grep -i out_of_mem

输出示例:

858444.872840] lowmem_reserve[]: 0 0 0 0 0
[858444.872867] 0 pages HighMem/MovableOnly
[858444.872948] Out of memory: Kill process 1661 (squid) score 67 or sacrifice child
[860244.967476] sessionclean cpuset=/ mems_allowed=0
[860244.967512]  [] out_of_memory+0x219/0x460
[860244.967521]  [] alloc_kmem_pages_node+0x4b/0xc0
[860244.967544] Mem-Info:
                 mapped:10224 shmem:3037 pagetables:1029 bounce:0
[860244.967552] Node 0 DMA free:2136kB min:88kB low:108kB high:132kB active_anon:1824kB inactive_anon:384kB active_file:3760kB inactive_file:1776kB unevictable:68kB isolated(anon):0kB isolated(file):0kB present:15992kB managed:15908kB mlocked:68kB dirty:4kB writeback:0kB mapped:2048kB shmem:400kB slab_reclaimable:4448kB slab_unreclaimable:620kB kernel_stack:224kB pagetables:164kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
[860244.967558] lowmem_reserve[]: 0 454 454 454 454
[860244.967561] Node 0 DMA32 free:10596kB min:2680kB low:3348kB high:4020kB active_anon:62740kB inactive_anon:11196kB active_file:175676kB inactive_file:110160kB unevictable:3588kB isolated(anon):0kB isolated(file):0kB present:507896kB managed:484228kB mlocked:3588kB dirty:204kB writeback:0kB mapped:38848kB shmem:11748kB slab_reclaimable:75600kB slab_unreclaimable:16648kB kernel_stack:2288kB pagetables:3952kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no

所以,现在您知道我们的Squid死亡的确切原因。
要解决此问题,您可能需要停止不需要的进程。
另一种选择是添加额外的内存。
就我而言,我有足够的内存。
事实证明,这是一个内核错误,在Ubuntu 16.04 LTS上升级到内核版本4.4.0-59后出现内存不足错误:

$ uname -mrs
`Linux 4.4.0-59-generic x86_64`

最终的解决方案是通过执行apt-get命令或apt命令来应用内核修复,如下所示:

$ sudo apt-get update
$ sudo apt-get upgrade
## force upgrade ##
$ sudo apt-get dist-upgrade

重新启动Linux服务器,执行:

$ sudo reboot
$ uname -mrs
`Linux 4.4.0-62-generic x86_64`