并发客户端BUG修复与性能优化二

43 篇文章 3 订阅

一、bufferedReader读取数据

如果强制退出,读取数据时可能为空,使用str时可能报空指针异常

str = bufferedReader.readLine()

所以需要添加判断

  if(str == null||Foo.COMMAND_EXIT.equalsIgnoreCase(str)){
                break;
            }

 

二、

内存不断上升

cpu时间消耗统计

时间消耗最多的是write、readLine以及println。

这两个主要是IO输出,即System.out或者System.in的IO输出。这两个是界面端的消耗,这两个东西包括了控制台信息输出以及从控制台读取数据的输入。之所以从控制台读取数据排到前面,是因为其在主线程当中,而给主线程分配的cpu时间稍微多一些。但对于整个性能的影响来说,输出的影响更大一些,因为输出的字符串到屏幕上并不能被回收,即GC并不能GC掉屏幕上的信息,从而导致GC延迟,也就导致了其它的线程被等待。

当清空控制台的数据后,可以发现线程又恢复了一段时间正常。

内存也是

这也说明控制台的信息输出是会影响性能的。

所以,去掉下面代码中的System.out

 

在连接200个客户端的情况下,服务端会转发199次,在1.5s内完成,也就是说每秒发生 200*199/1.5 = 26533 大约2万多个连接,内存、cpu虽然有抖动,但是大体上是处于稳定状态。所以说,当前1秒钟发送2万多条数据状态下调度是比较健康的。

线程调度中绿色部分表示正常运作的情况

粉色和橙色表示等待和空闲的状态。

从线程调度来看也基本正常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值