我有一个在jboss 5上运行的应用程序,使用struts2、JAXB、Apache HTTP客户端来联系业务逻辑中的其他服务器,使用oracle db进行一些选择操作和插入日志。 session 大量使用并发 HashMap 管理,servletcontext中也缓存了很多静态数据。我现在获得的TPS在150 TPS左右,要求是获得3000 TPS,
- 这现实吗?
- 我可以开始关注哪些内容?
现在使用java 5
感谢您的指点和帮助
最佳答案
- 您必须使用 JProfiler、yourkit 或任何其他分析工具来了解代码级别的瓶颈在哪里。
关于可能的地方的一些想法:
XML 和序列化:
1. 我发现 JAXB 存在一些性能问题。
XML 是必需品吗?我所知道的大多数 JSON 序列化器在性能方面都比 JAXB 更好。
2.此外,考虑是否需要序列化所有数据,而不是其中一些数据是 transient 的(也是我遇到的情况)。
3. 使用 XML 文档 (DOM) 会影响性能。
数据库:
1.使用explain来分析你的oracle DB查询(我希望这就是它在oracle中的调用方式——它将向你展示执行计划并向你解释它,以便你可以找到如何改进)。
2. 考虑使用存储过程——它们在Oracle服务器上编译并且具有更好的性能(与生成的查询相比)。
3. 在数据库上使用正确的索引。
4. 在某些情况下,如果数据重复会消除一些连接,甚至可以考虑数据重复(是的,我知道这很丑陋)。
5. 了解 IN 与 EXISTS 等问题以及应该使用哪一个。
数据访问层:
1.尝试看看是否可以使用一些实体缓存(即hibernate的一级或二级缓存,或您自己的实现)来避免对数据库的冗余查询。
6.并发-
您没有提供足够的信息。
1. 您应该考虑使用 ReaderWriterLock,而不是尽可能使用“同步”。
2. 尝试同步尽可能短的代码区域。
3.迁移到JDK 6!我听说他们提高了同步性能。
7. 交易:
1. 请记住事务是昂贵的资源,请确保不要为“只读”代码流打开它们。
2. 确保事务尽可能短。
我可以一直说下去,但你真的必须更多地解释你的结果+系统,这样我们才能真正指导你。
关于java - 绩效改进 - 如何开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13341481/