0

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

  1. 这是现实的吗?
  2. 我可以开始看什么?

现在使用 java 5

感谢您的任何指示和帮助

4

1 回答 1

2
  1. 您必须使用 JProfiler、yourkit 或任何其他分析工具来了解代码级别的瓶颈在哪里。

关于可能看的地方的一些想法:

XML 和序列化:
1. 我看到了 JAXB 的一些性能问题。
XML 是必需品吗?我知道的大多数 JSON 序列化程序在性能方面都比 JAXB 好。
2.另外,想想如果你需要序列化所有的数据,而不是有一些暂时的(我也遇到过)。3. 使用 XML 文档 (DOM) 会造成性能损失。


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

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

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

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

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

于 2012-11-12T10:44:15.647 回答