我有一个运行在jboss 5上的应用程序,使用struts2,JAXB,Apache HTTP客户端联系业务逻辑中的其他服务器,oracle db进行一些选择操作和插入日志。对会话有大量并发hashmap管理,在servletcontext中也有很多静态数据缓存。我现在得到的TPS大约是150 TPS,要求是达到3000 TPS,
现在使用java 5
感谢您提供任何指示和帮助
答案 0 :(得分: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.确保尽可能缩短交易时间。
我可以继续下去,但你真的必须解释一下你的结果+系统,这样我们才能真正指导你。