iteye_2131
2013-03-06 11:08 阅读 289

论坛性能瓶颈

     各位,在下混迹javaEye已经小有年头了,虽然做过很多项目,却都不上规模,现在遇到一些问题,自己很难解决,求 教于各位,望大家不吝赐教。

    我手里有一个论坛性质的项目,内网使用,活跃用户两三千,最大并发不过一百。现在的服务器是一台很差劲的机器,甚至还不如我现在的pc快,数据库 appServer 都放在这台机器上的,项目是java6 +weblogic10+oracle10G,今年开始,数据库涨的很凶,光发帖都有好几百万了,还不说评论和回复,我已经尝试做了如下的事情:优化SQL,重新检查和优化索引,使用memcache做部分缓存(memcache也放在这一台机器上),部分页面静态化等等,可是我这是也是sns啊,不可能所有的东西都放到cache或者做成static page,现在的一个瓶颈在于子页面的分页列表性能很差,差不多两秒才能用ajax加载出来,这里面有很多on-time的东西,比如某个帖子的点击次数,最新的评论,用户的动态等等,我想过把这些全部放到memcache中,可是如果人家点击帖子,更新了点击次数这种频繁的操作也要更新cache的话,这个cache也就没有意义了,我还想过改用nosql,也用monggoDB来测试过,性能是没有问题,可是这个项目有还多的统计和复杂查询,而且还比较大,改用no-sql代价太大。

     我现在遇到的问题应该是很多小项目都会有的问题,请各位赐教。(ps:机器短期内不能再加了)

<script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script>

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    j_clxy clxy大叔 2013-03-06 15:14

    你已经做过这许多尝试了,看上去空间很小啊。

    我能想出来,供你参考的地方。

    1. weblogic10+oracle10G 这2个东东很重的吧?分别换成Tomcat+MySQL(PostgreSQL)组合着试试呢? 至少,Oracle很是大材小用的样子。低配的机器上反倒是吃资源。

    2.业务上有调整空间吗?
    [quote]一个瓶颈在于子页面的分页列表性能很差[/quote]
    比如这个问题所在的‘分页’,或者不要该功能;或者变成模糊式的(比如只显示有很多页,但不确定具体页数以减少处理);打马虎眼(比如加个美眉的Loading...动画养养眼,劝用户休息下喝口水啥的哈!)

    在我看来,已经做得很好了。
    低配置 + 千人基数百人同时在线 + 内部使用程序

    2秒的响应?!Perfect!

    还有个歪门邪道,加机器!不给加是吧,把自己的机器用上好了。哇哈哈!

    点赞 评论 复制链接分享
  • littleant678 littleant 2013-03-06 16:16

    你还少样东西,MQ

    点赞 评论 复制链接分享
  • gongm24 死牛胖子的技术随笔 2013-03-06 18:12

    把一些on_time的东西固化,像发帖数之类的,一般都是固化在一个表里,而不是实时去count一下帖子表。

    点赞 评论 复制链接分享
  • weixin_42628032 victor-张 2013-03-06 18:59

    楼下正解,去除count,在写操作的时候把那些计算结果都更新掉,逻辑上保证一致性就好了。

    点赞 评论 复制链接分享
  • richard_2010 richard_2010 2013-03-06 21:21

    说真的,数据库和webapp还有memcached都放一台服务器上,还是oracle+weblogic的组合,2s的响应时间,lz已经做得很棒了。

    不过count这些值不要实时去更新数据库,放到memcached里面实际上是可以的,然后cache中的值每到一定数的时候再去更新数据库(可能会丢)

    点赞 评论 复制链接分享
  • iteye_12540 iteye_12540 2013-03-06 23:01

    有这个功夫买台新机器都够了。全新的一台入门服务器才1-2W,顾这么个程序员折腾几个月比买机器还贵。

    点赞 评论 复制链接分享

相关推荐