本人正在为公司开发一套消息转发系统,但是经过多次测试,程序的处理速度只能达到25次每秒,屏蔽了写表和写log等操作也是如此。有一个固定时间消耗在100ms左右。不管是单用户多次请求还是多用户多次请求都是每秒处理25个请求。请教各位java达人,帮忙分析下原因出在哪里?
1
Septembers 2015-03-31 11:45:23 +08:00
抛开业务谈性能是扯淡
|
2
Septembers 2015-03-31 11:48:17 +08:00
消息转发 是不是可以考虑引入Servlet 3的async特性?
|
3
justlikemaki OP @Septembers 处理业务的时间就是那个固定耗时100毫秒左右嘛。还有你提到的异步处理,在我们的业务上实现不了,它的整个流程必须是联通的。
|
4
feilaoda 2015-03-31 11:54:12 +08:00
万亿每秒
|
5
otakustay 2015-03-31 12:17:31 +08:00
业务处理100ms,也就是说1s可以做10次处理,你能做到25req/s,说明你的服务器差不多有4核,或者这100ms里有不少的IO处理?
另外,100ms的业务还是请优化下吧 |
6
sujin190 2015-03-31 12:35:04 +08:00 1
@justlikemaki 异步处理似乎不是这个意思吧
|
7
sujin190 2015-03-31 12:36:10 +08:00
100ms确实有点慢,线程开的不够?
|
8
est 2015-03-31 13:06:05 +08:00
这都能分析出原因就见鬼了。
每个请求都是输出100w位的 /dev/urandom ,我就不行谁能优化下去。 |
9
justlikemaki OP @sujin190 100ms的这个确实处理不了,因为这里是调别人的接口
|
10
justlikemaki OP @est 请问是什么意思呢?
|
11
saximoer 2015-03-31 14:28:32 +08:00
@justlikemaki 中间又远程调用了别人的接口???实在不行就每一步调用的你打日志记录时间
看看哪一块耗时较大 |
12
justlikemaki OP @saximoer 。。就是调接口这个时间啊
|
13
cfan8 2015-03-31 14:59:15 +08:00
线程池大小改改?可能线程数量少了
|
14
justlikemaki OP @cfan8 jdbc线程池设的最大100
|
15
cfan8 2015-03-31 15:08:50 +08:00 1
@justlikemaki 如果你用的不是异步IO的话,整个链上的每一步线程池都会有影响。Spring的对象池最好也看一下。
我之前做SSH性能还是很高的,一台还算牛逼的服务器带两个虚拟机做负载均衡,并发能上2W,不太可能是Spring的问题。 |
16
justlikemaki OP @cfan8 异步io?是改tomcat么?Spring的对象池是什么啊?新手不太懂啊。
|
17
justlikemaki OP @cfan8 怎么看对象池啊?
|
18
sujin190 2015-03-31 17:25:54 +08:00 1
@justlikemaki 我明白了,远程http?java不懂,Python的推荐tornado,或是gevent,不过异步io应该可以解决你的问题
|
19
justlikemaki OP @sujin190 谢谢,我也终于知道你们说的异步io是什么了!
|
20
atom 2015-03-31 18:07:58 +08:00
下载一个试用版的JProfiler跑跑看,胜过这里空对空
|
22
justlikemaki OP @cfan8 配置spring的异步老是提示<async-supported>true</async-supported>没有加这个,但是我确实加在web.xml中了啊。大神,能帮帮我么?
|