【虚拟化轻代理】【客户端】Windows 客户端离线问题排障建议

戴红昌发表于:2020年09月16日 10:11:24更新于:2020年11月05日 15:14:10

原理说明:

  • 客户端每10s钟通过发送https请求,将心跳发给控制台nginx

  • nginx收到后更新redis,再由redis将心跳信息同步给pg数据库的client表,更新last time值。

  • 控制台当前时间 - client表中last time的时间 >10分钟时,会判定客户端离线

排查思路:

image.png

*根据版本不同,此排障图会不定期更新

步骤具体操作说明如下:

【服务检查】

进入Windows客户端,打开服务,检查服务运行状态是否正常(已启动):

image.png

关闭自保后手动起服务,如果手动起服务失败,需要根据具体的失败代码来判断问题原因,常见的报错代码如下:


【句柄检查】

在客户端离线报错下,需要判定以下:

客户端是否发出心跳 

打开debugview, 开启【capture win32】和【capture global win32】,查看心跳发送状态:

image.png


如果客户端未发出心跳,可能是服务停止(排查步骤见【服务检查】)或者因为某些原因导致的假死(本产品最常见的是句柄泄露)


查看是否句柄泄露:

1. 登陆到windows 客户端,打开任务管理器,开启句柄查看

正常情况下的句柄数量:


image.png

3. 利用Process Explorer查看该进程下具体的句柄列表,以及有多少event跟thread

按下Ctrl+A组合键,将Process Explorer中的进程列表和选中进程的句柄列表保存为文本文件。

关于句柄泄露本身如何定位,参阅文章:句柄泄露排错

【防火墙检查】

此处主要是排查是否有第三方(或产品本身防火墙)拦截了心跳请求(包括IP地址彼此互通,8080端口,8090端口可达)

如下图,在debugview中,能看到客户端一直在发送心跳请求,但是无法收到回应:

Screen%20Shot%202019-04-16%20at%2012.54.10.png?version=1&modificationDate=1594701404000&api=v2


具体原因需要根据wireshark抓包结果来看:

image.png

例如以上例子中看到ICS给客户端恢复的ack的windows size为0,应该被某项功能给阻止了。


【TLS检查】

针对于Windows 2003, xp版本,目前可能会存在TLS协议未开启而导致客户端离线的现象。


目前规避方案如下:

  1. 打开浏览器属性,勾选所以的TLS协议,保存。

  2. 重启轻代理客户端服务。


【日志收集】

如果以上步骤无法解决问题,则查看并开启日志诊断并收集对应的日志,递交后端处理。


Windows客户端通讯日志

Windows客户端心跳日志(Win7、win2008等):C:\programdata\360skylar6\EntCommAgent.log

 默认只有在心跳失败时才会记录,并告知下一次心跳的发送间隔

image.png


Linux客户端通讯日志

linux客户端通讯日志:/opn/360safe/log/netcomm.log

开启debug日志的方法:

进入/opt/360safe/conf 目录下 vim log.conf 创建文件 填写如下信息(注意分成两行):

[LOG_CONF]

LOGLEVEL=debug

修改配置前信息较少,类似:

image.png


提交以上日志和抓包递交后端处理。