性能提升 - 如何入门

时间:2012-11-12 09:50:52

标签: java performance java-ee jboss httpclient

我有一个运行在jboss 5上的应用程序,使用struts2,JAXB,Apache HTTP客户端联系业务逻辑中的其他服务器,oracle db进行一些选择操作和插入日志。对会话有大量并发hashmap管理,在servletcontext中也有很多静态数据缓存。我现在得到的TPS大约是150 TPS,要求是达到3000 TPS,

  1. 这是现实吗?
  2. 我可以开始看什么?
  3. 现在使用java 5

    感谢您提供任何指示和帮助

1 个答案:

答案 0 :(得分:2)

  1. 您必须使用JProfiler,yourkit或任何其他分析工具来了解代码级别的瓶颈在哪里。
  2. 关于可能的地方的一些想法:

    XML和序列化:
    1.我看到了JAXB的一些性能问题。
    XML是必需的吗?我所知道的大多数JSON序列化程序在性能方面都优于JAXB。
    2.另外,想一想你是否需要序列化所有数据,而不是让它有一些瞬态(也是我遇到过的)。 3.使用XML文档(DOM)会带来性能损失。


    DB:
    1.使用explain来分析你的oracle数据库查询(我希望这是它在oracle中调用的方式 - 它将向你展示执行计划并将解释你,以便你可以找到如何改进)。
    2.考虑使用存储过程 - 它们在Oracle服务器上编译并具有更好的性能(与生成的查询相比)。
    3.在DB上使用正确的索引。
    4.在某些情况下,如果它会消除你的一些连接,甚至考虑数据重复(是的,它很难看,我知道)。
    5.了解IN vs EXISTS等问题以及应该使用哪一个问题。

    数据访问层:
    1.尝试查看是否可以使用某些实体缓存(即 - hibernate的第1级或第2级缓存,或您自己的实现)来避免对DB的冗余查询。

    6.并发 -
    您没有提供足够的信息。
    1.您应该考虑使用例如ReaderWriterLock而不是尽可能“同步”。
    2.尝试同步尽可能短的代码区域。

    3.转到JKK 6!我听说他们在同步时提高了性能。 7.交易:
    1.记住事务是昂贵的资源,请确保不要为“只读”代码流打开它们。
    2.确保尽可能缩短交易时间。

    我可以继续下去,但你真的必须解释一下你的结果+系统,这样我们才能真正指导你。