
本人正在为公司开发一套消息转发系统,但是经过多次测试,程序的处理速度只能达到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 @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 @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 @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中了啊。大神,能帮帮我么? |