我们在64位Linux 2.6服务器上运行32位Sun Java 5 JVM,但显然这将每个进程的最大内存限制为2GB。 所以有人build议我们升级到64位的JVM来消除这个限制。 我们目前在服务器上运行多个JVM(Tomcat实例)以保持2GB的限制,但为了简化部署,我们希望整合它们。
如果你已经这样做了,你能分享一下你的经验吗? 你在运行64位的JVM吗? 你会build议留在Java 5,还是可以同时移动到Java 6 和 64位? 我们是否应该期望性能问题,无论好还是坏? 有什么特别的地方应该关注我们的回归testing吗?
感谢您的任何提示!
这个未经签名的驱动程序是如何在Windows 7 64位上安装的?
在使用C ++的Linux中显示进程
如何检索python中的进程开始时间(或正常运行时间)
可以退出()无法终止进程?
必须重新编译运行x32 ABI应用程序的内容?
使用脚本在cmd或shell中杀死一个进程
64位Windows文件打开
使用C ++在Windows中更新PATH环境variables
查找包含特定文本的窗口
在开普勒科学运营中心,我们有大约50台机器,每台32-64G。 JVM堆通常是7-20G。 我们正在使用Java 6.操作系统有Linux 2.6内核。
当我们迁移到64位时,我预计运行64位JVM会遇到一些问题,但实际上还没有。 由于堆转储非常大,内存不足的情况更难以调试。 Java服务包装器需要一些修改来支持更大的堆大小。
网上有一些网站声称GC不能很好地扩展到2G,但是我没有看到任何问题。 最后,我们正在进行吞吐量密集的交互密集计算。 我从来没有看过延迟差异; 我的猜测是最坏的情况GC堆栈的大小会延长GC延迟时间。
我们使用一个64位JVM,堆大小约为40 Gb。 在我们的应用程序中,大量的数据被缓存,导致一个大的“旧”一代。 默认的垃圾收集设置不能正常工作,需要在生产中进行一些痛苦的调整。 课程:确保您有足够的负载测试基础架构,然后按照这种方式进行扩展。 也就是说,一旦我们找到了解决办法,GC的性能就非常好。
我可以证实肖恩的经验。 我们正在运行纯Java,计算密集型Web服务(自制的Jetty集成,现在有超过1k个servlet线程,内存中加载的数据大于6Gb),而我们所有的应用程序都可以很好地扩展到64位JVM 2年前迁移。 我建议使用最新的Sun JVM,因为在最近的几个版本中已经完成了GC开销的实质性改进。 我对Tanukisoftware的Wrapper也没有任何问题。
你所编写的任何JNI代码假设它是以32位运行的,都需要重新测试。 对于您可能遇到的问题,您可能会将c代码从32位移植到64位,请参阅此链接。 这不是特定于JNI,但仍然适用。 http://www.ibm.com/developerworks/library/l-port64.html
从JDK5 32位(Windows服务器)迁移到JDK6 64位后,我们在“perm gen space”内存块中泄漏。 在玩JDK参数后,它已经解决了。 希望你会比我们更幸运。
如果您使用numactl –show,您可以看到服务器中内存组的大小。 我发现GC在使用多个存储体时不能很好地扩展。 这是一个比软件问题更多的硬件恕我直言,但它可以影响你所有的GC时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。