微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打开> 2.5k TCP端口和线程后进程退出

该进程(用C ++编写)充当服务器,QTcpserver类用于构build服务器。 对于每个新的传入连接,它都产生一个新的线程,并用新的套接字描述符创build一个QTcpsocket对象,该套接字描述符处理该套接字上的所有读/写操作。 这可能听起来不错,为每一个连接创造一个新的线程,但我不能帮助,所以请忍受。 所以,问题是,当服务器上的套接数量超过2500时,就会崩溃。 我在控制台上得到下面的消息:QEventdispatcher:无法创buildQEventdispatcherWin32内部窗口:1158 Qt:INTERNALL错误:无法安装GetMessage钩子@H_502_1@

我尝试了几件事,首先我检查了我们是否可以创build这么多的线程,因为每个连接都有专用的线程。 没有问题,我可以创build超过5000个线程。 其次,我在MSDN上find了一些东西, http://msdn.microsoft.com/en-us/library/aa560610 (v=bts.20) .aspx它也没有帮助。 请build议。@H_502_1@

如果STDOUT缓冲区溢出,会发生什么情况@H_502_1@

更改最近文件的总数@H_502_1@

在使用gettimeofday时,初始计时结果较慢 – 在RHEL6服务器下更糟糕@H_502_1@

如何获得SHbrowseForFolder函数的完整path?@H_502_1@

与PAM不同的访问级别@H_502_1@

每个线程的堆栈认分配为1 MB,所以在2500个线程中,线程堆栈已经超过了进程可用的2 GB内存。 单线程单线程设计对于如此多的套接字来说是站不住脚的。@H_502_1@

几乎没有什么东西,起初编译64位平台的可执行文件。 这有助于创建大量的线程。 其次,使用QTcpsocket丢弃,并从头开始写所有函数。 我从QTcpsocket中找到的差异就是包含“Winsock2.h”的方式。 在包含头文件之前定义了下面的宏。 #define FD_SETSIZE 5000@H_502_1@

通过这些更改,服务器可以同时处理大于5K的请求,并且cpu使用率也不算太高。@H_502_1@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐