【发布时间】:2016-09-14 18:33:31
【问题描述】:
首先,我在我的安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题(在 Qt Memcheck 中,我必须检查 "External Errors" 才能看到它) - 某些字节 肯定丢失了 - 指向我的main,就在我的QCoreApplication::exec() 呼叫所在的位置。在堆栈跟踪中,在调用之后,只有一些 Qt 库,以libQt5Core 开头,以libQt5WebSockets 结尾。丢失的字节数随着建立的连接数而增加。我仔细检查了我删除了QWebSocketServer::nextPendingConnection() 返回的所有QWebSocket 实例。我也删除了QWebSocketServer 实例。有趣的是,valgrind 在运行 sslechoserver 演示或在不安全模式(无 SSL)下运行我的服务器时不会报告任何错误。我不知道这是否是一个实际问题。
其次,更重要的是,我观察到消耗的内存随着每个新连接而不断增加(即使旧连接已关闭并且它们的 QWebSocket 实例已被删除,实际上大多数时候有 0 或 1 个活动连接)在我的应用程序和 sslechoserver 演示中。我在 Ubuntu 上使用 systemmonitor 并在 Windows 上使用 Windows 任务管理器 进行观察。建立数万次连接后,报告的内存使用量为数十兆字节,而在应用程序生命周期开始时约为 1.5 MB。
我使用 Qt 5.5.1 和 5.6.0(Ubuntu 上的 GCC,Windows 上的 MSVC)对其进行了测试。
我有什么问题吗? Qt 的 websocket 中是否存在错误? sslechoserver 演示不正确吗?
更新:我也尝试了 echoserver 演示(没有 SSL),消耗的内存也在不断增加。
更新 2: 我们得出结论,Qt 中一定存在错误。错误报告在这里: https://bugreports.qt.io/browse/QTBUG-53503
【问题讨论】:
-
这个问题有更新吗?这还在发生吗?顺便说一句,我也很想知道 Qt Web/TCP 服务器可以处理多少个同时连接。它可以扩展到百万吗?
标签: c++ qt memory-leaks websocket