故障排除清漆 sess_closed_err
Troubleshooting varnish sess_closed_err
我们使用 Varnish-cache 6.0 向我们的客户提供 IPTV 服务,我一直有点担心我们的 Varnish-cache 服务器可能会出现问题。此假设基于当 IPTV 流流经我们的 Varnish 缓存而不是直接流经后端服务器时客户事件报告的数量。
这就是为什么我想消除varnishstat中的所有错误以缩小事件的可能原因,因为目前我没有更好的角度来解决问题。
声明一下,我对 Varnish 并不熟悉,也不是专家。
所以让我们深入研究 "problem":
varnishstat -1 output:
MAIN.sess_closed 38788 0.01 Session Closed
MAIN.sess_closed_err 15260404 3.47 Session Closed with error
基本上几乎所有与清漆缓存服务器的连接都因错误而关闭。我使用相同的 Varnish 配置为我们的网络设置了一个虚拟化演示服务器,当我在我的 VLC 媒体播放器中更改频道时,只生成了 sess_closed_err。请注意,我无法 运行 但可以同时向服务器发送几个 VLC,并且我们的客户使用机顶盒来使用该服务。
所以我的实际问题是,如何解决导致会话错误关闭的原因?
还有一些其他计数器可以更具体地显示会话发生的情况。因此,故障排除的下一步是查看这些计数器:
varnishstat -1 | grep ^MAIN.sc_
我会用一个典型的例子来详细说明:
$ sudo varnishstat -1 | egrep "(sess_closed|sc_)"
MAIN.sess_closed 8918046 1.45 Session Closed
MAIN.sess_closed_err 96244948 15.69 Session Closed with error
MAIN.sc_rem_close 86307498 14.07 Session OK REM_CLOSE
MAIN.sc_req_close 8402217 1.37 Session OK REQ_CLOSE
MAIN.sc_req_http10 45930 0.01 Session Err REQ_HTTP10
MAIN.sc_rx_bad 0 0.00 Session Err RX_BAD
MAIN.sc_rx_body 0 0.00 Session Err RX_BODY
MAIN.sc_rx_junk 132 0.00 Session Err RX_JUNK
MAIN.sc_rx_overflow 2 0.00 Session Err RX_OVERFLOW
MAIN.sc_rx_timeout 96193210 15.68 Session Err RX_TIMEOUT
MAIN.sc_tx_pipe 0 0.00 Session OK TX_PIPE
MAIN.sc_tx_error 0 0.00 Session Err TX_ERROR
MAIN.sc_tx_eof 3 0.00 Session OK TX_EOF
MAIN.sc_resp_close 0 0.00 Session OK RESP_CLOSE
MAIN.sc_overload 0 0.00 Session Err OVERLOAD
MAIN.sc_pipe_overflow 0 0.00 Session Err PIPE_OVERFLOW
MAIN.sc_range_short 0 0.00 Session Err RANGE_SHORT
MAIN.sc_req_http20 0 0.00 Session Err REQ_HTTP20
MAIN.sc_vcl_failure 0 0.00 Session Err VCL_FAILURE
此特定环境的输出显示大多数因错误而关闭的会话是由于接收超时 (MAIN.sc_rx_timeout
) 而发生的。此超时控制清漆将保持空闲连接打开多长时间,并使用 timeout_idle
参数设置为 varnishd
。默认值为 5 秒。使用varnishadm
查看当前值和超时时间的说明:
$ sudo varnishadm param.show timeout_idle
timeout_idle
Value is: 10.000 [seconds]
Default is: 5.000
Minimum is: 0.000
Idle timeout for client connections.
A connection is considered idle until we have received the full
request headers.
This parameter is particularly relevant for HTTP1 keepalive
connections which are closed unless the next request is
received before this timeout is reached.
增加 timeout_idle
可能会减少因空闲超时而关闭的会话数。这可以通过在启动清漆时将值设置为参数来完成。示例:
varnishd [...] -p timeout_idle=15
请注意,有 pros and cons 与增加此超时有关。
我们使用 Varnish-cache 6.0 向我们的客户提供 IPTV 服务,我一直有点担心我们的 Varnish-cache 服务器可能会出现问题。此假设基于当 IPTV 流流经我们的 Varnish 缓存而不是直接流经后端服务器时客户事件报告的数量。
这就是为什么我想消除varnishstat中的所有错误以缩小事件的可能原因,因为目前我没有更好的角度来解决问题。
声明一下,我对 Varnish 并不熟悉,也不是专家。
所以让我们深入研究 "problem":
varnishstat -1 output:
MAIN.sess_closed 38788 0.01 Session Closed
MAIN.sess_closed_err 15260404 3.47 Session Closed with error
基本上几乎所有与清漆缓存服务器的连接都因错误而关闭。我使用相同的 Varnish 配置为我们的网络设置了一个虚拟化演示服务器,当我在我的 VLC 媒体播放器中更改频道时,只生成了 sess_closed_err。请注意,我无法 运行 但可以同时向服务器发送几个 VLC,并且我们的客户使用机顶盒来使用该服务。
所以我的实际问题是,如何解决导致会话错误关闭的原因?
还有一些其他计数器可以更具体地显示会话发生的情况。因此,故障排除的下一步是查看这些计数器:
varnishstat -1 | grep ^MAIN.sc_
我会用一个典型的例子来详细说明:
$ sudo varnishstat -1 | egrep "(sess_closed|sc_)"
MAIN.sess_closed 8918046 1.45 Session Closed
MAIN.sess_closed_err 96244948 15.69 Session Closed with error
MAIN.sc_rem_close 86307498 14.07 Session OK REM_CLOSE
MAIN.sc_req_close 8402217 1.37 Session OK REQ_CLOSE
MAIN.sc_req_http10 45930 0.01 Session Err REQ_HTTP10
MAIN.sc_rx_bad 0 0.00 Session Err RX_BAD
MAIN.sc_rx_body 0 0.00 Session Err RX_BODY
MAIN.sc_rx_junk 132 0.00 Session Err RX_JUNK
MAIN.sc_rx_overflow 2 0.00 Session Err RX_OVERFLOW
MAIN.sc_rx_timeout 96193210 15.68 Session Err RX_TIMEOUT
MAIN.sc_tx_pipe 0 0.00 Session OK TX_PIPE
MAIN.sc_tx_error 0 0.00 Session Err TX_ERROR
MAIN.sc_tx_eof 3 0.00 Session OK TX_EOF
MAIN.sc_resp_close 0 0.00 Session OK RESP_CLOSE
MAIN.sc_overload 0 0.00 Session Err OVERLOAD
MAIN.sc_pipe_overflow 0 0.00 Session Err PIPE_OVERFLOW
MAIN.sc_range_short 0 0.00 Session Err RANGE_SHORT
MAIN.sc_req_http20 0 0.00 Session Err REQ_HTTP20
MAIN.sc_vcl_failure 0 0.00 Session Err VCL_FAILURE
此特定环境的输出显示大多数因错误而关闭的会话是由于接收超时 (MAIN.sc_rx_timeout
) 而发生的。此超时控制清漆将保持空闲连接打开多长时间,并使用 timeout_idle
参数设置为 varnishd
。默认值为 5 秒。使用varnishadm
查看当前值和超时时间的说明:
$ sudo varnishadm param.show timeout_idle
timeout_idle
Value is: 10.000 [seconds]
Default is: 5.000
Minimum is: 0.000
Idle timeout for client connections.
A connection is considered idle until we have received the full
request headers.
This parameter is particularly relevant for HTTP1 keepalive
connections which are closed unless the next request is
received before this timeout is reached.
增加 timeout_idle
可能会减少因空闲超时而关闭的会话数。这可以通过在启动清漆时将值设置为参数来完成。示例:
varnishd [...] -p timeout_idle=15
请注意,有 pros and cons 与增加此超时有关。