我正在尝试运行 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 调试器,看看能否找出子进程发生段错误的原因