问题表象:
使用guacamole搭建远程桌面访问,使用guacamole版本为1.5.4。连接远程主机使用rdp协议。运行过程中发现,各几个小时,guacamole连接就会断连,点击重新连接一直是连接不上,重启guacd后,点击重新连接,能i连接到远程主机桌面。
问题定位:
发现该问题时,首先怀疑是guacamole-client和guacd的问题,两者重启后问题得到解决。而后长时间运行过程中多次出现该问题,偶然一次重启guacd问题也得到了解决。进而将问题锁定到guacd上。
断连时,guacamole到gucad的TCP连接正常建立, gucad到远程主机的rdp连接建立失败。
因为是连接问题,首先考虑文件句柄设置是否过小导致,经排查排除。
lsofulimit -acat /proc/sys/fs/file-nrnetstat -a --观察连接创建情况
进而分析是系统资源泄漏问题,经分析排除。
free -htopps -ef | grep guacd
排查分析后排除是操作系统层面的问题,进而分析应用本身。
分析应用本身,肯定离不开打开两个组件的日志,将两个组件的debug日志全部打开,从guacamole的日志分析看不出明细的问题诱因。
如果是docker容器启动,添加变量:guacamole:LOGBACK_LEVEL debuggucad :GUACD_LOG_LEVEL debug
接着分析guacd的debug日志中找到了看着貌似不正常的日志。
Major bug, unable to allocate a TLS value for currentThread
搜索发现是guacd的一个bug,具体分析描述:
https://github.com/FreeRDP/FreeRDP/discussions/9717
https://lists.apache.org/thread/z8m7y5n0nco0smn1mscdn0fhyxjctrtt
解决方案:
回退guacd版本到1.5.3,问题得到解决。