我该如何调试 Varnish 无法正确启动?

我该如何调试 Varnish 无法正确启动?

我正在尝试运行 Varnish,但似乎启动时子进程快要死了。有人能建议我以最佳方式调试问题所在吗?

背景

我有一台安装了 Debian 的树莓派,它能很好地运行 varnish。最近,我决定安装 Raspbian(基于 Debian 的操作系统,但针对树莓派进行了优化)。为此,我进行了全新安装并使用 puppet 确保我拥有与之前相同的所有设置。

我能想到的两种设置之间的唯一实质性区别是,Raspbian 使用的 Debian(Wheezy)版本比我以前使用的(Squeeze)更高,因此附带的是 Varnish 3,而不是 2。

迄今为止的调试尝试:

我查看了 /var/logs/syslog 并发现以下内容:

Sep 21 22:26:28 interceptor varnishd[15056]: Platform: Linux,3.1.9+,armv6l,-smalloc,-smalloc,-hcritbit
Sep 21 22:26:28 interceptor varnishd[15056]: child (15064) Started
Sep 21 22:26:28 interceptor varnishd[15056]: Pushing vcls failed:#012CLI communication error (hdr)
Sep 21 22:26:28 interceptor varnishd[15056]: Stopping Child
Sep 21 22:26:28 interceptor varnishd[15056]: Child (15064) died signal=11
Sep 21 22:26:28 interceptor varnishd[15056]: Child (-1) said Child starts
Sep 21 22:26:28 interceptor varnishd[15056]: Child cleanup complete
Sep 21 22:26:28 interceptor varnishd[15056]: Manager got SIGINT

我尝试通过谷歌搜索该错误,但没有找到任何有用的信息。

我还运行了 strace -f 并重新启动了 varnish,但显然它返回了很多输出,我不确定要查找什么。我 grep 查找子进程 (15064) 的 pid,但似乎没有找到任何匹配项。strace 确实包含很多行,例如

[pid 15114] close(131072)               = -1 EBADF (Bad file descriptor)                                                                                                                                  
[pid 15114] close(131071)               = -1 EBADF (Bad file descriptor)                                                                                                                          
[pid 15114] close(131070)               = -1 EBADF (Bad file descriptor)                                                                                                                                  
[pid 15114] close(131069)               = -1 EBADF (Bad file descriptor)                                                                                                                                  
[pid 15114] close(131068)               = -1 EBADF (Bad file descriptor)                                                                                                                                  
[pid 15114] close(131067)               = -1 EBADF (Bad file descriptor)                                                                                                                                  
[pid 15114] close(131066)               = -1 EBADF (Bad file descriptor)

但我不确定这是否正常,或者可能是我的问题所致,而不是其原因。

非常感谢任何关于我应该如何进行的建议。

答案1

启动期间失败的最佳输出是 stdout/stderr - 但默认的初始化脚本会阻止显示此输出。

尝试运行varnishd -f /etc/varnish/default.vcl- 这将向您显示加载 VCL 时出现的任何错误。

答案2

尝试使用一些非常简单的标志附加正在运行的清漆:

varnishd -l 8m -s 文件,/tmp,8m -b 本地主机:8080 -a 0.0.0.0:80 -w 2

然后连接 gdb 调试器,看看能否找出子进程发生段错误的原因

相关内容