问题:想设计一个多客户端的tcp程序,客户端每隔1s(或更短)时间向服务器端发送心跳包(几KB),服务器收到后发送响应给客户端,现在设计一个程序开辟多个线程来模拟场景,要求客户端10000~25000个,服务器端的CPU使用率不能太高。
现状:目前程序跑5000个线程间隔1s发送,程序没有问题,无丢包,服务器的cpu使用率在45%左右版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
长连接上限就只有几千,再往上开就有断连现象。回复<aclass='referer'target='_blank'>@召唤兽:这个我了解不多,不过长连接多了就会掉,超载了。能细说下吗?一个端口最多能开多少个tcp连接?有没有办法优化,或设置能接受更多的连接?udp才有丢包吧恩tcp不会丢包现在是负载太高服务器端关闭连接
最有可能是服务器负载过高,造成客户端发完tcpsync包之后服务器没能响应,所以就提示错误。
可以试试优化一下服务器,或者把服务器的业务处理部分注释掉,然后再跑跑看。
还可以尝试加大listen的backlog
回复<aclass='referer'target='_blank'>@召唤兽:在客户端加个代码,看看到底在哪步失败,是connect还是在send或者recv,同时计算一下执行这些函数所用的时间。总之就是加一些代码验证猜测。回复<aclass='referer'target='_blank'>@召唤兽:把心跳包的大小减小试试看1.backlog我调过100、10000,试了还是如此。2.把服务器的处理代码修改成纯接收,没有其他操作,还是会出现错误感觉真的是负载过大有关系,有没有好的方法解决。。我改了下程序:原先客户端每秒都要连接---收发---关闭连接,改成一直保持10000个连接---循环收发-----关闭
现在程序可以接受10000+的客户端访问,cpu使用率63%(10000个线程),感觉有点高,有什么办法降低吗?
<divclass='ref'>我改了下程序:原先客户端每秒都要连接---收发---关闭连接,改成一直保持10000个连接---循环收发-----关闭
现在程序可以接受10000+的客户端访问,cpu使用率63%(10000个线程),感觉有点高,有什么办法降低吗?
你用一个客户端开5000个线程模拟,与5000个客户端访问是不太一样的。现在只有5台机器,我只做了10000线程 1台、50002、2500*4的实验区别能说深入一点吗麻烦多多指教下