如何找出为什么Squid代理因状态为0的信号9而退出
我收到一条错误消息,该错误显示为代理服务器拒绝连接。
如何确定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`