服务器性能优化

一、性能监测工具

1、jconsole

jdk的bin目录,jconsole可以查看当前进程所消耗的资源

2、jvisualvm

jvisualvm不仅可以调试本地,还可以调试远程

 

2.1 同时运行客户端和服务器

2.2 查看server进程的监视器

双击server.jar进程,在弹出的界面中选择监视选项卡

右下角可以看到线程是1012

 

2.3 通过线程选项卡可以查看具体的线程

为什么不是2n,因为发送使用的是单线程池,线程池在没有发送任何数据的情况下是不会初始化,也就是0.

当前只是处于一个等待读取状态

 

2.4 内存

内存消耗在55到120之间

执行垃圾回收后,内存最大在55左右,可以认为内存最低消耗是55左右

 

2.5 cpu基本没怎么消耗

从图中左上角可以看到cpu基本没怎么消耗

 

2.6  开启发送数据线程

当客户端开始回复消息时,线程数量变为2012

 

内存最低大概是80M左右

为什么内存占用并没有太多?

数据是一批一批发送到服务端的,并且立刻把它转发走了,并且转发没有受到阻塞。所以内存几乎没有堆积内存的存在,仅是读取数据的buffer消耗。

不发送内存是55M,发送内存是82M,可以认为发送和不发送之间的内存消耗是27M左右。

消耗最大的是线程。线程虽然可以创建很多,但是当创建2000个线程的时候,效率其实是比较低效的。因为电脑资源是有限的,如果花费大量的时间进行线程之间的切换,其实是不划算的。应该把这个时间花费在真实数据的传输上。

 

当结束客户端后数据信息如何?

当结束客户端后,线程下降为9个,创建的线程全部消耗。

CPU几乎降为零。

内存降为5M左右。也就是说,实现1000个客户端的稳定传输,内存消耗大概达到95M左右,那如果连接10000个,内存消耗大概950M,如果20000个呢?如果日活达到百万级别,又该是多少?那么此时的内存和CPU是严重不够的,在1000个客户端的时候,内存消耗大概占了33%。以及消耗了50%的CPU量,如果CPU占用达到30%以上,就认为消耗是比较高的。

 

 

三、服务器性能分析

CPU:取决于数据的频繁性、数据的转发复杂性

内存:取决于客户端的数量、客户端发送的数据大小

线程:取决于连接的客户端的数量

 

四、服务器优化方案

减少线程数量

增加线程执行繁忙状态

客户端Buffer复用机制

 

 

 

发布了174 篇原创文章 · 获赞 106 · 访问量 79万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览