首页 新闻 会员 周边 捐助

请教个和java虚拟机内存相关的问题,谢谢您的关注和指导

0
[已关闭问题] 关闭于 2013-07-05 23:08

各位论坛的高手大神们你们好,有个问题想请你们指点一下,你们丰富的经验对我至关重要。
先描述一下问题的场景:
网站是由3个tomcat组成的(假设是A,B,C),其中A是接口机,B和C负责处理业务,正常情况下前台发AJAX请求到A,然后A通过http协议转发给B(或者C),B处理业务完成后返回给A,A再返回给前台。这个架构目前正常使用,每天的AJAX请求量大约在20万左右。

上个月做了次优化,当请求量低的时候,A收到的AJAX请求不再转发,而是自己处理,业务处理的代码和B,C的一样,这样省去了和B,C交互的时间,一个普通的ajax接口调用时间可以从100ms降低到80ms左右。

我的问题是这样的:
目前A是否将请求转发到B,C,是通过请求量来判断的,我觉得这个依据不够准确。因为ajax请求的种类很多,例如一个查询记录列表的接口,处理时间是300ms左右,而一个校验名称重复的接口只要60ms就够了,而且我也自测过,2G虚拟机内存的server,循环调用复杂接口,一分钟会导致10次左右的YGC,但是简单的接口一分钟最多两次YGC。

我担心的是以后如果网站搞活动,或者通过webservice向公司的其他系统提供服务,突然某个复杂接口的调用量暴涨,但是总请求量波动不大,这样A机器不会转发请求而是自己处理,A的FGC就会随之暴涨,从而导致系统反复停顿。

所以我想请教大神们,能不能改变判断依据,把最近几分钟的A,B,C的YCG频率做为A机器是否自己处理业务的依据,至于具体每分钟几次我们后面可以自己慢慢摸索,但是不知道这种思路是否可行,希望您给写宝贵的建议和意见

程序员欣宸的主页 程序员欣宸 | 菜鸟二级 | 园豆:224
提问于:2013-07-04 10:16
< >
分享
所有回答(1)
0

我不建议这样的优化方式,将时间花在这个上面不如去优化为什么转发给B/C处理需要100ms。

dudu | 园豆:30948 (高人七级) | 2013-07-04 11:15

dudu你好,有的业务处理时间长但是很难优化,因为这个系统的很多业务是需要和其他部门的系统交互的,这时候等待响应就可能耗时不少,还有拉取其他系统的数据过来本身就是个json,里面是很大的数组,我们得到的数据除了解析还要自己写代码来翻页(那个系统每次返回200记录....),所以有的响应很难继续优化了。

低请求量时做这样的优化目前已经上线使用了,我这里只是想请教下如果各位有这方面的经验,可以指导一下这种参考YGC数量的思路能否走得通,如果有事实证明这个想法根本就不靠谱,我就像你说的一样,不必再花时间去折腾了,安安心心的做其他基础的优化去。

支持(0) 反对(0) 程序员欣宸 | 园豆:224 (菜鸟二级) | 2013-07-04 12:11

@zq2599: 个人觉得根据YGC判断,还不如通过内存中的变量记录每一个接口调用次数,然后据此判断

支持(0) 反对(0) dudu | 园豆:30948 (高人七级) | 2013-07-04 13:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册