java - 绩效改进 - 如何开始

标签 java performance jakarta-ee jboss httpclient

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

  1. 这现实吗?
  2. 我可以开始关注哪些内容?

现在使用java 5

感谢您的指点和帮助

最佳答案

  1. 您必须使用 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/

相关文章:

java - 如果一个对象不再发生变化,它是否可以安全地跨线程共享? (斯卡拉/ java )

java - Android 2.1 和 HTC Desire : Is there a bluetooth problem?(CorruptedStreamException)

java - NetBeans 中的重音 �

java - 导入类和使用具有完整类名的引用之间是否有任何性能或内存改进?

java - 创建一个后端 java RESTful API,该 API 将与存储在云上的数据库进行通信

java - EJB3.0 将句柄序列化为 Stateful Bean

java - @ElementCollection 至少包含一个元素,最多包含 N 个元素

.net - linq to sql将这个查询翻译成: "select *"?格式是不是效率低下

iphone - iPhone应用性能测试工具

java - 如何将 Glass fish 服务器与用于 Java EE 的 eclipse luna 一起使用?