【发布时间】:2014-08-17 08:34:01
【问题描述】:
我的 java 应用程序执行大量 IO 操作并消耗大量内存和 CPU(序列化和反序列化)。通常有时我的应用程序会在某些时候抛出内存异常,即使堆大小已经增加并且 GC 暂停时间减少了..:( 因此,无法获得预期的性能水平。我发现了一些问题like thiis。但他们是理论上的,找不到适合我的问题。
目前我在线程之间分担负载。我如何看待通过将负载放入不同的 JVM 是否可以获得任何性能改进。我想知道
- 我们可以在不同的JVM之间共享应用程序任务吗?如果可以,如何?(任何例子?)会有性能提升吗?
【问题讨论】:
-
是的,你可以。这并不容易,而且它可能不会给你带来比线程更好的性能。 (事实上它可能会让事情变慢)
-
你可能想研究一下 Hadoop。
-
您可以使用多台机器。如果您的 JVM 正在使用一台机器的所有资源,那么使用更多 JVM 只有在您使用更多机器时才会有所帮助。注意:如果您提高 CPU 和内存使用率,您可以将性能提高 10 倍或更多。在尝试水平扩展之前,我会确保您的应用程序已经过优化,
-
@PeterLawreyj > 感谢您的评论。一点不清楚。 “如果您的 JVM 正在使用一台机器的所有资源,那么使用更多 JVM 只有在您使用更多机器时才会有所帮助。注意:如果您提高 CPU 和内存使用率”。?您的意思是,如果现有的 jvm 消耗了所有资源,那么更多的 JVM 会提高性能吗?如果是这样,请提供任何资源或链接?
-
如果可能的话,如果你觉得这会消耗更多时间,你可以考虑外部化而不是序列化
标签: java multithreading io jvm